2011-07-13 16 views
8

से एक शेल कमांड निष्पादित करने के लिए कैसे मैं एक शेल कमांड निष्पादित करने और इसके आउटपुट को वापस करने के लिए एक php स्क्रिप्ट बनाना चाहता हूं। सर्वर को एक निजी कुंजी की आवश्यकता है। जब मैंने पहली बार इसका परीक्षण करने का फैसला किया तो मैंने इसे बनाया:एक php स्क्रिप्ट

<?php 
$command = "ls"; 
$output = shell_exec($command); 
echo "<pre>$output</pre>"; 
?> 

यह ठीक काम करता था। लेकिन जब मैं आदेश को $command बदल मैं वास्तव में चलाने के लिए चाहता था:

You need root privileges to run this script 

मेरा अनुमान है मैं sudo उपयोग करने की आवश्यकता है:

$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig"; 

यह मुझे इस उत्पादन दे दी है। बेशक, सर्वर पर कहीं भी पेम फ़ाइल डालने की आवश्यकता होगी। मान लीजिए कि मैं ऐसा करता हूं, $command क्या होना चाहिए? क्या मुझे shell_exec(), exec(), system() या कुछ और उपयोग करना चाहिए?

उत्तर

4

यह कोई फर्क नहीं पड़ता जो php समारोह आप स्क्रिप्ट शुरू करने के लिए का उपयोग करें - क्या अभाव है आपके उपयोगकर्ता खाते का प्राधिकरण है।

या तो sudo का उपयोग करें (visudo के माध्यम से पासवर्ड के बिना सटीक आदेश को चलाने के लिए वेब सर्वर उपयोगकर्ता preconfigure, और sudo साथ आदेश उपसर्ग) या एक setuid स्क्रिप्ट पर ही आदेश निष्पादित करता है की स्थापना की।

+0

हालांकि यह भी * मायने रखता है कि उपयोगकर्ता खाता अधिकृत होना चाहिए, इसका मतलब यह नहीं है कि PHP फ़ंक्शन का उपयोग करने के लिए सबसे अच्छा विकल्प नहीं है। कौन सा सबसे अच्छा है? –

+0

@ केनेथ वोगट 'exec', क्योंकि इसमें अनिवार्य रूप से खोल शामिल नहीं है और नतीजा देता है, या' पासथ्रू ', जो परिणाम को सीधे आउटपुट करता है, लेकिन मूल कोड के कुछ संशोधन की आवश्यकता होगी। – phihag

3

आपको वास्तव में क्या करना है, एक विशिष्ट उपयोगकर्ता के रूप में चलाने के लिए अपना वेब सर्वर सेट करें (उदाहरण के लिए 'कोई नहीं' के अलावा), या उस उपयोगकर्ता अनुमति को जो आप निष्पादित करना चाहते हैं उसे दें।

यह भी देखें: PHP shell_exec() and sudo: must be setuid root

+0

यह सवाल पूछता है: आप अपने वेब सर्वर को 'कोई नहीं' के अलावा किसी विशिष्ट उपयोगकर्ता के रूप में चलाने के लिए कैसे सेट करते हैं? –

+0

@ केनेथ वोगट, मुझे कैसे पता होना चाहिए, आपने यह निर्दिष्ट नहीं किया कि आप किस सर्वर का उपयोग कर रहे थे। यदि आप अपाचे का उपयोग कर रहे हैं, तो 'उपयोगकर्ता' और' समूह 'कॉन्फ़िगरेशन निर्देशों की जांच करें। (http://httpd.apache.org/docs/1.3/mod/core.html#user) यदि आप यह काम नहीं कर पा रहे हैं, तो पूछने के लिए उचित जगह ServerFault.com है। – Brad