Apache-2.2
SuExec:“命令不在 docroot 中”即使是?
- Arch Linux 2011.08.19 (Linux 3.4.2 i686)
- 帶有 SuExec 的 Apache 2.2.22
- PHP 5.4.4 (cli) 通過 FastCGI
我的網站早些時候都執行良好……我不確定它是什麼時候發生的,因為我在一個多星期後才注意到它(我猜可能是在系統升級之後),但我所有的 VirtualHosts 都因可怕的“腳本過早結束”而離線標頭:php-fcgid-wrapper” 500 錯誤。
SuExec 日誌給了我每個站點的這個:
[2012-07-16 00:45:02]: uid: (1001/site) gid: (1001/site) cmd: php-fcgid-wrapper [2012-07-16 00:45:02]: command not in docroot (/var/www/site/fcgi-bin/php-fcgid-wrapper)
這不是(或至少不應該是)真的……我用set自動編譯 Apache 。
--with-suexec-docroot=/srv/www
儘管如此,我還是嘗試了一個健全性檢查,看看 docroot SuExec 實際上認為它有什麼:$ suexec -V suexec policy violation: see suexec log for more details
日誌聲稱:
[2012-07-16 01:07:52]: too few arguments
也用 sudo 嘗試過;一樣。因此,即使這樣也沒有任何意義,並且使我無法正確診斷問題。
我嘗試的另一件事是將所有內容從預設 docroot 移至 ,以查看在升級期間它是否已恢復為原始儲存庫版本
/srv/www
。/var/www
更新了我的 VirtealHosts,重新啟動了 Apache,但仍然出現相同的 500 錯誤。還有什麼可能導致這種情況?
你需要重新編譯 suexec.c –with-suexec-docroot=/srv/www
你不需要重新編譯它。您可以使用此包在 debian 或 ubuntu 上設置自定義路徑:
apt-get install apache2-suexec-custom
安裝包後,有一個特殊的目錄,你可以在其中設置每個使用者的 suexec 路徑。www-data 使用者應該有一個範例文件:
/etc/apache/suexec/<some-user-name>
如果您沒有 Debian 或 Ubuntu,則必須尋找這樣的軟體包或使用正確的 docroot 重新編譯 suexec(請參閱suexec doc)。參數是:
--with-suexec-docroot=DIR
您必須檢查如何為您的發行版執行此操作。