我的命令是
echo root_password | sudo -u root -S executable_full_path arguments
我在浏览器中得到的错误信息是
[sudo] password for www-data: Sorry, try again.
在 phpinfo() 中,安全模式关闭并且没有禁用的功能。为什么这不起作用?相同的命令在 shell (bash) 中运行良好。 Escapeshellarg 和 escapeshellcmd 没有区别。
编辑:仅仅能够执行命令是不够的。被执行的程序在/tmp 中创建一个套接字,并需要为其分配权限。所以我认为我真的需要为此 Root ,这可能吗?
最佳答案
正如 Á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 用户执行的唯一命令,因此它应该不会有危险。
关于php - 无法在 php 的 system() 中更改用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906717/