Apache-2.2

suPHP : 正確使用 chroot 功能

  • July 17, 2014

我最近開始使用 suPHP,我花費了大量的時間來調試配置和不同的編譯選項來獲得真正有效的東西。我嘗試通過他們的郵件列表聯繫開發團隊,但它顯然是由幽靈組成的……

我正在嘗試使用該chroot參數,但它觸發了我無法解決的 500 內部錯誤。

我將 DBD MySQL 用於 DocumentRoot 定義:

<VirtualHost *:80>
   ServerName *

   DBDriver mysql
   DBDParams <params>
   DBDocRoot "SELECT document_root FROM domains WHERE name=%s" HOSTNAME

   suPHP_Engine on
   AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
   suPHP_AddHandler application/x-httpd-php
</VirtualHost>

一旦 VirtualHost 設置了 DocumentRoot,suPHP 就應該應用一個額外的 chroot。請參閱下面我的相關部分/etc/suphp.conf

docroot=${HOME}
chroot=${HOME}

allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false
check_vhost_docroot=false

參數再簡單不過了chroot,但是 suPHP 吐了:

Caused by SystemException in API_Linux.cpp:465: chdir() failed: No such file or directory

…當我向 PHP 腳本發出請求時。該suphp日誌不包含任何資訊,這一行來自 Apache 錯誤日誌。

地球上真的有人現在如何設置這個可怕的 chroot 功能嗎*?*我已經瀏覽了無數的論壇和列表中的郵件,但沒有人給出正確的答案(儘管這個功能已經被修補了無數次)。或者也許我應該切換到 suExec,希望它能提供更令人滿意的結果……?

您的問題是由於您不了解 chroot 的工作原理造成的。chroot 進入 /home/user 後,這就是新的根目錄,並且路徑與它“相對”。因此,如果您的文件位於 /home/user/public_html 並想 chroot 到 /home/user,那麼 chdir 實際上應該是 /public_html 並且 fastcgi 文件根目錄將是相同的 (/public_html)。

在啟動程序的過程中,suPHP 在技術上不可能在更遠的位置執行 chroot。

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