我有一个需要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和其他东西。
答案 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
不会使用root密码,而是使用当前用户密码你真的不想传递这样的密码......