通过PHP exec运行SUDO?

通过PHP exec运行SUDO?,php,python,ubuntu,Php,Python,Ubuntu,可能重复: 我有一个Python文件,需要SU权限才能运行(在Ubuntu服务器上)。 不知道怎么做 从PHP运行它,如下所示: $command = "python /path/to/my/file.py params"; $temp = exec($command, $output); var_dump($output); 不工作。(对于非根目录,Xvfb无法启动) 尝试: $command = "echo 'root_pwd' | sudo -S python /program.py

可能重复:

我有一个Python文件,需要SU权限才能运行(在Ubuntu服务器上)。
不知道怎么做

从PHP运行它,如下所示:

$command = "python /path/to/my/file.py params";
$temp = exec($command, $output);
var_dump($output);
不工作。(对于非根目录,Xvfb无法启动)

尝试:

$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文件(不需要特殊权限)可以正常工作。

请帮忙

附言: .Py文件正在制作URL的屏幕截图,使用webkitgtk、Xvfb和其他一些东西也是如此。

您的命令是:

$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
?):


你试过的另一种方法

$command = "echo 'root_pwd' | sudo -S python /program.py"
可能失败的原因有两个:

  • 当前用户(可能是Web服务器进程)不允许sudo
  • sudo
    不接受根密码,而是当前用户密码
而且你真的不想这样传递密码…

许多(大多数?)sudo配置包括
requirety
指令,该指令防止非用户终端进程调用
sudo
。禁用
requirety
可能会让您的运气更好,但我强烈建议您咨询serverfault.com,以获得正确的设置方法。您可能会严重破坏系统的安全性。。。
$command = "echo 'root_pwd' | sudo -S python /program.py"