我在本機開發盒上安裝了帶有 FastCGI (mod_fastcgi)、suExec 和 PHP 的 Apache。工作完美,除了一件事。
假設我有兩個用戶:
user1 - /home/user1/public_html
user2 - /home/user2/public_html
我在我的設定中發現了一個嚴重的安全漏洞:我可以在 user1 檔案中包含來自 user2 Web 根目錄的檔案。如何預防?有小費嗎?
php-cgi
進程正在正確的用戶下運行。
答案1
我建議您base_path
在 VirtualHost 中設定:
php_admin_value open_basedir /usr/local/www/sixeightzero
答案2
如果目標是以使用者的名義運行 php,請將它們分開,然後嘗試apache2-mpm-itk,它比 fast-cgi 更容易部署,而且效果很好。
要使用,您只需將此行新增至虛擬主機配置:
AssignUserId someuser somegroup
如果您願意,也可以設定 MaxClientsVHost 和 NiceValue。
答案3
正確執行此操作的唯一方法是禁止一個用戶從另一個用戶的 homedir 讀取文件,但讓網路伺服器可以讀取它們。
您可以透過(範例)來完成此操作:
使用 acl 選項掛載檔案系統:
mount -o acl /dev/sda /home
允許網路伺服器存取它:
setfacl -m u:nobody:r-x /home/user1
setfacl -m u:nobody:r-x /home/user2
允許所有者閱讀:
setfacl -m u:user1:r-x /home/user1
setfacl -m u:user2:r-x /home/user2