<-
Apache > HTTP 伺服器 > 文件 > 2.4 版 > 模組

Apache 模組 mod_privileges

可用語言: en  |  fr 

說明支援 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_perlmod_pythonmod_ruby,以及在權限分離存在問題的 Apache 模組中以 C 語言實作的應用程式。

Support Apache!

主題

指令

錯誤修正檢查清單

另請參閱

top

安全性考量

mod_privileges不受信任的程式碼可能在網頁伺服器進程內執行的狀況下引入了新的安全性問題。這適用於不受信任的模組,以及在 mod_php 或 mod_perl 等模組下執行的腳本。外部執行的腳本(例如 CGI 或 mod_proxy 或 mod_jk 後面的應用程式伺服器)不受影響

mod_privileges 的基本安全性問題是

PrivilegesMode 指令允許您選擇 FASTSECURE 模式。您可以混合使用模式,對受信任的使用者和經過完整審核的程式碼路徑使用 FAST 模式,同時在不受信任的使用者有機會引入程式碼的地方強制使用 SECURE 模式。

在描述模式之前,我們還應該介紹目標用例:良性與惡意。在良性情況下,您希望為了方便起見將使用者分開,並保護他們和伺服器免受誠實錯誤帶來的風險,但您相信您的使用者不會故意破壞系統安全性。在惡意情況下(例如商業託管),您可能會遇到故意攻擊系統或彼此的使用者。

FAST 模式
FAST 模式下,請求以選定的 uid/gid 和權限在進程內執行,因此開銷可以忽略不計。這適用於良性情況,但對於攻擊者使用進程內模組或腳本提升權限的情況並不安全。
SECURE 模式
SECURE 模式下的請求會分叉一個子進程,然後該子進程會降低權限。這與使用 suexec 執行 CGI 的情況非常相似,但適用於整個請求週期,並且具有細粒度控制權限的好處。

您可以為每個虛擬主機,甚至在虛擬主機內的目錄上下文中選擇不同的 PrivilegesMode。在使用者受信任和/或沒有載入進程內程式碼的權限的情況下,FAST 模式是適當的。在不受信任的程式碼可能在進程內執行的情況下,SECURE 模式是適當的。但是,即使在 SECURE 模式下,也無法防止能夠在請求處理週期開始之前引入具有權限感知能力的程式碼的惡意使用者。

top

DTracePrivileges 指令

說明確定是否啟用 dtrace 所需的權限。
語法DTracePrivileges On|Off
預設值DTracePrivileges Off
上下文伺服器設定
狀態實驗性
模組mod_privileges
相容性在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。

此伺服器範圍指令確定 Apache 是否會以執行 dtrace 所需的 權限 執行。請注意,DTracePrivileges On 本身不會啟動 DTrace,但 DTracePrivileges Off 會阻止它運作。

top

PrivilegesMode 指令

說明在處理速度和效率與針對惡意權限感知程式碼的安全性之間進行權衡。
語法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 沒有意義)。

警告

如果為虛擬主機選擇 SELECTIVE 模式,則必須將權限的啟動延遲到請求處理的映射階段確定哪個 <Directory> 上下文適用於請求之後。這可能會讓攻擊者有機會透過在頂層或 <VirtualHost> 上下文中執行的 RewriteMap 在降低權限和設置 userid/gid 之前引入程式碼。
top

VHostCGIMode 指令

說明確定虛擬主機是否可以執行子進程,以及子進程可用的權限。
語法VHostCGIMode On|Off|Secure
預設值VHostCGIMode On
上下文虛擬主機
狀態實驗性
模組mod_privileges
相容性在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。

確定是否允許虛擬主機執行 fork 和 exec,執行子進程所需的 權限。如果將此設置為 Off,則會拒絕虛擬主機的權限,並且將無法在傳統的 mod_cgi 下執行傳統的 CGI 程式或腳本,也無法執行 mod_ext_filterRewriteMap prog 建立的類似外部程式。請注意,它不會阻止在替代進程和安全模型(例如 mod_fcgid)下執行的 CGI 程式,這是 Solaris 中的建議解決方案。

如果設置為 OnSecure,則允許虛擬主機執行上述外部程式和腳本。設置 VHostCGIMode Secure 的效果是拒絕子進程的權限,如 VHostSecure 中所述。

top

VHostCGIPrivs 指令

說明將任意權限分配給虛擬主機建立的子進程。
語法VHostCGIPrivs [+-]?權限名稱 [[+-]?權限名稱] ...
預設值
上下文虛擬主機
狀態實驗性
模組mod_privileges
相容性在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM),並且在使用 BIG_SECURITY_HOLE 編譯時選項編譯 mod_privileges 時。

VHostCGIPrivs 可用於將任意 權限 分配給虛擬主機建立的子進程,如 VHostCGIMode 中所述。每個 權限名稱 都是 Solaris 權限的名稱,例如 file_setidsys_nfs

權限名稱 可以選擇性地以 + 或 - 作為前綴,這將分別允許或拒絕權限。如果既不使用 + 也不使用 -,則將拒絕分配給虛擬主機的所有其他權限。您可以使用它來覆蓋任何預設集並建構您自己的權限集。

安全性

此指令可能會在 apache 子進程中開啟巨大的安全漏洞,甚至包括以 root 級別的權限執行它們。除非您完全了解自己在做什麼,否則不要使用它!

top

VHostGroup 指令

說明設置執行虛擬主機的群組 ID。
語法VHostGroup unix-groupid
預設值繼承 Group 中指定的群組 ID
上下文虛擬主機
狀態實驗性
模組mod_privileges
相容性在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。

VHostGroup 指令設置伺服器將用於處理虛擬主機請求的 Unix 群組。群組在處理請求之前設置,之後使用 Solaris 權限 重置。由於該設置適用於進程,因此它與多執行緒 MPM 不相容。

Unix-group 是以下其中之一

群組名稱
按名稱引用給定的群組。
# 後跟群組編號。
按其編號引用群組。

安全性

此指令不能用於以 root 身分執行 apache!儘管如此,它還是會開啟與 suexec 文件中討論的類似的潛在安全性問題。

另請參閱

top

VHostPrivs 指令

說明將任意權限分配給虛擬主機。
語法VHostPrivs [+-]?權限名稱 [[+-]?權限名稱] ...
預設值
上下文虛擬主機
狀態實驗性
模組mod_privileges
相容性在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM),並且在使用 BIG_SECURITY_HOLE 編譯時選項編譯 mod_privileges 時。

VHostPrivs 可用於將任意 權限 分配給虛擬主機。每個 權限名稱 都是 Solaris 權限的名稱,例如 file_setidsys_nfs

權限名稱 可以選擇性地以 + 或 - 作為前綴,這將分別允許或拒絕權限。如果既不使用 + 也不使用 -,則將拒絕分配給虛擬主機的所有其他權限。您可以使用它來覆蓋任何預設集並建構您自己的權限集。

安全性

此指令可能會在 apache 中開啟巨大的安全漏洞,甚至包括以 root 級別的權限執行請求。除非您完全了解自己在做什麼,否則不要使用它!

top

VHostSecure 指令

說明確定伺服器是否以增強的安全性執行虛擬主機。
語法VHostSecure On|Off
預設值VHostSecure On
上下文虛擬主機
狀態實驗性
模組mod_privileges
相容性在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。

決定虛擬主機是否在處理請求時,透過移除一些在網頁伺服器中很少需要、但一般 Unix 使用者預設擁有、且模組和應用程式可能需要的權限來增強安全性。建議您保留預設值(開啟),除非它會阻止應用程式執行。由於此設定適用於行程,因此與執行緒式 MPM 不相容。

注意事項

如果 VHostSecure 阻止應用程式執行,這可能是一個警訊,表示應該檢查該應用程式的安全性。

top

VHostUser 指令

說明設定虛擬主機執行時所使用的使用者 ID。
語法VHostUser unix-userid
預設值繼承 User 中指定的使用者 ID
上下文虛擬主機
狀態實驗性
模組mod_privileges
相容性在 Solaris 10 和 OpenSolaris 上可用,搭配非執行緒 MPM(prefork 或自訂 MPM)。

VHostUser 指令設定伺服器處理虛擬主機請求時所使用的 Unix 使用者 ID。使用者 ID 會在處理請求之前設定,並在之後使用 Solaris 權限 重置。由於此設定適用於行程,因此與執行緒式 MPM 不相容。

Unix-userid 可以是以下其中之一:

使用者名稱
透過名稱參照指定的使用者。
# 後跟使用者編號。
透過編號參照使用者。

安全性

此指令不能用於以 root 身分執行 apache!儘管如此,它還是會開啟與 suexec 文件中討論的類似的潛在安全性問題。

另請參閱

可用語言: en  |  fr 

top

評論

注意
這不是問答區。這裡的評論應針對改進文件或伺服器的建議,如果它們已被實施或被認為無效/離題,可能會被我們的版主刪除。有關如何管理 Apache HTTP 伺服器的問題,應導向 Libera.chat 上的 IRC 頻道 #httpd,或發送到我們的郵件列表