无法在php中更改system()内的用户

时间:2011-05-06 04:15:04

标签: php permissions sudo

我的命令是

echo root_password | sudo -u root -S executable_full_path arguments

我在浏览器中收到的错误消息是

  www-data的

[sudo]密码:对不起,   再试一次。

从phpinfo()开始,安全模式关闭,没有禁用的功能。为什么这不起作用?相同的命令在shell(bash)中运行正常。 Escapeshellarg和escapeshellcmd没有什么区别。

编辑:仅仅能够执行命令是不够的。执行的程序在/ tmp中创建一个套接字,并需要为其分配权限。所以我认为我真的需要成为根,这可能吗?

3 个答案:

答案 0 :(得分:3)

当您回显www-data的密码时,您正在回显root密码。

答案 1 :(得分:3)

正如Álvaro所说,我把我的评论作为答案。 Matt,这样可以以root身份运行该命令。

@Matt,不要这样做/etc/sudoers(顺便说一句,你用visudo命令编辑这个文件,永远不要直接编辑。这样,您可以使您的Web应用程序运行的任何sudo whatever命令都由root运行,如果攻击者在您的应用程序中发现漏洞,则可能会为攻击者带来很多乐趣。

如果您想以root身份运行一个命令而不需要密码,请将其放在/etc/sudoers中(记住visudo命令):

www-data ALL=(ALL) NOPASSWD: executable_full_path

然后您只允许以root身份执行此命令。现在你应该能够做到

sudo -u root executable_full_path arguments

无需输入密码(它将以root身份运行)。此外,这是用户www-data可以使用sudo以root身份执行的唯一命令,因此它不应该是危险的。

答案 2 :(得分:0)

在你的/ ets / sudoers上使用它 运行gconftool-2的示例:

www-data ALL=NOPASSWD: /usr/bin/gconftool-2
www-data ALL=NOPASSWD: /usr/bin/sudo
www-data ALL=NOPASSWD: ALL