我的命令是
echo root_password | sudo -u root -S executable_full_path arguments
我在浏览器中收到的错误消息是
www-data的[sudo]密码:对不起, 再试一次。
从phpinfo()开始,安全模式关闭,没有禁用的功能。为什么这不起作用?相同的命令在shell(bash)中运行正常。 Escapeshellarg和escapeshellcmd没有什么区别。
编辑:仅仅能够执行命令是不够的。执行的程序在/ tmp中创建一个套接字,并需要为其分配权限。所以我认为我真的需要成为根,这可能吗?
答案 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