多站點託管安全 - 確保沒有腳本可以作為 Apache 使用者執行,但只能作為每個網站的使用者執行
在設置一個包含多個應該相互隔離的站點的託管環境時,我做了一個明顯的步驟,即配置 PHP,使其以與每個網站相關聯的使用者而不是 Apache 使用者身份執行,但有什麼方法嗎確保一個站點無法以 Apache 使用者的身份執行以其他語言(例如 Python)編寫的腳本?我見過像符號連結攻擊這樣聰明的攻擊,它使用 .htaccess 規則和符號連結來欺騙 Apache 以明文形式提供來自其他網站的 PHP 文件(這與問題無關,只是一個例子),因為我不是很熟悉 PHP 以外的伺服器端語言的設置,我不知道要檢查和/或禁止什麼,例如通過 Apache conf 文件以確保用其他語言編寫的腳本可以'
例如,即使 PHP 設置為以網站使用者身份執行,如果網站被黑客入侵,黑客是否可以創建一個 .htaccess 文件,該文件將 .abc 文件設置為作為 Perl 腳本執行,並且伺服器上的配置不正確,那麼那些以 Apache 使用者身份執行?
解決這個問題的最佳方法是什麼?
從閱讀http://httpd.apache.org/docs/2.4/misc/security_tips.html看來,如果正確使用 suexec,那麼作為 Apache 使用者執行的 CGI 腳本不應該是一個問題,因為它們會被執行在由 suexec 指令定義的使用者下。
因此,您主要擔心的是,一個帳戶遭到入侵不會對其他帳戶造成任何不利影響。
PHP 和文件權限
如果 PHP 被配置為每個域的不同使用者執行,那麼您的目錄應該設置為它沒有對自己域之外的任何內容的寫訪問權。然後使用 PHP(或通過 PHP 呼叫的任何其他命令)它不會對伺服器的其餘部分造成任何損害。
最佳實踐是讓腳本歸 user1 所有,但 PHP 在 user2 下執行。對於客戶訪問,應為 user1 配置 FTP。使用者 2 應僅在真正需要的地方(記憶體目錄、生成縮略圖、通過 PHP 上傳文件)被授予對特定目錄的寫入權限。
但是很多人開始安裝 Wordpress 和其他 CMS,不知道該做什麼並授予對所有內容的寫訪問權(然後編寫糟糕的 CMS 外掛可能會危及該域的所有 php 腳本)。即使沒有 PHP 程序的寫入權限,Wordpress 和其他 CMS 現在也支持安裝/升級(他們只是要求 FTP 登錄並自動使用它)。
另一個最佳實踐是阻止對 user2 具有寫入權限的目錄的直接 Web 訪問。文件上傳應該由您的腳本檢查,並且只有在有效的情況下,才移動到可從外部訪問的目錄(否則有人可以上傳 PHP 腳本而不是 JPG 圖像,並可能欺騙您的網路伺服器執行它)。
阿帕奇
使用 Apache 的
AllowOverride None
指令禁用該.htaccess
文件的使用,這樣攻擊者就無法配置其他 CGI 腳本的執行。Apache 應該只有對所服務文件的讀取權限(包含密碼的 PHP 配置文件不需要 Apache 的讀取權限)。禁用後,.htaccess
使用者無法更改 Apache 配置。使用
Options -FollowSymLinks
(或-SymLinksIfOwnerMatch
)防止符號連結“攻擊”。安裝
mod_security
以監視可疑活動並阻止 SQL 注入等黑客攻擊。編輯:如果
.htaccess
需要,您需要決定您的主機將支持哪些選項並僅啟用這些選項。常用的安全選項範例包括(在 中列出AllowOverride
):
- AuthConfig - 啟用基本 HTTP 身份驗證
- ErrorDocument - 定義自己的 URL 而不是預設的 404 響應(因為您只定義 URL,只能使用已經可訪問的內容,所以沒有風險)
- 索引- 如果您想啟用普通目錄列表
- 限制- 通過 IP 地址限制訪問(通常由
Deny from all
指令用於拒絕對部分目錄的訪問)- RewriteEngine、RewriteOptions、RewriteBase、RewriteCond、RewriteRule - 用於 mod_rewrite
- SymLinksIfOwnerMatch - mod_rewrite 需要(它的文件說明它需要
FollowSymLinks
,但它似乎也適用於這個);除了使用 mod_rewrite 之外,如果目標文件/目錄與符號連結本身是同一使用者的所有者,Apache 只會遵循符號連結。