2011-10-03 7 views
13

मेरे पास एक पायथन स्क्रिप्ट में एक त्वरित कार्य है जिसे मैं Django (www उपयोगकर्ता) से कॉल करना चाहता हूं, जिसे विशेषाधिकारों को रूट करने की आवश्यकता होगी।पाइथन स्क्रिप्ट को रूट के रूप में निष्पादित करें (सेट्यूयूड बनाम सी-रैपर)

सबसे पहले मुझे लगता है मैं पायथन के os.seteuid() का उपयोग करें और स्क्रिप्ट पर setuid बिट सेट कर सकते हैं सोचा, लेकिन तब मुझे एहसास हुआ कि मैं स्थापित करने के लिए अजगर ही है, जो मुझे लगता है पर setuid बिट बड़ा नहीं है के लिए होता है कि नहीं। जो कुछ मैं बता सकता हूं, उससे भी अगर मुकदमा का उपयोग किया जाए तो यह भी मामला होगा, जिसे मैं वास्तव में टालना चाहता हूं।

इस बिंदु पर, मैं केवल एक सी रैपर लिखने पर विचार कर रहा हूं और सेट के लिए मेरी पाइथन लिपि को रूट के रूप में कॉल करता हूं, इसके लिए आवश्यक तर्क पारित करता हूं।

क्या यह सही काम है या मुझे कुछ और देखना चाहिए?

+2

आप इसे 'सबप्रोसेस' और 'सुडो' का उपयोग करके बाहरी प्रक्रिया के रूप में क्यों निष्पादित नहीं करते हैं, भले ही इस बारे में सबकुछ सड़ा हुआ हो। – Anders

+0

क्योंकि उसे रूट के रूप में पायथन चलाने के लिए www अनुमति देने की आवश्यकता होगी :( – kwl34

+1

प्राथमिक समस्या यह है कि सेटुइड और सामान्य सूडो ऑपरेशंस व्यक्तिगत पायथन स्क्रिप्ट पर लागू नहीं होते हैं क्योंकि वे बाइनरी करेंगे, बल्कि पाइथन दुभाषिया स्वयं। – kwl34

उत्तर

14

सूडो को पायथन पर सेट्यूड बिट की आवश्यकता नहीं है। आप एक आदेश केवल, कोई तर्क के लिए sudo सक्षम कर सकते हैं:

www   ALL=(ALL)  NOPASSWD: /root/bin/reload-stuff.py "" 

यह सुरक्षित हो सकता है अगर अपनी स्क्रिप्ट किसी भी तर्क नहीं ले करता है, उपयोगकर्ता www द्वारा ओवरराइड नहीं किया जा सकता है, और sudo सबसे में "env_reset" (डिफ़ॉल्ट करता है distros)।

आप तर्क स्वीकार कर सकते हैं, लेकिन उनके साथ बहुत सावधान रहें - आउटपुट फ़ाइल नाम न लें, सुनिश्चित करें कि आप सभी इनपुट सत्यापित करते हैं। इस मामले में, सुडो लाइन के अंत से "" हटा दें।

+0

दिलचस्प! मैं तुरंत इसका परीक्षण करने जा रहा हूं। हालांकि, मेरी लिपि सरल बातों के बावजूद तर्क लेती है। क्या आपको लगता है कि जब तक मेरी पाइथन लिपि इन तर्कों पर सख्त मिलान कर रही है तब तक मैं ठीक रहेगा? – kwl34

+0

हां। जब तक आप उनके साथ सावधान रहें तब तक आप agrumnts ले सकते हैं। – theamk

+0

'ALL = (root) 'शायद स्क्रिप्ट को केवल रूट पर सीमित करने के लिए प्राथमिकता दी जाती है, और कोई अन्य उपयोगकर्ता नहीं। केवल आपको जो चाहिए उसे सीमित करने के लिए बेहतर है। – CivFan

1

sudo आपको प्रोग्राम में दिए गए तर्कों को सीमित करने की अनुमति देता है। man sudoers से:

john   ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* 

On the ALPHA machines, user john may su to anyone except root but 
he is not allowed to specify any options to the su(1) command. 

तो सुडो का उपयोग करें। निस्संदेह आपको रूट पहुंच के साथ अतिरिक्त सावधानी बरतनी चाहिए - सुनिश्चित करें कि केवल रूट ही स्क्रिप्ट स्वयं और किसी भी मूल निर्देशिका को संशोधित कर सकता है, और यह कि स्क्रिप्ट सुरक्षित है और केवल पूर्ण न्यूनतम है जिसे रूट के रूप में चलाने की आवश्यकता है।

+0

I गलत हो सकता है, लेकिन यह अभी भी www उपयोगकर्ता सूडो रूट को पायथन दुभाषिया तक पहुंचने की आवश्यकता है, और आप अनिवार्य रूप से सूडो के तर्क पार्सर का उपयोग कर रहे हैं ताकि आपकी स्क्रिप्ट को चलाने की अनुमति मिल सके। क्या यह सही है? यदि ऐसा है, तो यह आसान होगा स्क्रिप्ट (कुंजी/मान) को पारित तर्कों के लिए भी खाते हैं? – kwl34

+0

हां, यह सही है। और हाँ, यह आसान होना चाहिए, लेकिन मैं stdin/stdout के माध्यम से संचार करने की अनुशंसा करता हूं। दुर्भाग्यवश, यह एक सुरक्षा प्रश्न है, वास्तव में 'मैन सूडर्स' पढ़ने के लिए कोई विकल्प नहीं है। –

3

सही चीज़ को विशेषाधिकार अलगाव कहा जाता है: स्पष्ट विशेषाधिकारों पर किए जाने वाले कार्यों के न्यूनतम सेट को स्पष्ट रूप से पहचानें। एक अलग डिमन लिखें और कार्य को संप्रेषित करने के संभावित तरीके के रूप में सीमित करें। इस विशेषाधिकार को उच्च विशेषाधिकार वाले दूसरे उपयोगकर्ता के रूप में चलाएं। थोड़ा और काम, लेकिन अधिक सुरक्षित।

संपादित करें: एक सेटयूड-सक्षम रैपर का उपयोग करने से विशेषाधिकार अलगाव की अवधारणा को भी पूरा किया जाएगा, हालांकि मैं अनुशंसा करता हूं कि वेब सर्वर को चिल्लाया जाए और chrooted फ़ाइल सिस्टम नोसुइड (जो इसे पराजित करेगा) को घुमाएगा।

+0

यही वह है जो मैं एक सी रैपर बाइनरी का उपयोग कर प्रस्तावित कर रहा हूं। यह स्पा के लिए एक सीमित इंटरफ़ेस प्रदान करता है विशिष्ट कार्यों को उपयोगकर्ता को seteuid() के माध्यम से उन्नत विशेषाधिकारों तक पहुंच की आवश्यकता होती है। – kwl34

+0

हाँ, आप सही हैं, वह करेंगे।मैंने इसे नहीं माना, क्योंकि मैं वेब सर्वर chrooting और वेब सर्वर सुलभ फ़ाइल सिस्टम nosuid पर बढ़ने की सलाह देते हैं। – knitti

+0

मैं सी रैपर पर सुडो की सिफारिश करना चाहता हूं। PYTHONSTARTUP, या कुछ अन्य env चर को साफ़ करना भूलना बहुत आसान है - लेकिन env_reset के साथ sudo यह आपके लिए करेगा। – theamk

संबंधित मुद्दे