Apache-2.2
通過 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 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 嗎?