無法在 macOS 客戶端上驗證 OpenLDAP 使用者“找不到使用者:數據庫中沒有秘密”
我有一個執行 OpenLDAP 伺服器的 Ubuntu 16.04 伺服器。我能夠看到一切都很好:
serveradmin@Magic:~$ ldapsearch -x -H ldap://localhost -D cn=admin,dc=example,dc=com -W Enter LDAP Password: # extended LDIF # # LDAPv3 # base <dc=example,dc=com> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # example.com dn: dc=example,dc=com objectClass: top objectClass: dcObject objectClass: organization o: work dc: example # admin, example.com dn: cn=admin,dc=example,dc=com objectClass: simpleSecurityObject ... # Groups, example.com dn: ou=Groups,dc=example,dc=com objectClass: organizationalUnit ou: Groups ... # Policies, example.com dn: ou=Policies,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: Policies description: Password policy for users # foo, People, example.com dn: uid=foo,ou=People,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount sn: foo ...
在我選擇的任何 macOS 客戶端上,從作業系統
High Sierra
到El Capitan
我都可以執行:a0216:data admin$ dscl localhost -list /LDAPv3/example.com/Users foo bar ...
這將檢索我所有使用者的列表。
我使用 MacBook Pro 2016 版執行
High Sierra
。當我嘗試在目錄實用程序下以使用者身份進行身份驗證時,它成功地允許我進行身份驗證:Jun 14 16:36:23 magic slapd[344850]: conn=1276 op=1 SRCH attr=uidNumber uid userPassword Jun 14 16:36:23 magic slapd[344850]: conn=1276 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text= Jun 14 16:36:24 magic slapd[344850]: conn=1277 fd=19 ACCEPT from IP=10.0.1.20:65410 (IP=0.0.0.0:389) Jun 14 16:36:24 magic slapd[344850]: conn=1277 fd=19 closed (connection lost) Jun 14 16:36:24 magic slapd[344850]: conn=1278 fd=19 ACCEPT from IP=10.0.1.20:65411 (IP=0.0.0.0:389) Jun 14 16:36:24 magic slapd[344850]: conn=1278 op=0 SRCH base="" scope=0 deref=0 filter="(objectClass=*)" Jun 14 16:36:24 magic slapd[344850]: conn=1278 op=0 SRCH attr=supportedSASLMechanisms defaultNamingContext namingContexts schemaNamingContext saslRealm Jun 14 16:36:24 magic slapd[344850]: conn=1278 op=0 SEARCH RESULT tag=101 err=0 nentries=1 text= Jun 14 16:36:24 magic slapd[344850]: conn=1278 op=1 BIND dn="uid=foo,ou=People,dc=example,dc=com" method=128 Jun 14 16:36:24 magic slapd[344850]: conn=1278 op=1 BIND dn="uid=foo,ou=People,dc=example,dc=com" mech=SIMPLE ssf=0 Jun 14 16:36:24 magic slapd[344850]: conn=1278 op=1 RESULT tag=97 err=0 text=
但是,如果我從執行的 iMac 上嘗試相同的操作
High Sierra
,或者El Capitan
我得到以下資訊:Jun 14 16:40:04 magic slapd[344850]: conn=1345 op=3 SRCH attr=uidNumber uid userPassword Jun 14 16:40:04 magic slapd[344850]: conn=1345 op=3 SEARCH RESULT tag=101 err=0 nentries=1 text= Jun 14 16:40:04 magic slapd[344850]: conn=1358 fd=19 ACCEPT from IP=10.0.1.67:49545 (IP=0.0.0.0:389) Jun 14 16:40:04 magic slapd[344850]: conn=1358 fd=19 closed (connection lost) Jun 14 16:40:04 magic slapd[344850]: conn=1359 fd=19 ACCEPT from IP=10.0.1.67:49546 (IP=0.0.0.0:389) Jun 14 16:40:04 magic slapd[344850]: conn=1359 op=0 SRCH base="" scope=0 deref=0 filter="(objectClass=*)" Jun 14 16:40:04 magic slapd[344850]: conn=1359 op=0 SRCH attr=supportedSASLMechanisms defaultNamingContext namingContexts schemaNamingContext saslRealm Jun 14 16:40:04 magic slapd[344850]: conn=1359 op=0 SEARCH RESULT tag=101 err=0 nentries=1 text= Jun 14 16:40:04 magic slapd[344850]: conn=1359 op=1 BIND dn="" method=163 Jun 14 16:40:04 magic slapd[344850]: conn=1359 op=1 RESULT tag=97 err=14 text=SASL(0): successful result: security flags do not match required Jun 14 16:40:04 magic slapd[344850]: conn=1359 op=2 BIND dn="" method=163 Jun 14 16:40:04 magic slapd[344850]: SASL [conn=1359] Failure: no secret in database Jun 14 16:40:04 magic slapd[344850]: conn=1359 op=2 RESULT tag=97 err=49 text=SASL(-13): user not found: no secret in database Jun 14 16:40:04 magic slapd[344850]: conn=1359 op=3 UNBIND Jun 14 16:40:04 magic slapd[344850]: conn=1359 fd=19 close
我已經嘗試了所有我能想到的東西,並且感覺答案直接讓我眼前一亮。有誰知道為什麼我
No secret in database
在嘗試從 iMac 登錄時不斷出現問題,是否有一個簡單的解決方案來解決這個問題?我做了一些研究並遇到了一些事情(IE this)但是,我遇到的方向和想法並不清楚,而且似乎每個人的工作方式都不同。任何幫助或正確方向的觀點將不勝感激。謝謝
我想到了!
好的,問題是 macOS 嘗試使用
CRAM-MD5
. OpenLDAP 預設為 DIGEST-MD5。為了使其工作,您必須在 SASL 身份驗證失敗時將散列算法添加到 plist 中。為此:sudo su /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string DIGEST-MD5" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/yourldapserver.plist /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string CRAM-MD5" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/yourldapserver.plist /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string NTLM" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/yourldapserver.plist /usr/libexec/PlistBuddy -c "add ':module options:ldap:Denied SASL Methods:' string GSSAPI" /Library/Preferences/OpenDirectory/Configurations/LDAPv3/yourldapserver.plist
重新啟動Mac,它將成功執行。另外,請確保您複製了 plist,這樣您就不必再搞砸了!
我最近遇到了這個問題。當 DIGEST-MD5 和 CRAM-MD5 機製作為來自伺服器的選項提供時,我無法讓使用者身份驗證工作。我想在 LDAP 伺服器上進行更改,而不是使用 plist 設置修改每個客戶端。
以下兩種方法通過阻止伺服器使用 2 SASL MD5 機制來修復使用者身份驗證。使用綁定到 OpenLDAP 伺服器版本 2.4.44 的 macOS Yosemite 和 Mojave 客戶端進行測試。
**方法 1:**設置 olcSaslSecProps noactive 選項,該選項將禁用所有易受主動非字典攻擊的機制。(注意:還有其他選項,請參閱:https ://docs.oracle.com/javase/jndi/tutorial/ldap/security/sasl.html )
vi modify_olcSaslSecProps.ldif dn: cn=config changetype: modify replace: olcSaslSecProps olcSaslSecProps: noplain,noanonymous,noactive ldapmodify -Y EXTERNAL -H ldapi:/// -f modify_olcSaslSecProps.ldif
查看修改前後的變化:
ldapsearch -H ldapi:/// -x -s base -b "" -LLL "+" | grep sasl BEFORE: supportedSASLMechanisms: GSS-SPNEGO supportedSASLMechanisms: GSSAPI supportedSASLMechanisms: DIGEST-MD5 supportedSASLMechanisms: EXTERNAL supportedSASLMechanisms: CRAM-MD5 supportedSASLMechanisms: LOGIN supportedSASLMechanisms: PLAIN AFTER: supportedSASLMechanisms: GSS-SPNEGO supportedSASLMechanisms: GSSAPI
**方法 2:**提供更多控制的方法是創建一個配置文件,以允許所需的特定 SASL 機制。對我來說,在安裝了 Cyrus SASL 2.1.26 軟體包的 CentOS 7.9 伺服器上。創建一個名為 slapd.conf 的文件,其內容如下所示,然後重新載入 slapd 服務以使更改生效。根據需要以小寫形式編輯 SASL 機制,每個機制之間有一個空格。
vi /usr/lib64/sasl2/slapd.conf mech_list: plain login external gssapi gss-spnego systemctl reload slapd.service
olcSaslSecProps 也應該設置為“noplain,noanonymous”。
vi modify_olcSaslSecProps.ldif dn: cn=config changetype: modify replace: olcSaslSecProps olcSaslSecProps: noplain,noanonymous ldapmodify -Y EXTERNAL -H ldapi:/// -f modify_olcSaslSecProps.ldif