Apache-2.2

通過 PHP 重新啟動 apache 的問題(即使使用 sudo)

  • July 15, 2010

作為我們網站註冊過程的一部分,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 w/ Apache 2.2.x 和 PHP 5.3.2

在 sudoers 文件(使用 visudo)中,在 extant defaults 行下方,添加:

defaults:www !requiretty

實際上,您確定它以“www”使用者身份執行嗎?CentOS 的預設值為“apache”。一個小腳本嘗試:

<?php print system("whoami");?>

如果不是“www”,只需替換上面 sudoers 中的“www”位。

你可以試試 shell_exec 嗎?

引用自:https://serverfault.com/questions/160328