我正在尝试让 dovecot 2.0.19 通过 LDAP(OpenLDAP 2.4.28)对用户进行身份验证,并使用 Wireshark 调试该过程。看起来 dovecot 的基本配置很好,但它无法将正确的请求发送到 LDAP 服务器。首先,这是我的 LDAP 条目的样子:
# ht
dn: dc=ht
objectClass: top
objectClass: dcObject
objectClass: organization
o: ip
dc: ht
# admin, ht
dn: cn=admin,dc=ht
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9cFY1b0ZZVUhack1aRTVvaUg1T3c2cytVWHV4aUNvaHI=
# people, ht
dn: ou=people,dc=ht
objectClass: organizationalUnit
objectClass: top
ou: people
# groups, ht
dn: ou=groups,dc=ht
objectClass: organizationalUnit
objectClass: top
ou: groups
# ipusers, groups, ht
dn: cn=ipusers,ou=groups,dc=ht
gidNumber: 500
cn: ipusers
objectClass: posixGroup
objectClass: top
# Max Mustermann, people, ht
dn: cn=Max Mustermann,ou=people,dc=ht
cn: Max Mustermann
givenName: Max
gidNumber: 500
homeDirectory: /home/users/mmustormann
sn: Mustermann
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
uidNumber: 1000
uid: mmustermann
userPassword:: e01ENX1ETUYxdWNEeHRxZ3h3NW5pYVhjbVlRPT0=
loginShell: /bin/bash
mail: [email protected]
现在,我对 dovecot 使用以下配置:
hosts = 10.1.2.1
dn = cn=admin,dc=ht
dnpass = a
auth_bind = yes
auth_bind_userdn = uid=%u,ou=people,dc=ht
ldap_version = 3
scope = subtree
base = ou=people,dc=ht
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid
user_filter = (&(objectClass=posixAccount)(uid=%u))
pass_attrs = uid=user,userPassword=password
pass_filter = (&(objectClass=posixAccount)(uid=%u))
现在我在Wireshark中看到的内容:
由于某种原因,Dovecot 无法验证其自身...
如果我按如下方式更改配置:
auth_bind = no
#auth_bind_userdn = uid=%u,ou=people,dc=ht
然后我得到以下图片:
它没有拾取设置base = ou=people,dc=ht
。但更关键的是,即使查看整个树,"<ROOT>" wholeSubTree
它也找不到所需的条目。
我真的很绝望,不知道该如何让它发挥作用。我真的只需要让它以某种方式发挥作用。
答案1
有趣的解决方案……但另一方面却非常烦人。错误在于以示例配置文件为例,dovecot-ldap.conf.ext
其中所有内容都被注释掉了。我以为它被注释掉了。唯一未注释的一行是base =
。经过两天的折磨,我终于找到了它……
这就是 dovecot 使用 发送搜索请求的原因base=<ROOT>
。这也是它不返回任何结果的原因。解决方案是注释掉此行。
实际配置:
hosts = 10.1.2.1
dn = cn=admin,dc=ht
dnpass = a
base = ou=people,dc=ht
ldap_version = 3
scope = onelevel