我正在尝试配置 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
闲聊确实不是包括该属性的任何访问请求日志userPassword
。
这就对了出现好像服务器在这种配置下不知道该userPassword
属性是它应该执行 digest-md5 身份验证的秘密。我没有配置它,但 (a) 我感觉这是默认秘密,(b) 我在手册页或 openldap 手册中找不到任何似乎表明如何配置它的内容,以及 (c) 在各种在线建议中找不到任何暗示这是必要的内容。
简单的身份验证就可以了。
现在,这是一个稍微奇怪的配置——明文密码,没有 SASL 数据库,因为这旨在成为一个虚拟/轻量级 LDAP 配置,用于运行回归测试——但我已经完全不知道接下来该读什么,也不知道要谷歌搜索更多的关键字或日志文件片段了。整个星球上似乎没有人遇到过这个问题(不是那很奇怪),所以我怀疑我以某种方式破坏了配置的另一部分。但我相信我了解配置中的其他所有内容在做什么,而且...没有什么明显的。
我有一种不祥的预感,这将需要一个简单的解决办法,但现在,我愿意接受任何想法。
答案1
您所听到的“砰、砰、砰、砰”的声音是头与墙壁发出的美妙和谐的声音。
问题不在于配置,而在于请求。在 ldapsearch 调用中,我有-X u:eb01
。但这是用于代理授权;要与特定用户名绑定,需要-U eb01
。