2010-07-02 6 views
39

मेरे पास एक फ़ाइल है जो एक बैश स्क्रिप्ट है जिसके लिए एसयूडीओ को काम करने की आवश्यकता है।एसएचडीओ की आवश्यकता वाले php से खोल स्क्रिप्ट को कैसे कॉल करें?

मैं इसे SUDO का उपयोग करके कमांड लाइन से चला सकता हूं लेकिन मुझे SUDO पासवर्ड डालने के लिए कहा जाएगा।

मैं इस स्क्रिप्ट को php से shell_exec के माध्यम से चलाने के लिए चाहता हूं, लेकिन अगर मैं SUDO को कॉल करता हूं, तो यह कमांड लाइन की तरह नहीं है जहां मुझे पासवर्ड के लिए संकेत दिया जा सकता है। सुडो कॉल के साथ सूडो के पासवर्ड को पास करने का कोई तरीका है?

मैं यह कैसे कर सकता हूं?

+0

वैसे मैं apache2 और PHP5 –

+0

आप स्क्रिप्ट की अनुमतियां बदलने पर विचार करना चाहिए के साथ 10.04 मशीन ubunto अपने दम पर इस चल रहा हूँ। उदाहरण के लिए आप समूह को अपाचे उपयोगकर्ता (www-data) में बदल सकते हैं, और समूह निष्पादन अनुमतियां दे सकते हैं: 'chgrp www-data script.sh && chmod g + x script.sh'। –

+0

@ डैनिलो इसकी फ़ाइल नहीं है जिसके लिए एसयूडीओ की फाइलों की आवश्यकता होती है, जो 'svn commit' है, लेकिन पहले मैं' cd/var/www' को काम करने वाली प्रतिलिपि से svn प्रतिबद्ध करने के लिए कॉल करता हूं। क्या कोई तरीका है कि मैं apache उपयोगकर्ता www-admin के लिए ऐसा करने के लिए अनुमतियां जोड़ सकता हूं? –

उत्तर

41

सूडोर्स फ़ाइल (visudo के साथ) संपादित करें और एक नियम जोड़ें जो वेब सर्वर उपयोगकर्ता को पासवर्ड के बिना कमांड चलाने की अनुमति देता है। उदाहरण के लिए:

www-data ALL=NOPASSWD: /path/to/script 
+0

यह काम nginx के लिए भी करता है? –

5

आप अपने sudoers फाइल करने के लिए कुछ इस तरह जोड़ सकते हैं:

username ALL=NOPASSWD: /path/to/script 

यह उस विशेष उपयोगकर्ता पासवर्ड के लिए संकेत जा रहा है बिना कि विशेष रूप से पटकथा पर sudo कॉल करने के लिए अनुमति देगा।

+1

यह समझ में आता है लेकिन एक हिस्सा मुझे भ्रमित करता है ... मैं वास्तव में लाइन 'उपयोगकर्ता नाम ALL = NOPASSWD:/path/to/script' कहां डालूं, मेरी सूडो फाइल क्या है? –

+1

'/ etc/sudoers' में, हालांकि आप आमतौर पर उस फ़ाइल को संपादित करने के लिए 'visudo' कमांड का उपयोग करते हैं। –

8

इस समस्या के लिए कई समाधान हैं।

सभी की
  • सबसे पहले, स्क्रिप्ट अनुमतियों को बदलने पर विचार करता है, तो कारण है कि आप sudo चाहते बस एक अनुमति मुद्दा (टिप्पणी मैं ऊपर सवाल करने के लिए जोड़ा देखें)।

  • एक और दृष्टिकोण setuid bit का उपयोग करेगा। [संपादित करें: ऐसा लगता है कि setuid स्क्रिप्ट के साथ अच्छी तरह से काम नहीं करता है। स्पष्टीकरण के लिए, this link देखें।]

  • एक तिहाई, लेकिन बहुत ही असुरक्षित विधि पासवर्ड फ़ाइल से पासवर्ड पढ़ने के लिए है। चेतावनी: यदि यह कोई अन्य संभावना है, तो यह बहुत असुरक्षित है, ऐसा मत करो। और यदि आप ऐसा करते हैं, तो अपने फ़ोल्डर पदानुक्रम में कहीं भी पासवर्ड फ़ाइल छिपाने का प्रयास करें।

    <?php 
    shell_exec('sudo -u root -S bash script.sh < /home/[user]/passwordfile'); 
    ?> 
    
  • और एक चौथाई संभावना sudoers फाइल में NOPASSWD tag उपयोग करने के लिए है। आपको इस शक्ति को आपके द्वारा आवश्यक विशिष्ट आदेशों तक सीमित करना चाहिए।

+0

स्क्रिप्ट अनुमति को बदलने से इसे रूट के रूप में नहीं चलाया जाएगा, और setuid स्क्रिप्ट्स पर काम नहीं करता है – Brian

+0

नहीं, यह इसे रूट के रूप में नहीं चलाएगा, लेकिन अगर सुडो उपयोग का कारण बस स्क्रिप्ट है तो यह समस्या हल करेगा निष्पादन योग्य नहीं है। और सेटुइड चीज़ के बारे में, ऐसा लगता है कि आप सही हैं। उस मामले में, मेरी गलत जानकारी बहाना। मुझे इस विषय के बारे में एक उपयोगी लिंक मिला: http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html –

+1

ओएमजी। एक पासवर्ड बचाओ जो रूट पहुंच नहीं है! यह कभी भी अच्छा फॉर्म नहीं रहा है। @ ब्रायन का जवाब बहुत बेहतर है: कोई पासवर्ड इस्तेमाल नहीं किया गया। – cmroanirgo

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