Apache HTTP Server 版本 2.4
說明 | 允許使用 LDAP 目錄儲存 HTTP Basic 驗證資料庫。 |
---|---|
狀態 | 擴充 |
模組識別 | authnz_ldap_module |
原始檔 | mod_authnz_ldap.c |
相容性 | 於版本 2.1 或更新版本中提供 |
此模組允許驗證前端(例如 mod_auth_basic
)透過 ldap 目錄驗證使用者。
mod_authnz_ldap
支援下列功能
使用 mod_auth_basic
時,此模組會透過 AuthBasicProvider
指令中具有 ldap
值來呼叫。
此模組會依據 mod_ldap
的設定快取驗證和授權結果。對後端 LDAP 伺服器所做的變更,將不會立即反映在 HTTP 伺服器上,包括但不限於使用者鎖定/取消、變更密碼或變更群組成員資格。請參閱 mod_ldap
中的指令,取得快取可調整項目詳細資料。
授與使用者存取權時,共有兩個階段。第一階段是驗證,在此階段中 mod_authnz_ldap
驗證提供者會驗證使用者的憑證是否有效。這也被稱為搜尋/繫結階段。第二階段是授權,在此階段中 mod_authnz_ldap
會判斷經過驗證的使用者是否允許存取有爭議的資源。這也稱為比較階段。
mod_authnz_ldap
註冊一個 authn_ldap 身份驗證提供者與一個 authz_ldap 授權處理器。authn_ldap 驗證提供者可以使用 AuthBasicProvider
指令使用 ldap
值啟用。authz_ldap 處理器會透過增加 ldap-user
、ldap-dn
與 ldap-group
值擴充 Require
指令的授權類型。
在驗證階段期間,mod_authnz_ldap
會搜尋目錄中的條目,以比對 HTTP 用戶端所傳遞的使用者名稱。如果找到單一的唯一比對,則 mod_authnz_ldap
會嘗試使用該條目的 DN 與 HTTP 用戶端所提供的密碼連結到目錄伺服器。由於它會執行搜尋,然後再進行連結,因此常被稱為搜尋/連結階段。
以下是搜尋/連結階段期間執行的步驟。
AuthLDAPURL
指令中所提供的屬性和過濾條件,並配上 HTTP 用戶端所傳遞的使用者名稱,以產生搜尋過濾條件。在搜尋/連結階段期間會使用下列指令
AuthLDAPURL |
指定 LDAP 伺服器、基本 DN、要在搜尋中使用的屬性,以及要使用的額外搜尋過濾條件。 |
AuthLDAPBindDN |
在搜尋階段用來連結的 DN(選用)。 |
AuthLDAPBindPassword |
在搜尋階段用來連結的密碼(選用)。 |
在授權階段期間,mod_authnz_ldap
會嘗試判斷使用者是否獲准存取資源。這些檢查中有很多需要 mod_authnz_ldap
對 LDAP 伺服器執行比較操作。這也就是為何此階段常被稱為比較階段。mod_authnz_ldap
會接受下列 Require
指令,以判斷憑據是否可接受
Require ldap-user
指令,且指令中的使用者名稱與用戶端所傳遞的使用者名稱相符,則准許存取。Require ldap-dn
指令,且指令中的 DN 與從 LDAP 目錄中擷取的 DN 相符,則准許存取。Require ldap-group
指令,且從 LDAP 目錄中取得的 DN(或客戶端傳遞的使用者名稱)位於 LDAP 群組中,或潛在地位於其子群組中的某個位置,則授予存取權限。Require ldap-attribute
指令,且從 LDAP 目錄中取得的屬性與給定值相符,則授予存取權限。Require ldap-filter
指令,且尋找篩選成功找到一個與經過驗證使用者的 dn 相符的單一使用者物件,則授予存取權限。其他 Require
值也可以使用,這可能需要載入額外的授權模組。
Require valid-user
指令,則授予所有已成功驗證使用者存取權限。(需要 mod_authz_user
)Require group
指令,且 mod_authz_groupfile
已載入設定了 AuthGroupFile
指令。mod_authnz_ldap
在比較階段會使用下列指令
AuthLDAPURL |
在 Require ldap-user 操作的比較操作中,會使用在 URL 中指定的屬性。 |
AuthLDAPCompareDNOnServer |
決定 Require ldap-dn 指令的行為。 |
AuthLDAPGroupAttribute |
決定在 Require ldap-group 指令中要使用的比較屬性。 |
AuthLDAPGroupAttributeIsDN |
在針對 Require ldap-group 指令進行比較時,指定是否使用使用者 DN 或使用者名稱。 |
AuthLDAPMaxSubGroupDepth |
決定在 Require ldap-group 指令中進行比較時,要評估的子群組的最大深度。 |
AuthLDAPSubGroupAttribute |
決定在 Require ldap-group 指令中進行比較時,取得目前的群組之的子群組成員時要使用的屬性。 |
AuthLDAPSubGroupClass |
在 Require ldap-group 指令的子群組處理過程中,指定用來識別查詢的目錄物件是否確實為群組物件(相對於使用者物件)的 LDAP objectClass 值。 |
Apache 的 Require
指令在授權階段使用,以確保使用者被允許存取資源。mod_authnz_ldap 使用 ldap-user
、ldap-dn
、ldap-group
、ldap-attribute
和 ldap-filter
延伸授權類型。其他授權類型也可以使用,但可能需要載入額外的授權模組。
自 2.4.8 版起,LDAP 需要指令中會支援 表達式。
Require ldap-user
指令指定哪些使用者名稱可以存取資源。一旦 mod_authnz_ldap
從目錄中擷取到唯一的 DN,它就會使用 Require ldap-user
中指定使用者名稱,執行 LDAP 比對作業,以查看該使用者名稱是否屬於剛剛擷取的 LDAP 條目的一部分。透過在行中輸入多個使用者名稱(以空格分隔)的方式,可以授權給多個使用者。如果使用者名稱中有空格,則必須加上雙引號。也可以透過使用多個 Require ldap-user
指令(每行一個使用者)的方式,授權給多個使用者。例如,ldap://ldap/o=範例?cn
(也就是說 cn
用於搜尋),以下的 Require 指令可用於限制存取權
Require ldap-user "Barbara Jenson" Require ldap-user "Fred User" Require ldap-user "Joe Manager"
由於 mod_authnz_ldap
處理此指令的方式,Barbara Jenson 可用身分登入為 Barbara Jenson、Babs Jenson 或 LDAP 條目中的任何其他 cn
。只有一個 Require ldap-user
行即可支援使用者條目中該屬性的所有值。
如果在上述網址中使用 uid
屬性而非 cn
屬性,上述三行可濃縮成
Require ldap-user bjenson fuser jmanager
此指令指定一個 LDAP 群組,其成員有權存取。它會採用 LDAP 群組的識別名稱。注意:不要加上引號將群組名稱括號起來。例如,假設 LDAP 目錄中有下列條目
dn: cn=Administrators, o=Example objectClass: groupOfUniqueNames uniqueMember: cn=Barbara Jenson, o=Example uniqueMember: cn=Fred User, o=Example
下列指令會授權 Fred 及 Barbara
Require ldap-group cn=Administrators, o=Example
如果將 AuthLDAPMaxSubGroupDepth
設定為大於 0 的值,也可以在指定 LDAP 群組的次群組中找到成員。例如,假設 LDAP 目錄中有下列條目
dn: cn=Employees, o=Example objectClass: groupOfUniqueNames uniqueMember: cn=Managers, o=Example uniqueMember: cn=Administrators, o=Example uniqueMember: cn=Users, o=Example dn: cn=Managers, o=Example objectClass: groupOfUniqueNames uniqueMember: cn=Bob Ellis, o=Example uniqueMember: cn=Tom Jackson, o=Example dn: cn=Administrators, o=Example objectClass: groupOfUniqueNames uniqueMember: cn=Barbara Jenson, o=Example uniqueMember: cn=Fred User, o=Example dn: cn=Users, o=Example objectClass: groupOfUniqueNames uniqueMember: cn=Allan Jefferson, o=Example uniqueMember: cn=Paul Tilley, o=Example uniqueMember: cn=Temporary Employees, o=Example dn: cn=Temporary Employees, o=Example objectClass: groupOfUniqueNames uniqueMember: cn=Jim Swenson, o=Example uniqueMember: cn=Elliot Rhodes, o=Example
下列指令會允許 Bob Ellis、Tom Jackson、Barbara Jenson、Fred User、Allan Jefferson 和 Paul Tilley 存取,但會拒絕 Jim Swenson 或 Elliot Rhodes(因為他們位於次群組深度 2)的存取權
Require ldap-group cn=Employees, o=Example AuthLDAPMaxSubGroupDepth 1
此指令的行為會受到 AuthLDAPGroupAttribute
、AuthLDAPGroupAttributeIsDN
、AuthLDAPMaxSubGroupDepth
、AuthLDAPSubGroupAttribute
和 AuthLDAPSubGroupClass
指令的修改。
Require ldap-dn
指令容許管理員根據識別名稱授與存取權。它指定必須比對才能授與存取權的 DN。如果從目錄伺服器擷取到的識別名稱與 Require ldap-dn
中的識別名稱相符,則授與授權。注意:不要加上引號將識別名稱括號起來。
下列指令會授與特定的 DN 存取權
Require ldap-dn cn=Barbara Jenson, o=Example
AuthLDAPCompareDNOnServer
指令修改此指令的行為。
Require ldap-attribute
指令允許管理員根據已驗證使用者在 LDAP 目錄中的屬性授予存取權。如果目錄中的屬性與設定中的值相符,則會授予存取權。
下列指令會授予所有具有屬性 employeeType = active 的人存取權
Require ldap-attribute employeeType="active"
可在同一行中以空格分隔指定多個屬性/值對,或可在多個 Require ldap-attribute
指令中指定。列出多個屬性/值對的效果為 OR 運算。如果任一列出的屬性值與使用者物件中對應屬性的值相符,則會授予存取權。如果屬性的值包含空格,則必須只將值置於雙引號內。
下列指令會授予城市屬性等於「San Jose」或狀態屬性等於「Active」的所有人存取權
Require ldap-attribute city="San Jose" status="active"
Require ldap-filter
指令允許管理員根據複雜的 LDAP 搜尋篩選條件授予存取權。如果篩選條件搜尋傳回的 distinguished name 與已驗證使用者的 distinguished name 相符,則會授予存取權。
下列指令會授予所有有手機且在行銷部門的人員存取權
Require ldap-filter "&(cell=*)(department=marketing)"
Require ldap-filter
指令與 Require ldap-attribute
指令的差異在於,ldap-filter
會使用指定的搜尋篩選條件對 LDAP 目錄執行搜尋作業,而非執行簡單的屬性比較。如果只需要進行簡單的屬性比較,則由 ldap-attribute
執行的比較作業會比由 ldap-filter
使用的搜尋作業更快,尤其是在大型目錄中。
在篩選條件中使用 表達式 時,必須小心,確保以正確方式跳脫 LDAP 篩選條件,以防止 LDAP 注入。ldap 函數可用於此目的。
<LocationMatch ^/dav/(?<SITENAME>[^/]+)/> Require ldap-filter (memberOf=cn=%{ldap:%{unescape:%{env:MATCH_SITENAME}},ou=Websites,o=Example) </LocationMatch>
AuthLDAPURL "ldap://ldap1.example.com:389/ou=People, o=Example?uid?sub?(objectClass=*)" Require valid-user
AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/ou=People, o=Example" Require valid-user
cn
,這會產生問題,這是因為對 cn
的搜尋必須傳回單一項目。因此不建議使用此方法:最好選擇目錄中保證唯一的屬性,例如 uid
。AuthLDAPURL "ldap://ldap.example.com/ou=People, o=Example?cn" Require valid-user
AuthLDAPURL ldap://ldap.example.com/o=Example?uid Require ldap-group cn=Administrators, o=Example
AuthLDAPURL ldap://ldap.example.com/o=Example?uid Require ldap-group cn=%{SERVER_NAME}, o=Example
qpagePagerID
的 LDAP 屬性。範例只會授予有字母數字尋呼機(透過他們的 UID 驗證)的人員存取權AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(qpagePagerID=*) Require valid-user
以下範例示範如何運用篩選器達成複雜的管理需求。沒有篩選器的話,就必須建立一個新的 LDAP 群組,並確保群組的成員保持與尋呼機使用者同步。這樣一來,篩選器就變得微不足道了。目標是授予有尋呼機的任何人存取權,同時也授予沒有尋呼機,但需要存取相同資源的 Joe Manager 存取權
AuthLDAPURL ldap://ldap.example.com/o=Example?uid??(|(qpagePagerID=*)(uid=jmanager)) Require valid-user
一開始,這最後一個範例可能看起來令人困惑,所以利用如下所示,根據連線的人來評估搜尋篩選器的樣貌會很有幫助。如果 Fred User 以 fuser
連線,那麼篩選器會看起來像
(&(|(qpagePagerID=*)(uid=jmanager))(uid=fuser))
如果 fuser 有尋呼機,上面的搜尋只會成功。當 Joe Manager 以 jmanager 連線時,篩選器會看起來像
(&(|(qpagePagerID=*)(uid=jmanager))(uid=jmanager))
無論 jmanager 是否有尋呼機,上面的搜尋都會成功。
如要使用 TLS,請參閱 mod_ldap
指令 LDAPTrustedClientCert
、LDAPTrustedGlobalCert
和 LDAPTrustedMode
。
可以將一個選擇性第二個參數新增到 AuthLDAPURL
,以覆寫由 LDAPTrustedMode
設定的預設連線類型。這將允許由 ldap:// Url 建立的連線在同一個埠升級為安全的連線。
如要使用 SSL,請參閱 mod_ldap
指令 LDAPTrustedClientCert
、LDAPTrustedGlobalCert
和 LDAPTrustedMode
。
如要指定安全的 LDAP 伺服器,請在 AuthLDAPURL
指令中使用 ldaps:// ,而不是 ldap://。
當這個模組執行 驗證 時,指定在 AuthLDAPURL
指令的前綴為 "AUTHENTICATE_" 的 LDAP 屬性都會被放入環境變數中。
當這個模組執行 授權 時,指定在 AuthLDAPURL
指令的前綴為 "AUTHORIZE_" 的 LDAP 屬性都會被放入環境變數中。
如果屬性欄位包含使用者的使用者名稱、一般名稱和電話號碼,CGI 程式就能夠存取這些資訊,而無須提出第二次的獨立 LDAP 查詢來收集這些其他資訊。
這樣有可能大幅地簡化在某些 Web 應用程式中所要求的編碼與組態。
Active Directory 安裝可能同時支援多個網域。若要分辨網域間的使用者,會將稱為使用者主體名稱 (UPN) 的識別碼加入至目錄中使用者的項目。此 UPN 通常會採用使用者的帳戶名稱格式,後接特定網域的網域組件,例如 somebody@nz.example.com。
您可能想設定 mod_authnz_ldap
模組,以驗證存在於組成 Active Directory 林的任何網域中的使用者。透過這種方式,somebody@nz.example.com 和 someone@au.example.com 可以在同時使用同一查詢進行驗證。
為了讓這項實務可行,Active Directory 支援全球目錄的概念。此全球目錄是 Active Directory 林內所有 Active Directory 伺服器中選取的屬性的唯讀副本。查詢全球目錄,只要一個查詢便可讓所有網域進行查詢,而不用跨越伺服器而且網速很慢。
如果啟用,全球目錄是獨立的目錄伺服器,使用第 3268 號埠 (SSL 為第 3269 號埠) 來執行。若要搜尋使用者,針對屬性 userPrincipalName 進行子樹搜尋,其搜尋根目錄為空白,如下所示
AuthLDAPBindDN apache@example.com AuthLDAPBindPassword password AuthLDAPURL ldap://10.0.0.1:3268/?userPrincipalName?sub
使用者需要以 somebody@nz.example.com 格式輸入其使用者主體名稱作為登入名稱。
通常,FrontPage 使用 FrontPage 網頁專用的使用者/群組檔案(亦即 mod_authn_file
和 mod_authz_groupfile
模組)來處理所有驗證。遺憾的是,無法僅透過新增適當的指令就變更為 LDAP 驗證,因為這將會損毀 FrontPage 應用程式中會嘗試修改標準文字授權檔的 權限 表單。
一旦建立了 FrontPage 網頁,對其新增 LDAP 驗證的方式是將下列指令加入在網頁中建立的每個 .htaccess
檔案中
AuthLDAPURL "the url" AuthGroupFile "mygroupfile" Require group "mygroupfile"
FrontPage 透過將 Require valid-user
指令加入到 .htaccess
檔案來限制對網頁的存取。Require valid-user
指令會對根據 LDAP 的觀點任何有效的使用者成功執行。這表示,在 LDAP 目錄中擁有項目的任何人都會被視為有效使用者,而 FrontPage 僅將本機使用者檔案中的人視為有效。Apache 會以 ldap-group 搭配群組檔案授權取代,因此在處理使用者的授權時,Apache 會查詢本機使用者檔案(由 FrontPage 管理),而非 LDAP。
在如上所述加入指令後,FrontPage 使用者便能透過 FrontPage 應用程式執行所有管理操作。
mod_authn_file
的內容,理想選擇為使用者 ID。mod_auth_basic
、mod_authn_file
及 mod_authz_groupfile
編譯 Apache,這是因為 Apache 仍會使用 mod_authz_groupfile
群組檔案來決定使用者存取 FrontPage 網站的範圍。.htaccess
檔案中,嘗試將其放在 <Location>
或 <Directory>
指令中並不會運作,這是因為 mod_authnz_ldap
必須能夠擷取 FrontPage .htaccess
檔案中找到的 AuthGroupFile
指令,它才能知道去哪裡尋找有效的使用者清單;如果 mod_authnz_ldap
指令與 FrontPage 指令不在同一個 .htaccess
檔案中,那麼此破解程式碼將會無法運作,因為 mod_authnz_ldap
將不會有機會處理 .htaccess
檔案,且無法找到 FrontPage 管理的使用者檔案。說明 | 指定身分驗證期間設定環境變數的前置字元 |
---|---|
語法 | AuthLDAPAuthorizePrefix prefix |
預設值 | AuthLDAPAuthorizePrefix AUTHORIZE_ |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | 2.3.6 等更新版本可用 |
此指令讓您能覆寫 LDAP 身分驗證期間設定環境變數所使用的前置字元,如果指定 AUTHENTICATE_,這些環境變數的消費者將看見相同資訊,無論 LDAP 是執行身分驗證、授權,還是同時執行。
Require valid-user
所授權的使用者,不會設定任何授權變數。說明 | 確定當使用者可以映射到 DN 而伺服器無法使用使用者的憑證進行綁定時,是否會使用其他驗證提供者。 |
---|---|
語法 | AuthLDAPBindAuthoritative off|on |
預設值 | AuthLDAPBindAuthoritative on |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
在預設情況下,只有當使用者無法映射到 DN 時,才會查詢後續的驗證提供者,而不是當使用者可以映射到 DN,而他們的密碼無法使用 LDAP 綁定進行驗證時。如果將 AuthLDAPBindAuthoritative
設定為 off,則如果 LDAP 綁定(使用目前使用者的憑證)因任何原因失敗,已設定的其他驗證模組將有機會驗證使用者。
這樣可以讓同時存在於 LDAP 和 AuthUserFile
中的使用者,在 LDAP 伺服器可用時,但使用者的帳戶已鎖定或密碼無法使用時進行驗證。
說明 | 用於繫結到 LDAP 伺服器的選用 DN |
---|---|
語法 | AuthLDAPBindDN 識別名稱 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
在搜尋項目時用來繫結到伺服器的選用 DN。若未提供,mod_authnz_ldap
會使用匿名繫結。
說明 | 與繫結 DN 搭配使用的密碼 |
---|---|
語法 | AuthLDAPBindPassword 密碼 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | exec: 已在 2.4.5 中加入。 |
與繫結 DN 搭配使用的繫結密碼。注意,繫結密碼可能是敏感資料,應適當保護。您應僅在絕對需要搜尋目錄時,才使用 AuthLDAPBindDN
和 AuthLDAPBindPassword
。
如果值以 exec: 開頭,將會執行最終指令,並將程式傳回至標準輸出的第一行做為密碼使用。
#Password used as-is AuthLDAPBindPassword secret #Run /path/to/program to get my password AuthLDAPBindPassword exec:/path/to/program #Run /path/to/otherProgram and provide arguments AuthLDAPBindPassword "exec:/path/to/otherProgram argument1"
說明 | 語言至字元集轉換組態檔案 |
---|---|
語法 | AuthLDAPCharsetConfig 路徑 |
內容 | 伺服器組態 |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
AuthLDAPCharsetConfig
指令設定語言至字元集轉換組態檔案的位置。檔案路徑 是相對應於 ServerRoot
的。這個檔案會指定語言副檔名至字元集的清單。大多數的管理員都會使用提供的 charset.conv
檔案,它會將常見的語言副檔名關聯到字元集。
檔案包含以下格式的行
語言副檔名 字元集 [語言字串] ...
副檔名的字元大小寫無所謂。空白行與以雜湊字元 (#
) 開頭的行會被忽略。
說明 | 使用已驗證使用者的憑證進行授權比對 |
---|---|
語法 | AuthLDAPCompareAsUser 開|關 |
預設值 | AuthLDAPCompareAsUser 關 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | 2.3.6 等更新版本可用 |
如果已設定,且 mod_authnz_ldap
已認證使用者,授權的 LDAP 比較將採用驗證使用者的查詢識別名稱 (DN) 和 HTTP 基本認證密碼,而不是伺服器的已設定憑證。
ldap-attribute、ldap-user 和 ldap-group (僅限單一層級) 授權檢查使用比較。
這項指令僅對 AuthLDAPSearchAsUser
也已啟用時,於巢狀群組處理期間執行的比較有效。
這項指令僅應於 LDAP 伺服器不接受匿名比較時使用,且您無法使用專門的 AuthLDAPBindDN
。
說明 | 使用 LDAP 伺服器比較 DN |
---|---|
語法 | AuthLDAPCompareDNOnServer 開|關 |
預設值 | AuthLDAPCompareDNOnServer 開 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
如果已設定,mod_authnz_ldap
將使用 LDAP 伺服器比較 DN。這是比較 DN 的唯一萬無一失方法。 mod_authnz_ldap
將於目錄中搜尋 Require dn
指令指定的 DN,然後擷取 DN 並與從使用者條目中擷取的 DN 比較。如果未設定這項指令,mod_authnz_ldap
僅會執行字串比較。使用此方法可能會導致誤判,但速度快很多。請注意,mod_ldap
快取可以在大多數情況下加快 DN 比較速度。
說明 | 模組將於何時取消對別名的參照 |
---|---|
語法 | AuthLDAPDereferenceAliases 永不|搜尋中|尋找中|始終 |
預設值 | AuthLDAPDereferenceAliases 始終 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
這項指令指定 mod_authnz_ldap
於 LDAP 作業中取消對別名的參照的時間。預設值為 始終
。
說明 | 用於辨識群組使用者成員的 LDAP 屬性。 |
---|---|
語法 | AuthLDAPGroupAttribute 屬性 |
預設值 | AuthLDAPGroupAttribute member uniqueMember |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
這項指令指定用於檢查群組內使用者成員的 LDAP 屬性。可以重複指定這項指令來使用多個屬性。如果未指定,mod_authnz_ldap
將使用 member
和 uniqueMember
屬性。
說明 | 於檢查群組成員資格時使用用戶端使用者名稱的 DN |
---|---|
語法 | AuthLDAPGroupAttributeIsDN 開|關 |
預設值 | AuthLDAPGroupAttributeIsDN 開 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
當設定為 on
時,此指令說明在檢查群組成員身份時,要使用用戶端使用者名稱的特殊名稱。否則,將使用使用者名稱。例如,假設用戶端傳送使用者名稱 bjenson
,這對應到 LDAP DN cn=Babs Jenson, o=Example
。如果設定此指令,mod_authnz_ldap
將檢查群組是否有 cn=Babs Jenson, o=Example
為成員。如果未設定此指令,mod_authnz_ldap
將檢查群組是否有 bjenson
為成員。
說明 | 決定伺服器是否使用基本驗證使用者自己的使用者名稱來進行初始 DN 查詢,而不是匿名或使用伺服器的硬式編碼憑證 |
---|---|
語法 | AuthLDAPInitialBindAsUser off|on |
預設值 | AuthLDAPInitialBindAsUser off |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | 2.3.6 等更新版本可用 |
預設情況下,伺服器匿名或使用特定使用者和密碼,將基本驗證使用者名稱轉換為 LDAP 特殊名稱 (DN)。此指令強制伺服器使用傳入使用者提供的逐字使用者名稱和密碼執行初始 DN 搜尋。
如果逐字使用者名稱無法直接繫結,但需要一些美觀的轉換,請參閱 AuthLDAPInitialBindPattern
。
僅在 LDAP 伺服器不接受匿名搜尋且無法使用專用 AuthLDAPBindDN
時,才應使用此指令。
說明 | 指定在繫結到 LDAP 伺服器以執行 DN 查詢時,要轉換的基本驗證使用者名稱 |
---|---|
語法 | AuthLDAPInitialBindPattern regex substitution |
預設值 | AuthLDAPInitialBindPattern (.*) $1(照字面使用遠端使用者名稱) |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | 2.3.6 等更新版本可用 |
如果 AuthLDAPInitialBindAsUser
設定為 ON,基本驗證使用者名稱將根據正規表示式和替換引數進行轉換。
正規表示式引數與目前的驗證使用者名稱進行比較。替換引數可能包含反向參考,但沒有其他變數內插。
僅在 LDAP 伺服器不接受匿名搜尋且無法使用專用 AuthLDAPBindDN
時,才應使用此指令。
AuthLDAPInitialBindPattern (.+) $1@example.com
AuthLDAPInitialBindPattern (.+) cn=$1,dc=example,dc=com
說明 | 指定使用者搜尋終止前要評估的最大子群組層疊深度。 |
---|---|
語法 | AuthLDAPMaxSubGroupDepth 數值 |
預設值 | AuthLDAPMaxSubGroupDepth 10 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | 適用於版本 2.3.0 和更新版本 |
當這個指令設定為非零值 X
,與使用 Require ldap-group someGroupDN
指令結合,提供的使用者憑證會作為 someGroupDN
目錄物件或目前的群組中任何群組成員進行搜尋,最高巢狀層級為本指令所指定的 X
。
檢視 Require ldap-group
區段,以取得更詳細的範例。
當 AuthLDAPSubGroupAttribute
與 AuthLDAPGroupAttribute
重疊時(預設為重疊,且為常見 LDAP 架構所要求),搜尋大型群組中的子群組會相當緩慢。如果您使用大型非巢狀群組,請將 AuthLDAPMaxSubGroupDepth
設定為零。
說明 | 使用於使用者查詢期間回傳的屬性值來設定 REMOTE_USER 環境變數 |
---|---|
語法 | AuthLDAPRemoteUserAttribute uid |
預設值 | 無 |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
如果設定這個指令,REMOTE_USER
環境變數的值會設定為指定的屬性值。請確定將這個屬性包含在 AuthLDAPURL
定義的屬性清單中,否則,這個指令不會有任何效果。如果這個指令存在,將優先於 AuthLDAPRemoteUserIsDN
。如果希望使用電子郵件地址讓使用者登入網站,但後端應用程式預期使用者名稱為使用者 ID,則這個指令會很有用。
說明 | 將客戶端使用者的 DN 用於設定 REMOTE_USER 環境變數 |
---|---|
語法 | AuthLDAPRemoteUserIsDN on|off |
預設值 | AuthLDAPRemoteUserIsDN off |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
如果將這個指令設定為 on,REMOTE_USER
環境變數的值會設定為經過驗證使用者的完整識別名稱,而不會只有客戶端傳遞的使用者名稱。在預設為關閉的狀態下,會將其關閉。
說明 | 使用已驗證使用者的憑證來執行授權搜尋 |
---|---|
語法 | AuthLDAPSearchAsUser on|off |
預設值 | AuthLDAPSearchAsUser off |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | 2.3.6 等更新版本可用 |
設定後,且 mod_authnz_ldap
已驗證使用者時,用於授權搜尋的 LDAP 搜尋將會使用所查詢的識別名稱 (DN) 和已驗證使用者的 HTTP 基本驗證密碼,而不是伺服器所配置的憑證。
ldap-filter 和 ldap-dn 授權檢查會使用搜尋。
只有當也啟用 AuthLDAPCompareAsUser
時,這個指令才會對巢狀群組處理期間進行的比較產生影響。
僅在 LDAP 伺服器不接受匿名搜尋且無法使用專用 AuthLDAPBindDN
時,才應使用此指令。
說明 | 指定群組屬性標籤,每個指示行一個值,用於區分群組中的已群組的成員。 |
---|---|
語法 | AuthLDAPSubGroupAttribute 屬性 |
預設值 | AuthLDAPSubGroupAttribute 成員 uniqueMember |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | 適用於版本 2.3.0 和更新版本 |
LDAP 群組物件可能包含使用者和群組的成員(稱為嵌套的或子群組)。AuthLDAPSubGroupAttribute
指示識別群組成員的標籤,而 AuthLDAPGroupAttribute
指示識別使用者成員的標籤。可透過多次指定此指示,使用多個屬性。未指定時,mod_authnz_ldap
會使用 member
和 uniqueMember
屬性。
說明 | 指定哪些 LDAP objectClass 值識別在子群組處理期間是群組的目錄物件。 |
---|---|
語法 | AuthLDAPSubGroupClass LdapObjectClass |
預設值 | AuthLDAPSubGroupClass groupOfNames groupOfUniqueNames |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
相容性 | 適用於版本 2.3.0 和更新版本 |
LDAP 群組物件可能包含使用者和群組的成員(稱為嵌套的或子群組)。AuthLDAPSubGroupAttribute
指示識別可能為目前群組的子群組(而非使用者成員)的成員的標籤。 AuthLDAPSubGroupClass
指示用於驗證這些可能的子群組實際上是群組物件的 LDAP objectClass 值。接著可以搜尋已驗證的子群組,以取得更多的使用者或子群組成員。可透過多次指定此指示,使用多個屬性。未指定時,mod_authnz_ldap
會使用 groupOfNames
和 groupOfUniqueNames
值。
說明 | 指定 LDAP 搜尋參數的 URL |
---|---|
語法 | AuthLDAPURL URL [NONE|SSL|TLS|STARTTLS] |
內容 | 目錄、.htaccess |
覆寫 | AuthConfig |
狀態 | 擴充 |
模組 | mod_authnz_ldap |
一個 RFC 2255 URL,它指定要使用的 LDAP 搜尋參數。URL 的語法如下:
ldap://主機:埠號/基礎 DN?屬性?範圍?篩選
如果您想要指定多個 LDAP URL,讓 Apache 可以依序嘗試,語法如下:
AuthLDAPURL "ldap://ldap1.example.com ldap2.example.com/dc=..."
注意事項:如果您指定多個伺服器,則需要將整個 URL 字串置於引號內;否則,您將會收到錯誤訊息:「AuthLDAPURL 有一個引數,定義 LDAP 連線的 URL..」 您當然也可以在每個 URL 上使用搜尋參數。
ldap
。對於安全的 LDAP,請使用 ldaps
。只有當 Apache 已連結到具有 SSL 支援的 LDAP 函式庫,才能使用安全的 LDAP。LDAP 伺服器的名稱/連接埠(預設值 For ldap
為 localhost:389
,For ldaps
為 localhost:636
)。若要指定多個備援 LDAP 伺服器,請僅列出所有伺服器,中間以空格分隔。 mod_authnz_ldap
將嘗試逐一連線至每部伺服器,直到進行成功的連線。如果指定多個 LDAP 伺服器,則整個 LDAP URL 必須以雙引號括起來。
一旦連線至伺服器,該連線將會在 httpd
處理程序的執行期間或在 LDAP 伺服器停機之前保持啟用狀態。
如果 LDAP 伺服器停機並中斷現有連線, mod_authnz_ldap
將嘗試重新連線,從主要伺服器開始,再依序嘗試各個備援伺服器。請注意,這與真正的輪詢搜尋不同。
uid
。建議選擇一個屬性,讓其在您將使用的子樹中的所有條目中都是唯一的。所列出的所有屬性將會放入環境中,並加上 AUTHENTICATE_ 字首,以便其他模組使用。one
或 sub
。請注意,RFC 2255 也支援 base
範圍,但此模組不支援。如果未提供範圍或指定 base
範圍,預設會使用 sub
範圍。(objectClass=*)
,這會搜尋樹中的所有物件。篩選器限制在約 8000 個字元(Apache 原始碼中 MAX_STRING_LEN
的定義)。這對於任何應用程式都應已綽綽有餘。在 2.4.10 和更新版本中,關鍵字 none
會停用篩選器的使用;部分原始 LDAP 伺服器需要這項功能。執行搜尋時,HTTP 用戶端傳遞的屬性、篩選器和使用者名稱會組合成搜尋篩選器,其看起來像是 (&(filter)(attribute=username))
。
例如,考慮以下 URL:ldap://ldap.example.com/o=Example?cn?sub?(posixid=*)
。當一位用戶端嘗試使用使用者名稱 Babs Jenson
進行連線時,產生的搜尋篩選器將會是 (&(posixid=*)(cn=Babs Jenson))
。
可以加入一個選用參數,讓 LDAP Url 可以覆寫連線類型。這個參數可以下列其中一個:
ldap://
相同。ldaps://
相同有關 AuthLDAPURL
URL 的範例,請見上方。