Active-Directory

如何通過 LDAP 向活動目錄調試 SASL 身份驗證

  • December 16, 2021

我正在嘗試配置在 Centos 6.5 上執行的 SASL,以允許對企業活動目錄伺服器進行身份驗證。最終目標是驗證對該伺服器上執行的某些顛覆儲存庫的訪問權限,但在這個階段,我只是試圖讓 saslauthd 進行身份驗證,並使用 testaslauthd 對其進行測試。

身份驗證每次都失敗,日誌中顯示以下內容:

saslauthd[20843] :do_auth         : auth failure: [user=MYUSER] [service=svn] [realm=MYREALM] [mech=ldap] [reason=Unknown]
saslauthd[20843] :do_request      : response: NO

這是我的 /etc/saslauthd.conf:

ldap_auth_method: bind
ldap_servers: ldaps://ldap.ad.mycompany.com:3269/
ldap_bind_dn: MYBINDDN
ldap_password: xxxxxxxxxx
ldap_search_base: DC=mycompany,DC=xx
ldap_filter: (&(cn=%u)(objectClass=person))
ldap_referrals: yes
log_level: 10

請注意,我知道 ldap 伺服器 URI、綁定 DN、密碼、搜尋庫和過濾器是正確的,因為我有一個 perl 腳本,它使用這些腳本對網站執行身份驗證,並且工作正常。perl 腳本使用 Net::LDAP,綁定到 AD,使用搜尋庫和過濾器搜尋使用者,然後嘗試使用使用者的 DN 和密碼進行綁定。據我了解,這正是 SASL 應該嘗試按照我配置它的方式進行的操作。

我的第一個觀察結果是,儘管將 log_level 設置為 10,但我只收到一條線告訴我它失敗了,原因未知。我使用 -d (調試)選項從 shell 啟動 saslauthd。我還能做些什麼來獲得更多的調試輸出?

有什麼方法可以記錄 LDAP 互動?

最後,有人能看出我的配置有什麼問題嗎?也許一些 AD 怪癖需要在 SASL 配置中進行特殊設置?

最後,我無法讓 saslauthd 輸出任何更好的調試資訊,但如果它可以幫助其他人,這是我解決問題所遵循的過程。

首先,我使用 strace 啟動 saslauthd,如下所示:

# strace -f saslauthd -d -a ldap

然後我可以看到 saslauthd 進行的所有系統呼叫。它看起來好像在與 AD 伺服器的初始交換期間失敗了,可能是在 TLS 協商期間。

我決定看看是否可以使用 openldap 提供的命令行 ldapsearch 工具重現類似的行為。我給出了這樣的命令:

$ ldapsearch -d 9 -H ldaps://ldap.ad.mycompany.com:3269/ -D MYBINDDN -w xxxxxx \
  -b DC=mycompany,DC=xx '(&(cn=myuser)(objectClass=person))'

-d 9 終於給了我一些有用的調試輸出:

TLS: certificate [CN=VeriSign Class 3 Public Primary Certification Authority - G5,OU="(c) 2006 VeriSign, Inc. - For authorized use only",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US] is not valid - error -8179:Peer's Certificate issuer is not recognized..

閱讀 ldap.conf 的手冊頁,我發現我應該將 TLS_CACERT 和/或 TLS_CACERTDIR 設置為指向證書包和文件。我正在使用 Centos 6,它在 /etc/pki/tls/certs/ 中有這些,所以我設置了以下內容:

TLS_CACERT    /etc/pki/tls/certs/ca-bundle.crt
TLS_CACERTDIR /etc/pki/tls/certs/

之後 ldapsearch 工作,重新啟動 saslauthd 後,對 AD 伺服器的身份驗證成功。

引用自:https://serverfault.com/questions/582537