Apache HTTP 伺服器 2.4 版
說明 | 支援 Solaris 權限以及在不同使用者 ID 下執行虛擬主機。 |
---|---|
狀態 | 實驗性 |
模組識別碼 | privileges_module |
原始碼檔案 | mod_privileges.c |
相容性 | 在 Apache 2.3 及更高版本中可用,適用於 Solaris 10 和 OpenSolaris 平台 |
此模組允許不同的虛擬主機以不同的 Unix 使用者和 群組 ID 以及不同的 Solaris 權限 執行。特別是,它為不同虛擬主機之間的權限分離問題提供了解決方案,這是先前被放棄的 perchild MPM 所承諾的。它還提供了其他安全性增強功能。
與 perchild 不同,mod_privileges
本身不是 MPM。它在處理模型內部運作,以在執行中的進程中按請求設置權限和使用者/群組。因此,它與多執行緒 MPM 不相容,並且會拒絕在其下執行。
mod_privileges
引發了類似於 suexec 的安全性問題。但與 suexec 不同的是,它不僅適用於 CGI 程式,還適用於整個請求處理週期,包括進程內應用程式和子進程。它非常適合在 mod_php 下執行 PHP 應用程式,這也與多執行緒 MPM 不相容。它也非常適合其他進程內腳本應用程式,例如 mod_perl、mod_python 和 mod_ruby,以及在權限分離存在問題的 Apache 模組中以 C 語言實作的應用程式。
mod_privileges
在不受信任的程式碼可能在網頁伺服器進程內執行的狀況下引入了新的安全性問題。這適用於不受信任的模組,以及在 mod_php 或 mod_perl 等模組下執行的腳本。外部執行的腳本(例如 CGI 或 mod_proxy 或 mod_jk 後面的應用程式伺服器)不受影響。
mod_privileges 的基本安全性問題是
PrivilegesMode
指令允許您選擇 FAST 或 SECURE 模式。您可以混合使用模式,對受信任的使用者和經過完整審核的程式碼路徑使用 FAST 模式,同時在不受信任的使用者有機會引入程式碼的地方強制使用 SECURE 模式。
在描述模式之前,我們還應該介紹目標用例:良性與惡意。在良性情況下,您希望為了方便起見將使用者分開,並保護他們和伺服器免受誠實錯誤帶來的風險,但您相信您的使用者不會故意破壞系統安全性。在惡意情況下(例如商業託管),您可能會遇到故意攻擊系統或彼此的使用者。
您可以為每個虛擬主機,甚至在虛擬主機內的目錄上下文中選擇不同的 PrivilegesMode
。在使用者受信任和/或沒有載入進程內程式碼的權限的情況下,FAST 模式是適當的。在不受信任的程式碼可能在進程內執行的情況下,SECURE 模式是適當的。但是,即使在 SECURE 模式下,也無法防止能夠在請求處理週期開始之前引入具有權限感知能力的程式碼的惡意使用者。
說明 | 確定是否啟用 dtrace 所需的權限。 |
---|---|
語法 | DTracePrivileges On|Off |
預設值 | DTracePrivileges Off |
上下文 | 伺服器設定 |
狀態 | 實驗性 |
模組 | mod_privileges |
相容性 | 在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。 |
此伺服器範圍指令確定 Apache 是否會以執行 dtrace 所需的 權限 執行。請注意,DTracePrivileges On 本身不會啟動 DTrace,但 DTracePrivileges Off 會阻止它運作。
說明 | 在處理速度和效率與針對惡意權限感知程式碼的安全性之間進行權衡。 |
---|---|
語法 | PrivilegesMode FAST|SECURE|SELECTIVE |
預設值 | PrivilegesMode FAST |
上下文 | 伺服器設定、虛擬主機、目錄 |
狀態 | 實驗性 |
模組 | mod_privileges |
相容性 | 在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。 |
此指令在效能與針對惡意、具有權限感知能力的程式碼的安全性之間進行權衡。在 SECURE 模式下,每個請求都在安全的子進程中執行,導致相當大的效能損失。在 FAST 模式下,伺服器不受上述權限提升的保護。
此指令在 <Directory>
上下文(包括 Location/Files/If 等等效項)和頂層或 <VirtualHost>
之間略有不同。
在頂層,它設置一個預設值,該預設值將由虛擬主機繼承。在虛擬主機中,FAST 或 SECURE 模式作用於整個 HTTP 請求,並且 <Directory>
上下文中的任何設置都將被忽略。第三種虛擬模式 SELECTIVE 將 FAST 與 SECURE 的選擇延遲到 <Directory>
上下文中的指令。
在 <Directory>
上下文中,它僅適用於為 VirtualHost 設置 SELECTIVE 模式的情況。在此上下文中只能設置 FAST 或 SECURE(SELECTIVE 沒有意義)。
<Directory>
上下文適用於請求之後。這可能會讓攻擊者有機會透過在頂層或 <VirtualHost>
上下文中執行的 RewriteMap
在降低權限和設置 userid/gid 之前引入程式碼。說明 | 確定虛擬主機是否可以執行子進程,以及子進程可用的權限。 |
---|---|
語法 | VHostCGIMode On|Off|Secure |
預設值 | VHostCGIMode On |
上下文 | 虛擬主機 |
狀態 | 實驗性 |
模組 | mod_privileges |
相容性 | 在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。 |
確定是否允許虛擬主機執行 fork 和 exec,執行子進程所需的 權限。如果將此設置為 Off,則會拒絕虛擬主機的權限,並且將無法在傳統的 mod_cgi
下執行傳統的 CGI 程式或腳本,也無法執行 mod_ext_filter
或 RewriteMap
prog 建立的類似外部程式。請注意,它不會阻止在替代進程和安全模型(例如 mod_fcgid)下執行的 CGI 程式,這是 Solaris 中的建議解決方案。
如果設置為 On 或 Secure,則允許虛擬主機執行上述外部程式和腳本。設置 VHostCGIMode
Secure 的效果是拒絕子進程的權限,如 VHostSecure
中所述。
說明 | 將任意權限分配給虛擬主機建立的子進程。 |
---|---|
語法 | VHostCGIPrivs [+-]?權限名稱 [[+-]?權限名稱] ... |
預設值 | 無 |
上下文 | 虛擬主機 |
狀態 | 實驗性 |
模組 | mod_privileges |
相容性 | 在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM),並且在使用 BIG_SECURITY_HOLE 編譯時選項編譯 mod_privileges 時。 |
VHostCGIPrivs
可用於將任意 權限 分配給虛擬主機建立的子進程,如 VHostCGIMode
中所述。每個 權限名稱 都是 Solaris 權限的名稱,例如 file_setid 或 sys_nfs。
權限名稱 可以選擇性地以 + 或 - 作為前綴,這將分別允許或拒絕權限。如果既不使用 + 也不使用 -,則將拒絕分配給虛擬主機的所有其他權限。您可以使用它來覆蓋任何預設集並建構您自己的權限集。
此指令可能會在 apache 子進程中開啟巨大的安全漏洞,甚至包括以 root 級別的權限執行它們。除非您完全了解自己在做什麼,否則不要使用它!
說明 | 設置執行虛擬主機的群組 ID。 |
---|---|
語法 | VHostGroup unix-groupid |
預設值 | 繼承 |
上下文 | 虛擬主機 |
狀態 | 實驗性 |
模組 | mod_privileges |
相容性 | 在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。 |
VHostGroup
指令設置伺服器將用於處理虛擬主機請求的 Unix 群組。群組在處理請求之前設置,之後使用 Solaris 權限 重置。由於該設置適用於進程,因此它與多執行緒 MPM 不相容。
Unix-group 是以下其中之一
#
後跟群組編號。此指令不能用於以 root 身分執行 apache!儘管如此,它還是會開啟與 suexec 文件中討論的類似的潛在安全性問題。
說明 | 將任意權限分配給虛擬主機。 |
---|---|
語法 | VHostPrivs [+-]?權限名稱 [[+-]?權限名稱] ... |
預設值 | 無 |
上下文 | 虛擬主機 |
狀態 | 實驗性 |
模組 | mod_privileges |
相容性 | 在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM),並且在使用 BIG_SECURITY_HOLE 編譯時選項編譯 mod_privileges 時。 |
VHostPrivs
可用於將任意 權限 分配給虛擬主機。每個 權限名稱 都是 Solaris 權限的名稱,例如 file_setid 或 sys_nfs。
權限名稱 可以選擇性地以 + 或 - 作為前綴,這將分別允許或拒絕權限。如果既不使用 + 也不使用 -,則將拒絕分配給虛擬主機的所有其他權限。您可以使用它來覆蓋任何預設集並建構您自己的權限集。
此指令可能會在 apache 中開啟巨大的安全漏洞,甚至包括以 root 級別的權限執行請求。除非您完全了解自己在做什麼,否則不要使用它!
說明 | 確定伺服器是否以增強的安全性執行虛擬主機。 |
---|---|
語法 | VHostSecure On|Off |
預設值 | VHostSecure On |
上下文 | 虛擬主機 |
狀態 | 實驗性 |
模組 | mod_privileges |
相容性 | 在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。 |
決定虛擬主機是否在處理請求時,透過移除一些在網頁伺服器中很少需要、但一般 Unix 使用者預設擁有、且模組和應用程式可能需要的權限來增強安全性。建議您保留預設值(開啟),除非它會阻止應用程式執行。由於此設定適用於行程,因此與執行緒式 MPM 不相容。
如果 VHostSecure
阻止應用程式執行,這可能是一個警訊,表示應該檢查該應用程式的安全性。
說明 | 設定虛擬主機執行時所使用的使用者 ID。 |
---|---|
語法 | VHostUser unix-userid |
預設值 | 繼承 |
上下文 | 虛擬主機 |
狀態 | 實驗性 |
模組 | mod_privileges |
相容性 | 在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。 |
VHostUser
指令設定伺服器處理虛擬主機請求時所使用的 Unix 使用者 ID。使用者 ID 會在處理請求之前設定,並在之後使用 Solaris 權限 重置。由於此設定適用於行程,因此與執行緒式 MPM 不相容。
Unix-userid 可以是以下其中之一:
#
後跟使用者編號。此指令不能用於以 root 身分執行 apache!儘管如此,它還是會開啟與 suexec 文件中討論的類似的潛在安全性問題。