作为我们网站注册过程的一部分,VirtualHost指令通过PHP创build并添加到configuration文件中,在创build好每个VirtualHost之后,apache会优雅地重新启动,以便新的网站开始工作。 在(www)下运行的用户PHP被授予了在/ etc / sudoer中重新启动apache的权限,然后调用了名为exec('/ usr / local / bin / sudo / usr / local / sbin / apachectl graceful')的php脚本。
这完美的作品。 然而,我们正在转移到一个新的服务器,我无法得到这个新的设置工作
我添加了以下行到/ etc / sudoers
apache ALL= NOPASSWD: /usr/sbin/apachectl graceful
然后我们的PHP脚本调用:
exec('/usr/bin/sudo /usr/sbin/apachectl graceful');
如果我为Apache用户启用shell访问并且login,我可以运行“sudo / usr / sbin / apachectl graceful”,这完全正常,但是从PHP调用它不起作用。
有没有人有任何想法? 谢谢。
在我们以前的FreeBSD服务器上,我们运行的是Apache 1.3.x和PHP 4.4
我们的新服务器是CentOS 5.4 w / Apache 2.2.x和PHP 5.3.2
在sudoers文件(使用visudo)中,在现有的默认行下,添加:
defaults:www !requiretty
其实,你确定它是以“www”用户身份运行吗? CentOS的默认值是“apache”。 一个小脚本来尝试:
<?php print system("whoami");?>
如果不是“www”,只需replace上面的sudoers中的“www”位即可。
你可以尝试与shell_exec?