Apache-2.4

保護同一 Apache 目錄中包含的站點

  • May 8, 2022

/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 或其他東西瀏覽您的文件,此規則將不起作用。

引用自:https://serverfault.com/questions/1046743