疑難排解 LDAP 配置
使用 ldapsearch 指令行工具來對 LDAP (輕量型目錄存取通訊協定) 配置進行疑難排解。
安裝 ldapsearch
安裝 ldapsearch 程式。
在 Ubuntu 上,執行下列指令:
sudo apt-get install ldap-utils
在 Red Hat® Enterprise Linux® (RHEL) 上,執行下列指令:
sudo yum install openldap-clients
測試 LDAP 連線
若要測試 LDAP 連線,請執行下列指令:
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" -w "<LDAP_BINDPASSWORD>" -s sub
以下是參數說明:
<LDAP_URL>是 LDAP 伺服器的 URL。 例如,ldap://<LDAP server domain name or IP address>:<port>或ldaps://<LDAP server domain name>:<port>。 LDAP 通訊協定的預設埠號是 389 , LDAP over Secure Sockets Layer (LDAPS) 通訊協定的預設埠號是 636。<LDAP_BASEDN>是搜尋基準的 LDAP 識別名稱 (DN)。 例如,dc=abc,dc=com。<LDAP_BINDDN>是容許搜尋基本 DN 的 LDAP 使用者。 例如,cn=admin,dc=abc,dc=com。<LDAP_BINDPASSWORD>是連結 DN 中所提及之使用者的密碼。
範例指令
ldapsearch -x -H "ldap://<hostname or IP address>:389" -b "o=abc.com" -s sub
ldapsearch -x -H "ldap://<hostname or IP address>:389" -b "dc=abc,dc=com" -D "cn=admin,dc=abc,dc=com" -w "password" -s sub
驗證 LDAP 過濾器
根據 LDAP 過濾器建立搜尋字串,以從 LDAP 伺服器擷取資料。 如果搜尋結果顯示一或多個 LDAP 項目,則 LDAP 過濾器配置是正確的。 如果搜尋結果未顯示任何項目,則 LDAP 過濾器不正確或與 LDAP 伺服器類型不相容。
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" -w "<LDAP_BINDPASSWORD>" -s sub "<Search string>"
以下是參數說明:
<LDAP_URL>是 LDAP 伺服器的 URL。 例如,ldap://<LDAP server domain name or IP address>:<port>或ldaps://<LDAP server domain name>:<port>。 LDAP 通訊協定的預設埠號為 389 , LDAPS 通訊協定的預設埠號為 636。<LDAP_BASEDN>是搜尋基準的 LDAP DN。 例如,dc=abc,dc=com。<LDAP_BINDDN>是容許搜尋基本 DN 的 LDAP 使用者。 例如,cn=admin,dc=abc,dc=com。<LDAP_BINDPASSWORD>是連結 DN 中所提及之使用者的密碼。<search string>是用來搜尋 LDAP 伺服器的搜尋字串。
IBM Tivoli Directory Server LDAP 過濾器
| 屬性名稱 | 預設值 |
|---|---|
| 群組過濾器 | (&(cn=%v)(objectclass=groupOfUniqueNames)) |
| 群組 ID 對映 | *:cn |
| 群組成員 ID 對映 | groupOfUniqueNames:uniqueMember |
| 使用者過濾器 | (&(emailAddress=%v)(objectclass=person)) |
| 使用者 ID 對映 | *:emailAddress |
驗證群組過濾器的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(cn=*)(objectclass=groupOfUniqueNames))"驗證群組 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectclass=*)(cn=*))"驗證群組成員 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectclass=groupOfUniqueNames)(uniqueMember=*))"驗證使用者過濾器的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(emailAddress=*)(objectclass=person))"驗證使用者 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectclass=*)(emailAddress=*))"
Microsoft Active Directory LDAP 過濾器
| 屬性名稱 | 預設值 |
|---|---|
| 群組過濾器 | (&(cn=%v)(objectcategory=group)) |
| 群組 ID 對映 | *:cn |
| 群組成員 ID 對映 | memberOf:member |
| 使用者過濾器 | (&(sAMAccountName=%v)(objectcategory=user)) |
| 使用者 ID 對映 | user:sAMAccountName |
驗證群組過濾器的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(cn=*)(objectcategory=group))"驗證群組 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectcategory=*)(cn=*))"驗證群組成員 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectcategory=*)(member=*))"驗證使用者過濾器的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(sAMAccountName=*)(objectcategory=user))"驗證使用者 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectcategory=user)(sAMAccountName=*))"
自訂 (OpenLDAP) 伺服器 LDAP 過濾器
| 屬性名稱 | 預設值 |
|---|---|
| 群組過濾器 | (&(cn=%v)(objectclass=groupOfUniqueNames)) |
| 群組 ID 對映 | *:cn |
| 群組成員 ID 對映 | groupOfUniqueNames:uniqueMember |
| 使用者過濾器 | (&(uid=%v)(objectclass=Person)) |
| 使用者 ID 對映 | *:uid |
驗證群組過濾器的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(cn=*)(objectclass=groupOfUniqueNames))"驗證群組 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectclass=*)(cn=*))"驗證群組成員 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectclass=groupOfUniqueNames)(uniqueMember=*))"驗證使用者過濾器的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(uid=*)(objectclass=person))"驗證使用者 ID 對映的指令範例
ldapsearch -x -H "<LDAP_URL>" -b "<LDAP_BASEDN>" -D "<LDAP_BINDDN>" \ -w "<LDAP_BINDPASSWORD>" -s sub "(&(objectclass=*)(uid=*))"
解決一般登入問題
在配置 LDAP 連線之後,無法以 LDAP 使用者身分登入
即使連線測試和 LDAP 配置成功,您也可能無法以 LDAP 使用者身分登入。
您會看到指出 invalid username or password的錯誤。
您可能會在 auth-idp Pod 之 platform-auth-service 儲存器的日誌檔中看到下列錯誤:
CWIML4537E: The login operation could not be completed. The specified principal name XXXXXX is not found in the back-end repository.
如果要識別錯誤,請啟用追蹤,讓 Liberty 服務知道「首次失敗資料擷取 (FFDC)」日誌中的確切錯誤。 如需相關資訊,請參閱 啟用使用者鑑別問題的除錯。
以下是可能的原因。 會針對每一個原因提供解決方案。
原因 1-登入時使用無效的 username 值
使用者名稱值與 userIdMap 過濾器屬性值不同。
原因 1 的解決方案
請確定您輸入正確的使用者名稱。 使用者名稱必須與 userIdMap 過濾器屬性值相同。 使用者名稱區分大小寫。
請考量下列範例:
LDAP 伺服器上的 LDAP 使用者詳細資料:
dn: uid=testuser,ou=people,dc=abc,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: TestUser
givenName: TestUser
sn: SN
uid: testuser
userPassword: testuser
mail: testuser@abc.com
LDAP 配置:
User filter: (&(uid=%v)(objectclass=person))
User ID map: *:uid
如果您使用 *:uid 作為 userIdMap 過濾器,則在登入時必須使用 uid 值 testuser 作為使用者名稱。
原因 2-LDAP 登入使用者或 連結 DN 使用者已在 LDAP 伺服器中停用或鎖定
- LDAP 登入使用者已在 LDAP 伺服器中停用或鎖定,因為多次嘗試登入失敗。
- 由於多次失敗的登入嘗試,在 LDAP 伺服器上已停用或鎖定 連結 DN 使用者。
原因 2 的解決方案
- 使用
ldapsearch工具來測試 LDAP 連線。 - 在 LDAP 伺服器上啟用或解除鎖定 LDAP 登入使用者或 連結 DN 使用者。
原因 3-用來登入的 密碼 值無效
- LDAP 使用者密碼可能錯誤。
- 連結 DN 密碼 可能包含一些不受支援的特殊字元。
原因 3 的解決方案
- 請輸入正確的密碼,然後嘗試登入。
- 如果 連結 DN 密碼 具有特殊字元,請變更密碼,且在已變更的密碼中不使用特殊字元。
原因 4-在高可用性 (HA) 叢集中的所有 Pod 之間, LDAP 配置可能未同步
登入要求可能要前往 HA 叢集中沒有 LDAP 配置的 Pod。
原因 4 的解決方案
重新啟動 auth-idp Pod。
原因 5-LDAP 連線因各種原因而發生問題
- 無法呼叫到 LDAP 伺服器。
- 您已在 LDAP 伺服器 URL 中使用 LDAP 伺服器主機名稱,且無法呼叫到該主機名稱。 此問題可能是因為在叢集安裝期間未新增正確的 DNS 伺服器項目。
- 如果使用 LDAPS 來配置 LDAP 連線,則下列可能是可能的原因:
- 在 LDAP 伺服器 URL 中使用 IP 位址,而非 LDAP 伺服器主機名稱。
- LDAP 伺服器憑證未匯入至叢集。
- LDAP 伺服器憑證不符合 LDAP 伺服器主機名稱 (或憑證 SAN (主體替代名稱))。
原因 5 的解決方案
- 使用
ldapsearch工具來測試 LDAP 連線。 - 在主要節點上或
auth-idpPod 的platform-auth-service儲存器中,新增/etc/hosts檔案中的 LDAP 伺服器主機名稱。 - 若要配置 LDAPS 連線,請使用 LDAP 伺服器 URL 中的 LDAP 伺服器主機名稱,並將 LDAP 伺服器憑證匯入至叢集。 已遵循 配置 LDAP over SSL的所有必要步驟。
- 請變更主機名稱,或取得符合 LDAP 伺服器主機名稱或任何一個憑證 SAN 的新憑證。
原因 6- auth-idp Pod 的 platform-auth-service 儲存器中 MongoDB 連線失敗
您可能會在 auth-idp Pod 之 platform-auth-service 儲存器的日誌中看到 MongoDB 連線失敗錯誤。
原因 6 的解決方案
檢查所有 icp-mongodb-x** Pod 的狀態,如果狀態不是 Running,請重新啟動 Pod。 然後,重新啟動所有 auth-idp Pod。
解決搜尋使用者或群組的常見問題
建立團隊時無法搜尋使用者或群組。
原因
您使用了無效的搜尋字串。
解決方法
您必須使用 cn 屬性的值,或您在 LDAP 配置中使用的使用者或群組屬性 (例如 uid 或 emailaddress )。
請考量下列範例:
LDAP 伺服器上的 LDAP 使用者詳細資料
dn: uid=testuser,ou=people,dc=abc,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: TestUser
givenName: TestUser
sn: SN
uid: testuser
userPassword: testuser
mail: testuser@abc.com
LDAP 配置中使用下列過濾器:
- User filter: (&(uid=%v)(objectclass=person))
- 使用者 ID 對映: * :uid
使用的 userIdMap 是 *:uid。
您可以用來搜尋使用者的有效值如下:
- TestUser (
cn值) - testuser (
uid值)