我需要在带有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的权限!你有什么建议?
发布于 2011-11-20 17:08:59
你得跑:
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");(您正在尝试通过web重新启动apache,可能您不知道网民接口吗?我认为有比这种方法更好的解决办法。授权www数据停止、启动(.)不是件好事。所有的服务。最好解释一下为什么要重新启动apache ;)
发布于 2011-11-20 16:29:33
服务(在系统服务的意义上,比如Apache )只能由根用户(UID 0)操作(启动、停止、重新启动)。
要么在root的上下文中运行PHP脚本(糟糕的想法),要么使用类似于数独的命令作为超级用户运行这些命令。这就是说,在运行具有超级用户权限的程序时,存在着非常严重的安全问题,特别是如果您没有正确地清理您的输入!
发布于 2011-11-20 16:28:09
您看过Apache错误日志吗?里面有什么?
几乎可以肯定的是,PHP脚本的运行没有足够的权限重新启动Apache。这可能是最好的选择。如果您真的需要这样做,可以考虑从PHP调用setuid根脚本(请注意,这不应该在生产中使用,很可能会创建一个安全漏洞)。
您还可以编写一个小服务,它以root用户的身份运行,并接受从PHP脚本重新启动Apache的命令。这将是一种更“适当”的方式,虽然手头的任务本身似乎不合适,所以我不确定你是否应该继续沿着这条路前进。
https://stackoverflow.com/questions/8202887
复制相似问题