hostuser 帳號,所有虛擬主機 FTP 映射至該帳號,家目錄鎖定於 htdocs/hosts,上傳檔案屬性為 hostuser:hostuser (644/755)。nobody(或專屬 apache)身分執行,讀取 hostuser 的腳本檔案。uploads、cache 設為 777 並遞迴套用,並以 .htaccess: php_flag engine off 禁用腳本執行,防止 WebShell 執行。現象: Apache 建立的檔案/目錄屬主為 nobody (644/755),導致 FTP 使用者 hostuser 無法刪除 cache、uploads 內容。
以 ADOdb 為例,修改兩處:
adodb.inc.php 第 1681 行:if (!mkdir($dir, 0771))adodb-csvlib.inc.php 第 287 行:chmod($tmpname, 0644); → chmod($tmpname, 0666);建立排程腳本,定期將 cache、uploads 目錄權限重設為 777,或提供管理介面讓使用者自行清空。
| 措施 | 說明 |
|---|---|
PHP safe_mode | 檢查腳本與目標檔案屬主一致性,但會阻擋 hostuser 刪除 nobody 建立的檔案,建議關閉。 |
open_basedir | 替代方案:php_admin_value open_basedir /docroot 限制各用戶僅能存取自身文檔根目錄。 |
| 程式碼審計 | 確保所有 PHP 過濾 RCE 與 LFI 攻擊,防止讀取 config.php 或操作緩存目錄。 |
| 敏感資料隔離 | cache 目錄嚴禁存放密碼等敏感資訊。 |
expose_php = Off | 隱藏 HTTP 標頭中的 PHP 版本資訊,降低指纹識別風險。 |
透過 FTP 與 Web 執行身分分離、可寫目錄禁用腳本執行、程式碼層面權限修正與 PHP 開放基礎目錄限制,可構建較完善的虛擬主機安全基線。