Linux

LDAP為錯誤的使用者更改密碼?

  • August 29, 2016

我有一個 OpenLDAP 伺服器設置。我目前有兩個使用者添加到我的伺服器。就我的測試而言,單個使用者實例可以完美執行。當我在 LDAP 儲存庫上有兩個使用者時,我的第一個問題出現了。

添加第二個使用者後,我嘗試登錄我的 linux 機器,第一次登錄時它總是要求我更改密碼(這是完美的)。

雖然,當我使用我的第一個臨時密碼登錄時,您可以在下面的輸出中看到User2 正在嘗試登錄,但是當它要求更改密碼時,它正在嘗試為 User1更改密碼。

login as: user2
Authenticating with public key "user2-rsa-key"
Further authentication required
user1@x.x.x.x'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 的問題,所以我會讓你們看看我目前的 acl 在 olcDatabase={2}bdb.ldif

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

您的兩個使用者定義都包括uidNumber: 16859. 您描述的user2的密碼更改實際更新user1密碼的場景可能是由於 LDAP 通過搜尋找到要更改密碼的使用者帳戶,在user1uid條目中找到它並應用新密碼。我不是 LDAP 專家,但似乎合乎邏輯的LDAP 中的衝突會產生這種結果,儘管 openLDAP 甚至允許兩個條目對於這樣一個關鍵屬性具有相同的值似乎很奇怪。uidNumber

感謝您提供有關您的整體設置的詳細資訊,以便對問題的第二次關注可以發現潛在的罪魁禍首。

引用自:https://serverfault.com/questions/788965