【发布时间】:2014-07-28 19:11:28
【问题描述】:
我的 linux 系统上有一个用户 brftv,我有运行 nginx 的 www-data。
从终端我可以让我的 brftv 用户运行
sudo /sbin/reboot
它工作正常,因为我将以下内容添加到我的 /etc/sudoers 文件的“#user privilege specification”部分:
brftv ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff
www-data ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff
但是当我的 php 文件运行以下代码时,什么也没有发生
exec('nohup sudo -u brftv /sbin/reboot');
我在上面的 etc/sudoers 中添加了 www-data 行,以防在运行上述 exec() 时有必要(即使我将它作为 -u brftv 运行,但我不是 linux 专家,只是想得更好以防万一)。
运行这个 exec() 的 php 文件归 www-data 所有,chmod 是 777,因此所有人都应该有权从它执行。
我尝试通过浏览器(我假设将由用户 www-data 运行)和终端 $php myFile.php 运行 php 文件。
------------------- 更新 ------
我做了这个
sudo chmod u s /sbin/reboot
这允许我系统上的所有用户在没有密码的情况下运行重启 cmd。它可以工作,但我宁愿不让它打开,所以 /etc/sudoers 的其他解决方案会更好,如果有人能暗示我的问题是什么......
我遵循了这个 tut http://linux.byexamples.com/archives/315/how-to-shutdown-and-reboot-without-sudo-password/,第二个例子几乎就是我上面得到的,对我不起作用..
【问题讨论】:
-
尝试通过您的 Web 服务器从 PHP 脚本执行 'whoami' 以验证它运行的用户身份。
标签: php linux nginx exec reboot