我正在尝试配置 openldap 2.4.33(从 OS X 10.8 上的源代码构建)以支持 digest-md5 身份验证,但没有成功。我无法进行身份验证,出现错误no secret in database
,而且我终生无法找出原因。
到目前为止的配置...
我有一个用户指定如下:
dn: cn=eb01,ou=bennet,o=meryton
objectclass: Person
objectclass: inetOrgPerson
cn: eb01
givenname: Elizabeth
sn: Bennet
userPassword: pw1
# or try...
#userPassword:: cHcx
#userPassword: {CLEARTEXT}pw1
(并且那里没有尾随空格,我已经检查过了!)。我为 cn=config 配置了适当的 olcAuthzRegexp 条目,以将身份验证身份映射到正确的 dn:
olcAuthzRegexp: uid=([^,]*),cn=digest-md5,cn=auth
ldap:///o=meryton??sub?(cn=$1)
但是,当我搜索时,我无法进行身份验证:
% ldapsearch -H ldap://localhost:8389 -LLL -b o=meryton \
-Y DIGEST-MD5 -X u:eb01 -w pw1
SASL/DIGEST-MD5 authentication started
ldap_sasl_interactive_bind_s: Invalid credentials (49)
additional info: SASL(-13): user not found: no secret in database
%
来自服务器的调试信息表明我正在正确地进行映射:
5120be85 <==slap_sasl2dn: Converted SASL name to cn=eb01,ou=bennet,o=meryton
5120be85 slap_sasl_getdn: dn:id converted to cn=eb01,ou=bennet,o=meryton
5120be85 SASL Canonicalize [conn=1000]: slapAuthzDN="cn=eb01,ou=bennet,o=meryton"
5120be85 SASL [conn=1000] Failure: no secret in database
5120be85 send_ldap_result: conn=1000 op=1 p=3
5120be85 send_ldap_result: err=49 matched="" text="SASL(-13): user not found: no secret in database"
但是,尽管该聊天记录包含访问请求的日志:
5120be85 => access_allowed: auth access to "cn=eb01,ou=bennet,o=meryton" "cn" requested
chatter 不包含userPassword
对该属性 的任何访问请求日志。
也就是说,在这种配置中,服务器似乎不知道该userPassword
属性是它应该执行 digest-md5 身份验证的秘密。我还没有配置它,但是 (a) 我觉得这是默认密码,(b) 我在联机帮助页或 openldap 手册中找不到任何似乎指示如何配置它的内容,以及 (c)在各种在线建议中找不到任何提示,甚至暗示这是必要的。
简单的身份验证就可以了。
现在,这是一个有点奇怪的配置——明文密码,没有 SASL 数据库,因为这是一个虚拟/轻量级 LDAP 配置,用于运行回归测试——但我完全不知道要读什么接下来,或任何更多的关键字或日志文件片段来谷歌搜索。整个星球上似乎没有人遇到过这个确切的问题(这不是那么奇特),所以我怀疑我以某种方式用配置的另一部分打破了这个问题。但我相信我了解配置中的其他所有内容都在做什么,并且......没有什么明显的。
我有一种令人讨厌的感觉,这将有一个令人头疼的简单修复,但现在,我对任何想法都持开放态度。
你能听到的砰、砰、砰、砰是头和墙和谐地发出的声音。
问题不在于配置,而在于请求。在 ldapsearch 调用中,我有
-X u:eb01
. 但这是为了代理授权;要绑定特定的用户名,需要-U eb01
.谢谢2003 年的 Howard Chu。