![LDAP 为错误的用户更改密码?](https://linux22.com/image/686099/LDAP%20%E4%B8%BA%E9%94%99%E8%AF%AF%E7%9A%84%E7%94%A8%E6%88%B7%E6%9B%B4%E6%94%B9%E5%AF%86%E7%A0%81%EF%BC%9F.png)
我有一个 OpenLDAP 服务器设置。目前我的服务器中添加了两个用户。就我的测试而言,单个用户实例工作得很好。当我在 LDAP 存储库上有两个用户时,我的第一个问题出现了。
添加我的第二个用户后,我直接尝试登录到我的 Linux 机器,当第一次登录时它总是要求我更改密码(这是完美的)。
虽然,当我使用我的第一个临时密码登录时,你可以在下面的输出中看到用户 2 正在尝试登录,但当它要求更改密码时,它正在尝试为 User1 进行更改。
login as: user2
Authenticating with public key "user2-rsa-key"
Further authentication required
[email protected]'s password:
You are required to change your password immediately (root enforced)
You are required to change your LDAP password immediately.
Last login: 'Date' From 'Hostname'
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user user1. <----- This is where it messes up !
Enter login(LDAP) password:
我相信这是我的 ACL 的问题,所以我会让你们看看我当前在 olcDatabase={2}bdb.ldif 上的 acl 是什么
olcAccess: {0}to attrs=userPassword by self write by dn.base="cn=admin,dc=domain,dc=com" write by anonymous auth by * none
olcAccess: {1}to * by dn.base="cn=admin,dc=domain,dc=com" write by self write by * read
现在假设这不是我的 ACL 的问题,我想知道这是否只是我将用户添加到 LDAP 服务器的方式。我通常使用以下命令添加用户:
ldapadd -x -W -D "cn=admin,dc=domain,dc=com" -f user.ldif
最后,这是我的服务器上当前的输出
[root@localhost ~]# ldapsearch -x -W -D "cn=admin,dc=domain,dc=com" -b "dc=domain,dc=com" "(objectclass=*)"
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=domain,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# domain.com
dn: dc=domain,dc=com
objectClass: dcObject
objectClass: organization
o: domain.com
dc: domain
# users, domain.com
dn: ou=users,dc=domain,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users
# groups, domain.com
dn: ou=groups,dc=domain,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
# user1, users, domain.com
dn: uid=user1,ou=users,dc=domain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
objectClass: ldapPublicKey
cn: user1
uid: user1
uidNumber: 16859
gidNumber: 100
homeDirectory: /home/user1
loginShell: /bin/bash
gecos: user1
shadowMax: 0
shadowWarning: 0
sshPublicKey: some rsa keys
userPassword:: crypted password
shadowLastChange: 16991
# user2, users, domain.com
dn: uid=user2,ou=users,dc=domain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
objectClass: ldapPublicKey
cn: user2
uid: user2
uidNumber: 16859
gidNumber: 100
homeDirectory: /home/user2
loginShell: /bin/bash
gecos: user2
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
sshPublicKey: some rsa keys
userPassword:: crypted password
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5
答案1
您的两个用户定义都包括uidNumber: 16859
。您描述的场景是用户2的密码更改实际上会更新用户1可能是由于 LDAP 通过搜索来查找要更改密码的用户帐户uid
,在用户1条目,并应用新密码。我不是 LDAP 专家,但uidNumber
LDAP 中的冲突产生此结果似乎合乎逻辑,尽管 openLDAP 甚至允许两个条目对于如此重要的属性具有相同的值似乎很奇怪。
感谢您提供有关整体设置的详细信息,以便从另一个角度观察该问题的人可以发现潜在的罪魁祸首。