
我正在運行一個實驗性的 Apache Web 伺服器,只是為了好玩。該伺服器背後的部分想法是它應該異常地向公眾開放;例如,根檔案系統應該開放供任何人瀏覽。 (事實上,這裡是:http://sylvester.s.zbasu.net/rootfs/)因此,安全性將退居二線。
也就是說,有些東西 Apache 應該能夠訪問,但公眾不應該訪問。我遇到的範例是 Django 網站。該檔案settings.py
必須可由 Apache 讀取,否則 Django 將無法運作。但settings.py
不能被公眾讀取,因為它包含密鑰。因此該文件應歸 擁有www-data
,但 Apache 仍應拒絕為其提供服務。
一個可能的解決方案(感謝ellipsis753
Freenode)是建立一個特殊指令(可能在一個.htaccess
檔案中),告訴 Apache 不要提供該檔案。然而,我認為如果一個檔案不能被所有使用者讀取,它可能也不應該由 Apache 提供服務。
我可以告訴 Apache,如果一個檔案不是世界可讀的,那麼就不應該提供該檔案嗎?
答案1
如果您在 FastCGI 或 mod_wsgi 的守護進程模式下執行 Django 應用程序,那麼您可以以與 Apache 運行時不同的使用者身份運行它。然後,您可以完全刪除 Apache 和 World 讀取您不想提供服務的任何檔案的權限。
例如,請注意您的密碼文件/etc/shadow
已經無法訪問,因為 Apache 沒有它的權限,而且它不是世界可讀的。web-apps
例如,如果您創建一個新用戶,並將其添加WSGIDaemonProcess myapp user=web-apps ...
到 Apache 配置中,那麼您可以讓該用戶擁有 Django 應用程序web-apps
,但其配置文件不是世界可讀的,就像shadow
現有文件一樣。