Apache-2.2

SuExec:“命令不在 docroot 中”即使是?

  • February 12, 2016
  • 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

您必須檢查如何為您的發行版執行此操作。

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