我需要在配置了apache的php的web服务器上执行一些命令。
exec("service apache2 restart", $output);
print_r($output);
输出:
Array (
[0] => * Restarting web server apache2
[1] => Action 'start' failed.
[2] => The Apache error log may have more information.
[3] => ...fail!
)
我的猜测是因为我的ubuntu上的php权限! 你有什么建议?
答案 0 :(得分:6)
您需要运行:
visudo
检查您是否有像
这样的行Host_Alias LOCAL=192.168.0.1
在文件顶部使用您自己的本地IP,然后添加一行
www-data LOCAL=NOPASSWD:/usr/bin/service
最后在PHP文件中:
exec("/usr/bin/sudo /usr/bin/service apache2 restart");
(你试图通过网络重启apache,也许你不知道webmin界面?我认为解决方案比这个sudo方式更好。授权www-data停止,启动并不是一件好事(...)所有服务。更好地解释你为什么要重启apache;))
答案 1 :(得分:2)
服务(在系统服务方面,如Apache httpd)只能由root用户(UID 0)操纵(启动,停止,重启)。
您可以在root的上下文中运行PHP脚本(错误的想法),或者使用类似sudo的内容以超级用户身份运行命令。这就是说,运行具有超级用户权限的程序时会产生非常严重的安全隐患,特别是如果您没有正确清理输入!
答案 2 :(得分:1)
您是否看过Apache错误日志?那里有什么?
几乎可以肯定,您的PHP脚本在没有足够权限重新启动Apache的情况下运行。这可能是最好的。如果你真的需要这个工作,可以考虑从PHP调用setuid root脚本(请注意,这不应该在生产中使用,并且可能会产生安全漏洞)。
您还可以编写一个以root身份运行的小服务,并接受从PHP脚本重启Apache的命令。这将是一个更好的"适当的"这样做的方式,虽然手头的任务本身不合适,所以我不确定你应该继续这条道路。