关于此主题有许多问题,但是我的情况很奇怪。PHP - exec sudo命令不会返回任何内容
我想在php中打印出exec("sudo -u root whoami")
。但它什么都没有返回。
我通过sudo visudo
添加了%www-data ALL=(ALL:ALL) ALL
,但没发生什么事情,没有错误,只是没有打印出任何东西。
有什么建议吗?
在此先感谢
关于此主题有许多问题,但是我的情况很奇怪。PHP - exec sudo命令不会返回任何内容
我想在php中打印出exec("sudo -u root whoami")
。但它什么都没有返回。
我通过sudo visudo
添加了%www-data ALL=(ALL:ALL) ALL
,但没发生什么事情,没有错误,只是没有打印出任何东西。
有什么建议吗?
在此先感谢
如何您的Web服务器会为sudo
输入密码?
您的配置允许webserver-user在服务器上运行所有命令。但是那需要用户输入他们的密码。而网络服务器
所以如果你想要做你试着做(给进程中运行PHP什么根访问机器是非常糟糕的主意),你应该将它添加到你的sudo-配置:
%www-data ALL = NOPASSWD: /usr/bin/whoami
这允许组www数据运行whoami
作为根没有一个interctive密码提示
我添加了'%www-data ALL =(ALL:ALL)ALL',我认为这包括您提到的内容?我知道这是一个坏主意,但它不起作用 –
其实你所说的建议完美无缺。但有没有一种更安全的方法来做到这一点,还是我违背所有安全规则? –
虽然它不需要密码,但实际上并没有创建任何东西。我尝试了一个简单的mkdir命令并且没有创建文件夹。在此先感谢 –
我要把它放在那里,这是一个可怕的想法。您的网络服务器/ PHP不应该拥有对整个系统的root权限。 –
除了您即将创建的可怕安全漏洞:您的sudoers条目并不意味着在更改的用户标识下实际执行命令时不需要密码。您无法以交互方式提供的密码。你想阅读sudoers文件提供的'NOPASSWD'选项,你想在文档中阅读这个选项。但再一次:出于安全原因,这是一个坏主意。 – arkascha
此外,只需在现有的超级用户下使用PHP CLI进行测试,并且'echo exec(“sudo -u root whoami”)'可以正常工作,但需要输入密码。 –