<-
Apache > HTTP Server > 文件 > 2.4 版 > 模組

Apache 模組 mod_access_compat

可用語言:  en  |  fr  |  ja 

說明根據主機(名稱或 IP 位址)進行群組授權
狀態延伸模組
模組識別碼access_compat_module
原始檔案mod_access_compat.c
相容性作為 Apache HTTP Server 2.3 的相容性模組提供,與先前的 Apache httpd 2.x 版本相容。此模組提供的指令已棄用,改由新的授權重組機制取代。詳見 mod_authz_host

摘要

mod_access_compat 提供的指令用於 <Directory><Files><Location> 區段,以及 .htaccess 檔案,以控制對伺服器特定部分的存取。存取可以根據客戶端主機名稱、IP 位址或客戶端要求的其他特質來控管,並擷取至 環境變數 中。 AllowDeny 指令用於指定哪些客戶端允許或不允許存取伺服器,而 Order 指令會設定預設的存取狀態,並設定 AllowDeny 指令如何彼此互動。

基於主機的存取限制和基於密碼的驗證可以同時實作。在這種情況下,將使用 Satisfy 指令來判斷兩組限制如何互動。

注意事項

mod_access_compat 提供的指令已由 mod_authz_host 棄用。將舊指令(例如 OrderAllowDeny)與新指令(例如 Require)混合使用在技術上是可行的,但並不建議這麼做。此模組用於支援僅包含舊指令的設定檔,以利升級至 2.4 版。如需詳細資訊,請查閱 升級手冊

一般情況下,存取限制指令適用於所有存取方法 (GETPUTPOST 等)。在大部分情況下,這是理想的行為。但是,可以透過將指令放在 <Limit> 區段中來限制一些方法,同時讓其他方法沒有限制。

合併組態區段

當此模組提供的任何指令用於新的組態區段時,不會繼承此模組提供的任何指令,自先前的組態區段。

Support Apache!

指令

Bugfix 檢查表

另請參閱

top

Allow 指令

說明控制哪些主機可以存取伺服器的區域
語法Allow from all|主機|env=[!]env-variable [主機|env=[!]env-variable] ...
內容目錄、.htaccess
覆寫限制
狀態延伸模組
模組mod_access_compat

Allow 指令影響哪些主機可以存取伺服器的區域。存取可由主機名稱、IP 位址、IP 位址範圍或客戶端要求中擷取的環境變數中的其他特徵控管。

此指令的第一個引數總是 from。後續引數可以有三種類型。如果指定 Allow from all,則允許所有主機存取,而 DenyOrder 指令的組態則如以下所述。若要僅允許特定主機或主機群組存取伺服器,可以使用下列任何格式指定 主機

(部分)網域名稱
Allow from example.org
Allow from .net example.edu

名稱與此字串匹配或結束於此字串的主機可以存取。只有完整的組件會匹配,因此上例會匹配 foo.example.org,但不會匹配 fooexample.org。無論 HostnameLookups 指令的設定如何,此組態都會讓 Apache httpd 對客戶端 IP 位址執行雙重 DNS 查詢。它會對 IP 位址執行反向 DNS 查詢以尋找關聯的主機名稱,然後對主機名稱執行正向查詢以確保它與原始 IP 位址匹配。只有當正向和反向 DNS 一致且主機名稱匹配時,才會允許存取。

完整的 IP 位址
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205

允許存取之主機的 IP 位址

部分 IP 位址
Allow from 10.1
Allow from 10 172.20 192.168.2

作為子網路限制,IP 位址的前 1 至 3 個位元組。

一個網路/遮罩對
Allow from 10.1.0.0/255.255.0.0

一個網路 a.b.c.d,以及一個遮罩 w.x.y.z。用於更細緻的子網路限制。

一個網路/nnn CIDR 規範
Allow from 10.1.0.0/16

與前一個案例相似,但遮罩由 nnn 個高階 1 位元組成。

請注意,上述最後三個範例完全符合同一組主機。

IPv6 位址和 IPv6 子網路可如示範中指定的。

Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10

Allow 指令的第三個引數格式允許根據 環境變數 的存在與否來控制對伺服器的存取。當指定 Allow from env=env-variable 時,如果環境變數 env-variable 存在,則允許請求存取。當指定 Allow from env=!env-variable 時,如果環境變數 env-variable 不存在,則允許請求存取。伺服器提供使用 mod_setenvif 提供的指令根據用戶端請求的特徵靈活地設定環境變數的功能。因此,這個指令可根據客戶端 User-Agent(瀏覽器類型)、Referer 或其他 HTTP 請求標頭欄位等因素允許存取。

SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
<Directory "/docroot">
    Order Deny,Allow
    Deny from all
    Allow from env=let_me_in
</Directory>

在本案例中,開頭為 KnockKnock/2.0 的使用者代理字串的瀏覽器將獲得存取權限,其他則全部拒絕。

合併組態區段

當此模組提供的任何指令用於新的組態區段時,不會繼承此模組提供的任何指令,自先前的組態區段。

top

Deny 指令

說明控制哪個主機被拒絕存取伺服器
語法Deny from all|主機|env=[!]env-variable [主機|env=[!]env-variable] ...
內容目錄、.htaccess
覆寫限制
狀態延伸模組
模組mod_access_compat

這個指令允許根據主機名稱、IP 位址或環境變數限制對伺服器的存取。 Deny 指令的引數與 Allow 指令的引數相同。

top

Order 指令

說明控制預設存取狀態,以及判斷 AllowDeny 的順序。
語法Order 排序
預設Order Deny,Allow
內容目錄、.htaccess
覆寫限制
狀態延伸模組
模組mod_access_compat

Order 指令,以及 AllowDeny 指令,控制三道式存取控制系統。第一道處理 AllowDeny 指令,由 Order 指令指定。第二道解析其餘的指令(DenyAllow)。第三道適用於與前兩道都不相符的所有請求。

請注意,所有 允許拒絕 指令都已經處理完畢,這和一般的防火牆只使用第一個匹配的項目不同。最後一個匹配的項目會生效(這點也和一般的防火牆不同)。此外,設定檔中各行程列的順序並不重要—所有 允許 行列會被當成一組處理,所有 拒絕 行列會被當成另一組,而預設狀態則會單獨進行運作。

排序為以下之一:

允許,拒絕
首先,所有 允許 指令都會進行評估;其中至少一個必須匹配,否則該要求將會被拒絕。接下來,所有 拒絕 指令都會進行評估。如果任一個匹配,則該要求將會被拒絕。最後,任何與 允許拒絕 指令不匹配的要求都會被預設拒絕。
拒絕,允許
首先,所有 拒絕 指令都會進行評估;如果任一個匹配,則該要求將會被拒絕,除非它同時也匹配 允許 指令。任何與 允許拒絕 指令不匹配的要求都會被允許。
相互拒絕
這個順序的效果和 Order Allow,Deny 相同,並且已被棄用。

關鍵字只能用逗點隔開;它們之間不能有空白

匹配 允許,拒絕 結果 拒絕,允許 結果
只匹配允許 要求允許 要求允許
只匹配拒絕 要求拒絕 要求拒絕
沒有匹配到 預設為第二個指令:拒絕 預設為第二個指令:允許
同時匹配允許及拒絕 最後匹配控制:拒絕 最後匹配控制:允許

在以下範例中,example.org 網域中的所有主機都允許存取;所有其他主機都禁止存取。

Order Deny,Allow
Deny from all
Allow from example.org

在以下一個範例中,example.org 網域中的所有主機都允許存取,但 foo.example.org 子網域中的主機除外,這些主機會被禁止存取。example.org 網域以外的所有主機都會被拒絕存取,因為預設狀態是 拒絕 存取伺服器。

Order Allow,Deny
Allow from example.org
Deny from foo.example.org

另一方面,如果上一個範例中的 順序 改成 拒絕,允許,則所有主機都會被允許存取。之所以會這樣,是因為不管設定檔中指令的實際順序為何,允許來自 example.org 都會在最後進行評估,並且會覆寫掉 拒絕來自 foo.example.org。example.org 網域以外的所有主機也會被允許存取,因為預設狀態是 允許 住。

存在 Order 指令時,儘管沒有附帶的 AllowDeny 指令,也能影響對伺服器某個部分的存取,因為會影響預設的存取狀態。例如,

<Directory "/www">
    Order Allow,Deny
</Directory>

將拒絕對 /www 目錄的所有存取權限,因為預設存取狀態設定為 Deny

Order 指令只控制每個伺服器組態處理階段中存取指令處理的順序。這表示例如在 <Location> 區段中出現的 AllowDeny 指令將永遠在 <Directory> 區段或 .htaccess 檔案中出現的 AllowDeny 指令後才進行評估,而不論 Order 指令的設定為何。有關合併組態區段的詳細資料,請參閱 目錄、位置和檔案區段如何運作 的文件。

合併組態區段

當此模組提供的任何指令用於新的組態區段時,不會繼承此模組提供的任何指令,自先前的組態區段。

top

Satisfy 指令

說明主機等級存取控制和使用者身分驗證之間的互動
語法Satisfy Any|All
預設Satisfy All
內容目錄、.htaccess
覆寫AuthConfig
狀態延伸模組
模組mod_access_compat
相容性受 2.0.51 及後續版本的 <Limit><LimitExcept> 影響

如果同時使用 AllowRequire,存取政策。此參數可以是 AllAny。此指令僅在透過使用者名稱/密碼客戶端主機位址限制對特定區域的存取權限時才實用。在此情況下,預設行為 (All) 是要求客戶端通過位址存取限制輸入有效的使用者名稱和密碼。透過選項 Any,如果客戶端通過主機限制或輸入有效的使用者名稱和密碼,系統就會授與存取權限。此設定可讓您限制對區域的密碼存取權,但允許來自特定位址的客戶端在不提示密碼的情況下進入。

例如,如果您希望讓在您的網路中的人員不受限制地存取您網站的一部分,但卻要求網路外的使用者提供密碼,您可以使用類似以下的組態

Require valid-user
Allow from 192.168.1
Satisfy Any

Satisfy 指令的另一常見用途是,放寬子目錄的存取權限限制

<Directory "/var/www/private">
    Require valid-user
</Directory>

<Directory "/var/www/private/public">
    Allow from all
    Satisfy Any
</Directory>

在上述範例中,將強制要求對 /var/www/private 目錄進行身分驗證,但對 /var/www/private/public 目錄則不需要。

從 2.0.51 版開始,可以透過 <Limit><LimitExcept> 區段,將 Satisfy 指令限制在特定方法。

合併組態區段

當此模組提供的任何指令用於新的組態區段時,不會繼承此模組提供的任何指令,自先前的組態區段。

另請參閱

可用語言:  en  |  fr  |  ja 

top

評論

公告
這不是發問與回答區。在此發表的意見應關於改善文件或伺服器的建議,若經施行或被認定無效/離題,我們的版主可能會將其移除。關於 Apache HTTP Server 如何管理的問題,請直接到 Libera.chat 上的 IRC 頻道 #httpd 提出,或寄至我們的 郵件列表