首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么php命令``exec(“服务apache2重新启动”);‘不能在ubuntu上工作?

为什么php命令``exec(“服务apache2重新启动”);‘不能在ubuntu上工作?
EN

Stack Overflow用户
提问于 2011-11-20 16:23:36
回答 3查看 19.9K关注 0票数 6

我需要在带有apache配置的php的web服务器上执行一些命令。

代码语言:javascript
复制
exec("service apache2 restart", $output);
print_r($output);

产出:

代码语言:javascript
复制
Array (
    [0] =>  * Restarting web server apache2
    [1] => Action 'start' failed.
    [2] => The Apache error log may have more information.
    [3] =>    ...fail! 
)

我猜是因为我的ubuntu上有php的权限!你有什么建议?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-20 17:08:59

你得跑:

代码语言:javascript
复制
visudo

检查一下你是否有这样的一行

代码语言:javascript
复制
Host_Alias LOCAL=192.168.0.1 

将您自己的本地IP放在文件的顶部,然后添加一行

代码语言:javascript
复制
www-data       LOCAL=NOPASSWD:/usr/bin/service

最后在PHP文件中:

代码语言:javascript
复制
exec("/usr/bin/sudo /usr/bin/service apache2 restart");

(您正在尝试通过web重新启动apache,可能您不知道网民接口吗?我认为有比这种方法更好的解决办法。授权www数据停止、启动(.)不是件好事。所有的服务。最好解释一下为什么要重新启动apache ;)

票数 9
EN

Stack Overflow用户

发布于 2011-11-20 16:29:33

服务(在系统服务的意义上,比如Apache )只能由根用户(UID 0)操作(启动、停止、重新启动)。

要么在root的上下文中运行PHP脚本(糟糕的想法),要么使用类似于数独的命令作为超级用户运行这些命令。这就是说,在运行具有超级用户权限的程序时,存在着非常严重的安全问题,特别是如果您没有正确地清理您的输入!

票数 2
EN

Stack Overflow用户

发布于 2011-11-20 16:28:09

您看过Apache错误日志吗?里面有什么?

几乎可以肯定的是,PHP脚本的运行没有足够的权限重新启动Apache。这可能是最好的选择。如果您真的需要这样做,可以考虑从PHP调用setuid根脚本(请注意,这不应该在生产中使用,很可能会创建一个安全漏洞)。

您还可以编写一个小服务,它以root用户的身份运行,并接受从PHP脚本重新启动Apache的命令。这将是一种更“适当”的方式,虽然手头的任务本身似乎不合适,所以我不确定你是否应该继续沿着这条路前进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8202887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档