通过PHP exec运行SUDO?

时间:2012-10-28 02:26:48

标签: php python ubuntu

  

可能重复:
  How to call shell script from php that requires SUDO?

我有一个需要SU权限才能运行的Python文件(在Ubuntu服务器上) 无法弄清楚该怎么做。

从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 个答案:

答案 0 :(得分:0)

你的命令是wong:

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

您可以直接调用python解释器,但在sudores文件中,您只允许/path/to/myprog.py

如果你想这样做,那么在你的python程序中添加一个shebang并使其可执行,然后将命令改为

$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"

可能因两个原因失败了:

  • 当前用户(可能是网络服务器进程)不允许sudo
  • sudo不会使用root密码,而是使用当前用户密码

你真的不想传递这样的密码......