繁体   English   中英

为什么php命令`exec(“service apache2 restart”);`不能在ubuntu上工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM