LDAP 身份验证问题

LDAP 身份验证问题

我有一个本地 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 哈希。不管怎样,没人愿意将密码以明文形式存储。

所以,问题解决了!

干杯,

相关内容