保護同一 Apache 目錄中包含的站點
/var/www
我已經在不同的子目錄中設置了我的所有網站。假設我有 5 個基於 CMS 的站點,例如WordPress/var/www/a.com
、/var/www/b.com
、和./var/www/c.com``/var/www/d.com``/var/www/e.com
但是我發現,如果我向 中的某個人授予管理員權限
a.com
,使用某些外掛,他們可以訪問到/var/www
,並訪問不同的目錄,比如說/var/www/c.com
,因此他們可以通過閱讀例如配置文件來獲得訪問權限(wp-config.php
) 在 WordPress 的情況下,因為最終目錄列表外掛通過可能具有組訪問權限的 Web 伺服器執行此操作。我找到的唯一解決方案是僅在此文件中限制對來賓和組的完全訪問,因此從技術上講,它只能通過具有 root 訪問權限的 SSH 訪問,但這可能會導致錯誤,因為 Web 伺服器將無法訪問,除非Web 伺服器使用者是所有者。
這使我得出結論,如果您在同一主機上託管多個站點,並且它們執行相同的 Web 伺服器守護程序,則存在固有風險。但是應該有一個解決方案,因為這是由世界各地的數百個虛擬主機完成的。
鑑於這種情況,誰能推薦我一個解決方案?
解決方案是使用 PHP FPM 池,因此每個目錄將由不同的使用者執行。
我之前忘了寫這個,但這就是我解決問題的方法,現在文件權限很有意義,因為我可以按照 UNIX 經典文件系統權限控制的意圖對所有者、組和來賓權限進行巨大控制。
如果您使用PHP並且想要阻止任何 php 腳本瀏覽目前網站以外的其他目錄,那麼最簡單的方法是,您可以使用
open_basedir
更多資訊:https ://www.php.net/manual/en/ini.core.php#ini.open-basedir
編輯: 為了像 Gerald Schneider 所說的那樣更安全,請將您的 open_basedir 添加到您的網路伺服器配置或 php 池中。
在您的網站文件夾中添加一個 .user.ini 文件並更改所有者權限以不讓您的網路伺服器或 php 編輯/刪除此文件。
例子 :
/var/www/a.com/.user.ini
添加類似這樣的內容:
open_basedir = "/var/www/a.com:/tmp"
所以這意味著,對於 PHP,它將無法解析這些路徑之外的內容(/var/www/a.com 和 /tmp,需要上傳)。
檢查您的 php.ini 以啟用此配置文件,檢查它,執行
phpinfo()
並檢查user_ini.filename
更多資訊:https ://www.php.net/configuration.file.per-user
此提示僅保護您免受使用 PHP 函式的 PHP 腳本的影響,您無需更改任何目錄權限,但如果有人想使用 PHP 執行批處理腳本,它可以解析其他文件夾,如果您使用 sftp、ftp 或其他東西瀏覽您的文件,此規則將不起作用。