我有一个本地 OpenLDAP 服务器,上面有几个用户。我将其用于开发目的,以下是 ldif:
#Top level - the organization
dn: dc=site, dc=com
dc: site
description: My Organization
objectClass: dcObject
objectClass: organization
o: Organization
#Top level - manager
dn: cn=Manager, dc=site, dc=com
objectClass: organizationalRole
cn: Manager
#Second level - organizational units
dn: ou=people, dc=site, dc=com
ou: people
description: All people in the organization
objectClass: organizationalunit
dn: ou=groups, dc=site, dc=com
ou: groups
description: All groups in the organization
objectClass: organizationalunit
#Third level - people
dn: uid=celoserpa, ou=people, dc=site, dc=com
objectclass: pilotPerson
objectclass: uidObject
uid: celoserpa
cn: Marcelo de Moraes Serpa
sn: de Moraes Serpa
userPassword: secret_12345
mail: [email protected]
到目前为止一切顺利。我可以使用“cn=Manager,dc=site,dc=com”和 12345678 密码(本地服务器密码,在 slapd.conf 上设置)进行绑定。
但是,我想与 people OU 下的任何用户绑定。在本例中,我想与以下用户绑定:dn:uid=celoserpa、ou=people、dc=site、dc=com userPassword:secret_12345
但我得到了一个“(49)- 凭证无效”每次都会出错。我尝试过 CLI 工具(例如 ldapadd、ldapwhoami 等)以及 ruby/ldap。使用这些凭据进行绑定会失败,并出现无效凭据错误。
我认为这可能是 ACL 问题,但是 slapd.conf 上的 ACL 似乎是正确的:
access to attrs=userPassword
by self write
by dn.sub="ou=people,dc=site,dc=com" read
by anonymous auth
access to * by * read
我怀疑 OpenLDAP 可能没有与 userPassword 进行比较?或者我缺少某些 ACL 配置,这会以某种方式影响特定 DN 对 userPassword 的读取访问权限。
我真的很迷茫,任何建议都值得感激!
干杯,
马塞洛。
答案1
@ #openladp 的朋友们非常友善,他们帮助我调试了这个问题。结果发现这是一个简单的细节(大多数情况下都是这样 :))——当我创建 ldif 时,我将密码设置为明文,但是,我没有做任何事情来告诉 openldap 它实际上是明文,我也不知道我必须这样做(我也不知道或不知道如何这样做,但这并不重要,您稍后会看到)。我一直认为它与 ACL 有关(OpenLDAP 拒绝对 userPassword 进行读取访问),但问题是 OpenLDAP 试图使用 SHA-1 进行身份验证,而密码是以明文形式存储的。
解决方案?将密码存储为 SHA-1 哈希。不管怎样,没人愿意将密码以明文形式存储。
所以,问题解决了!
干杯,