Linux

mod_ruid2 超過 mod_fcgid

  • June 26, 2012

我剛剛開始聽說 ruid2 並且想知道它是否比 fcgid 更安全?我聽說它不太安全而且問題更多。兩者之間有什麼區別嗎?

fastcgi 是否也一樣有 mod_fcgid

我正在使用CPanel。

這些是比較蘋果、橙子和香蕉。

首先,FastCGI是一種用於在持久應用程序(或應用程序伺服器)和 Web 伺服器之間進行通信的協議。支持 FastCGI 的應用程序自行執行並接收來自網路伺服器的請求,然後將響應返回給網路伺服器以提供給客戶端。發明 FastCGI 是因為在啟動新程序、載入庫、讀取配置等方面存在一定的成本。如果您啟動程序一次並保持它執行許多請求,則可以避免大部分成本。 mod_fcgid是該協議的實現。目前,mod_fcgid 有一個弱點(它假設一個正在執行的 FastCGI 程序一次只能處理一個請求,因此不能很好地與連接池或程序管理器如php-fpm甚至使用PHP_FCGI_CHILDREN>0的 php-cgi )所以人們將舊mod_fastcgi的從 apache 1.x 移植到 2.x。

其次,mod_ruid2似乎是一個suexec/mod_suid2替換,它與 FastCGI 完全正交。 suexec是一個特殊的 suid 根程序,apache 執行並告訴它更改為特定使用者。然後該腳本可以以該使用者身份執行程序。通常,一旦完成此操作,它就會退出,因為它不再能夠切換到另一個使用者。 mod_suid2出現並允許 apache 本身在提供頁面之前從 root 更改為另一個使用者。這意味著 apache 可以切換到一個使用者,然後打開文件並執行 CGI 程序,甚至使用 mod_* 處理程序(例如 mod_php)作為特定使用者執行腳本,但是由於 apache 本身現在作為該使用者被卡住,所以 apache 程序有退出並被新的根程序替換。 索賠mod_ruid2 使用 POSIX “能力”模型來​​允許 apache 從 root 切換到另一個使用者,同時保持切換回的能力。通過這樣做,它可以做 mod_suid2 可以做的所有事情,但不必在每次請求後退出。mod_suid2 和 mod_ruid2 都需要 apache 使用mpm-prefork程序模型,因為每個程序只能是一個使用者。所有這三個選項都可用於執行 fastcgi 伺服器,但是該伺服器將以啟動時的任何使用者身份執行(除非 mod_ruid2 更改使用者的能力是可繼承的,在這種情況下,以後的任何程式碼都可以將其更改為 root) .

www-data安全方面,通常 apache在啟動後立即切換到非 root 使用者(例如)。mod_suid2 和 mod_ruid2 都要求 apache 一直以 root 身份執行,直到它為請求提供服務,這意味著如果 apache 中存在可以在服務請求之前觸發的漏洞利用(例如,在 URL 處理期間),攻擊者可以獲得對系統的 root 訪問權限。在 mod_ruid2 中,如果攻擊者可以保留 apache 程序直到它在請求結束後切換回 root 以利用 root 訪問權限,這可能會在整個請求中擴展。此外,請注意,在 apache 內部執行的任何程式碼(例如使用 mod_php 的 PHP 程式碼)都具有 apache 本身俱有的任何功能。因此,如果 apache 可以切換回 root,那麼在 apache 中執行的任何 PHP(或其他程式碼)也可以。 suexec僅在腳本啟動時執行,並且只有 root 足夠長的時間來決定切換到哪個使用者並更改為該使用者。但是,它可能允許利用非 root apache 的人通過執行 suexec 二進製文件來訪問另一個使用者。

我希望您問這個問題是因為您想以不同的使用者身份執行 PHP 腳本。根據我的經驗,以腳本使用者身份執行託管 PHP 的典型方法是使用不帶 FastCGI 的 suexec,以便每個腳本都作為單獨的程序執行。 有些人結合 FastCGI 和 suexec通過使用 mod_fastcgi 為系統允許執行腳本的每個使用者啟動至少一個 FastCGI 伺服器,然後將請求定向到相應使用者的伺服器。對於擁有大量使用者的系統,這可能會導致大量 PHP 程序並佔用大量記憶體,但仍可能比為每個請求啟動和停止一個 PHP 程序執行得更好。在我看來,mod_ruid2 打算通過使用 mod_php 而不是使用 CGI 來實現這一點,但我會擔心這可能會破壞 mod_php 中的許多假設。在我的腦海中,持久的數據庫連接可能會被錯誤的使用者訪問,或者像 APC 這樣的記憶體最終可能會在使用者之間共享程式碼。

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