
長話短說:如何以安全的方式啟用 mod_userdir? (意思是:每個使用者應該能夠在 ~/public_html 中創建和提供他們的內容,但他們不應該被允許讀取彼此的內容,也不能直接讀取 - cat /home/userX/public_html/file
- 也不能透過 PHP 函數 ( file_get_contents('/home/userX/public_html/file'
))
細節: 我已經使用 mod_userdir 配置了 Apache,以便為我的用戶提供在 ~/public_html 資料夾中放置檔案的選項。為了保護文件存取並避免任何使用者可以讀取其他人的文件,我配置了以下權限:
/home/userA user.user drwx--x--x (711)
/home/userA/public_html user.user drwxrwx--x (771)
我已新增www-data
至每個使用者的群組:(
usermod -a -G user www-data
它也可以建立一個群組並將所有使用者新增至www-data
其中,包括 )
所有配置都按預期工作。任何使用者都可以從 https://server/~user 存取其內容,並且無法讀取任何其他人的檔案:
userA@ubuntu:/home$ cat userB/public_html/index.php
cat: userB/public_html/index.php: Permission denied
到目前為止,一切都很好。但問題是,由於 Apache 正在運行並且www-data
它可以對 /home/* 內的任何文件進行群組訪問,因此任何用戶都可以使用 、 、 等函數創建 PHP 文件來讀取其他人exec
的system
內容file_get_contents
。
我知道我可以禁用這些函數來執行將它們添加到disable_functions
區塊中的操作php.ini
,但我認為這是一個補丁,而不是解決方案。所以在我看來應該有其他更安全的方法來設定這個啟用 userdir 的 Apache 設定。我已經尋找一種方法來正確執行此操作,但尚未找到合適的解決方案。