0

可能重复:
如何从需要 SUDO 的 php 调用 shell 脚本?

我有一个需要 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 和其他一些东西。

4

1 回答 1

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 文件中指定的用户必须是执行命令的用户,这可能不是nobodyWeb 服务器进程(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密码,而是当前用户密码

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

于 2012-10-28T13:38:24.383 回答