[英]why php command `exec(“service apache2 restart”);` does't work on ubuntu?
我需要在我的Web服务器上执行一些命令,并使用apache配置php。
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权限! 你有什么建议?
你需要运行:
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;))
服务(在系统服务方面,如Apache httpd)只能由root用户(UID 0)操纵(启动,停止,重新启动)。
要么在root的上下文中运行PHP脚本( 糟糕的主意),要么使用像sudo这样的命令以超级用户身份运行命令。 这就是说,运行具有超级用户权限的程序时会产生非常严重的安全隐患,特别是如果您没有正确清理输入!
您是否看过Apache错误日志? 那里有什么?
几乎可以肯定,您的PHP脚本运行时没有足够的权限来重启Apache。 这可能是最好的。 如果你真的需要这个工作,可以考虑从PHP调用setuid root脚本(请注意,这不应该在生产中使用,并且可能会创建一个安全漏洞)。
您还可以编写一个以root身份运行的小服务,并接受从PHP脚本重启Apache的命令。 这是一种更“正确”的做法,虽然手头的任务看起来本身就是不合适的,所以我不确定你应该继续这条道路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.