2012-10-28 143 views
0

可能重複:
How to call shell script from php that requires SUDO?通過PHP exec運行SUDO?

我有需要SU權(Ubuntu的服務器)上運行Python文件。
無法弄清楚如何去做。

從PHP運行它像這樣:

$command = "python /path/to/my/file.py params"; 
$temp = exec($command, $output); 
var_dump($output); 

不工作。 (Xvfb來無法啓動非root)

嘗試:

$command = "echo 'root_pwd' | sudo -S python /program.py params" 
... 

沒有工作。

嘗試:編輯/ etc/sudoers文件:

Cmnd_Alias BUNDLE = /path/to/myprog.py 
nobody ALL=(ALL) NOPASSWD:BUNDLE 

然後:

$command = "sudo -u nobody python myprog.py params"; 
... 

沒有工作。
當我說「沒有工作」 - 我的意思是var_dump($ output)返回空數組,服務器上沒有成功的結果(myprog.py應該在服務器上生成一個文件),或者頁面只需加載幾分鐘直到它超時。

基本的.py文件(不需要特殊權限)工作。

請幫忙。

PS: .Py文件製作URL的截圖,所以使用webkitgtk,Xvfb和其他一些東西。

+1

許多(大多數?)sudo的配置包括了'requiretty'指令,它防止'被稱爲sudo'通過非用戶終端進程。您可能在運行時禁用了'requiretty',但我強烈建議您諮詢serverfault.com以獲得正確的設置。你可能會嚴重損害你的系統的安全性...... –

回答

0

你的命令是黃:

$command = "sudo -u nobody python myprog.py params"; 

在這裏,我們直接調用Python解釋器,但在你的sudores文件,你只允許/path/to/myprog.py

如果你想這樣做,這樣,然後添加一個認領你的Python程序,並使其可執行文件,然後改變你的命令

$command = "sudo -u nobody /path/to/myprog.py params"; 

但是這個工作,用戶您在指定sudoers文件必須是執行該命令的用戶,可能不是nobody,而是web服務器進程(www-data?):

Cmnd_Alias BUNDLE = /path/to/myprog.py 
www-data ALL=(ALL) NOPASSWD:BUNDLE 

另一種方法你試過

$command = "echo 'root_pwd' | sudo -S python /program.py" 

可能失敗的原因有兩個:

  • 當前用戶(可能是Web服務器程序)是不允許的sudo
  • sudo不佔用root密碼,但當前用戶的密碼

而且你並不真的想通過密碼這樣反正...