2012-06-06 4 views
12

के तहत एक पार्टी स्क्रिप्ट चलाने के लिए?कैसे PHP से कैसे <strong>जड़</strong> उपयोगकर्ता (सभी अनुमतियों के साथ) और नहीं <strong>कोई भी</strong> उपयोगकर्ता के तहत PHP से एक bash स्क्रिप्ट चलाने के लिए रूट उपयोगकर्ता

sudo visudo के बाद मेरे उत्पादन thats:

Defaults  env_keep += "LINES COLUMNS" 
Defaults  env_keep += "LSCOLORS" 
Defaults  env_keep += "SSH_AUTH_SOCK" 
Defaults  env_keep += "TZ" 
Defaults  env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" 
Defaults  env_keep += "EDITOR VISUAL" 
Defaults  env_keep += "HOME MAIL" 

#User privilege specification 
root ALL=(ALL) ALL 
%admin ALL=(ALL) ALL 


# Uncomment to allow people in group wheel to run all commands 
# %wheel  ALL=(ALL) ALL 

# Same thing without a password 
# %wheel  ALL=(ALL) NOPASSWD: ALL 

# Samples 
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom 
# %users localhost=/sbin/shutdown -h now 
+3

यह खतरनाक लगता है, इसलिए स्पष्ट प्रश्न उठाता है: क्यों आप ऐसा करने की जरूरत है? शायद यह एक बेहतर समग्र समाधान है। –

उत्तर

27

आप sudo का उपयोग कर सकते हैं:

exec("sudo /your/script"); 

आप पासवर्ड संकेत किए बिना ही अपनी स्क्रिप्ट लागू करने की अनुमति चाहिए। कंसोल में sudo visudo चलाने के लिए और अंत करने के लिए निम्नलिखित स्ट्रिंग जोड़ें:

:

nobody ALL = NOPASSWD: /your/script 

आप फ़ाइल मोड ठीक से सुनिश्चित करने के लिए है कि कोई भी इस स्क्रिप्ट को संशोधित और इसे में खतरनाक सामग्री डाल (रूट कंसोल में) कर सकते हैं सेट करना होगा

chown root:root /your/script 
chmod 755 /your/script 
+0

मुझे वास्तव में इसे कहां जोड़ना चाहिए? मैं प्रश्न – Oleg

+0

+1 अच्छा जवाब में 'सुडो विसुडो' के बाद अपना आउटपुट प्रकाशित करता हूं। –

+0

बस फ़ाइल के अंत में नई लाइन डालें। –

1

आप एक प्रोग्राम है जो सेट uid है जड़ बना सकते हैं। यह प्रोग्राम को हमेशा रूट के रूप में चलाने का कारण बनता है। यह शैल स्क्रिप्ट के साथ काम नहीं करता है, इसलिए आपको program which calls your script का उपयोग करना होगा।

+0

लिंक टूटा हुआ लगता है। – Droidzone

0

लिनक्स के तहत आप आमतौर पर sudo का उपयोग करके ऐसा करते हैं। यथासंभव सटीक होने का प्रयास करें, इसलिए स्क्रिप्ट को बहुत अधिक अनुमति न दें।

कैसे sudo का उपयोग करने पर उदाहरण के लिए: http://aplawrence.com/Basics/sudo.html

+0

समस्या यह है कि जब मैं इसे टर्मिनल पर चलाता हूं तो यह अच्छा काम करता है, लेकिन जब मैं उस बैश स्क्रिप्ट को php से चलाता हूं तो इसे निष्पादित नहीं किया जाता है ('cp', 'mv' कमांड के साथ अन्य सरल बैश), मुझे लगता है कि यह 90% अनुमतियाँ। – Oleg

0

मैं sudo का उपयोग कर इस स्क्रिप्ट उपयोगकर्ता nobody द्वारा कहा जा करने की अनुमति, एक विशिष्ट नियम जोड़ना होगा।

+0

मैं यह कैसे कर सकता हूं? मैंने कई चीजों की कोशिश की लेकिन यह – Oleg

+0

काम नहीं करता Riateche का जवाब देखें - आपको "visudo" फ़ाइल (sudoers कॉन्फ़िगरेशन फ़ाइल) में 'none ALL = NOPASSWD:/your/script'' पंक्ति जोड़ने की आवश्यकता है। बेशक, अपनी स्क्रिप्ट के पथ से '/ your/script' विकल्प'। –

+0

मैं इस फ़ाइल को कैसे संपादित कर सकता हूं? मैंने 'सुडो विसुडो 'का इस्तेमाल किया लेकिन यह केवल आउटपुट दिखाता है। – Oleg

0

मैंने हाल ही में एक प्रोजेक्ट प्रकाशित किया है जो PHP को वास्तविक बैश खोल (उपयोगकर्ता: अपाचे/www-डेटा या जरूरी होने पर रूट) के साथ प्राप्त करने और बातचीत करने की अनुमति देता है। आप बस निम्नलिखित कोड का प्रयोग करेंगे डाउनलोड करने के बाद https://github.com/merlinthemagic/MTS

: यहां प्राप्त करें

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 
$return1 = $shell->exeCmd('/full/path/to/script.sh'); 
संबंधित मुद्दे

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