作为我们网站注册过程的一部分,VirtualHost 指令通过 PHP 创建并添加到配置文件中,每个 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 访问并登录,我可以完美地运行“sudo /usr/sbin/apachectl graceful”,只是当我们从 PHP 调用它时它不起作用。
有人有什么想法吗?谢谢。
在我们的旧 FreeBSD 服务器上,我们运行的是 Apache 1.3.x 和 PHP 4.4
我们的新服务器是 CentOS 5.4,带有 Apache 2.2.x 和 PHP 5.3.2
答案1
在 sudoers 文件(使用 visudo)中,在现有的默认值行下方添加:
defaults:www !requiretty
实际上,您确定它是以“www”用户身份运行的吗? CentOS 的默认用户是“apache”。 尝试一下这个小脚本:
<?php print system("whoami");?>
如果不是“www”,只需替换上面 sudoers 中的“www”位。
答案2
您可以尝试使用 shell_exec 吗?