通过 PHP 重新启动 Apache 时出现问题(即使使用 sudo)

通过 PHP 重新启动 Apache 时出现问题(即使使用 sudo)

作为我们网站注册过程的一部分,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 吗?

相关内容