.png)
我正在嘗試設定本機 LDAP 實例,以便可以偵錯一些使用 LDAP 進行身份驗證的軟體。我在 Ubuntu 14.04 LTS 上可以正常工作,但嘗試升級到 Ubuntu 16.04 LTS 時被盒子破壞了,我重新安裝了臨時 Ubunut 16.04 LTS,並且在經歷了很多挫折後無法讓 LDAP 正常工作。
我安裝了 slapd 並用於slapadd -l <file>
填充我的資料庫。我可以看到我的文件已加載ldapsearch -x
:
# extended LDIF
#
# LDAPv3
# base <dc=nodomain> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# nodomain
dn: dc=nodomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: nodomain
dc: nodomain
# admin, nodomain
dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
# People, nodomain
dn: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People
# Groups, nodomain
dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups
# miners, Groups, nodomain
dn: cn=miners,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: miners
gidNumber: 5000
# smm, People, nodomain
dn: uid=smm,ou=People,dc=nodomain
uid: smm
sn: McCants
givenName: Stephen
cn: Stephen McCants
displayName: Stephen McCants
uidNumber: 10000
gidNumber: 5000
gecos: Stephen McCants
loginShell: /bin/bash
homeDirectory: /home/smm
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: person
# search result
search: 2
result: 0 Success
# numResponses: 7
# numEntries: 6
但是,我的程式碼無法針對使用者「smm」進行身份驗證,而且我無法使用 為使用者設定密碼ldappasswd -D "uid=smm,ou=People,dc=nodomain" -A -S -W
。它提示我輸入密碼,然後失敗並出現相同的錯誤:
Old password:
Re-enter old password:
New password:
Re-enter new password:
Enter LDAP Password:
ldap_bind: Invalid credentials (49)
我還曾經dpkg-reconfigure slapd
設定過 LDAP root 密碼。但是,在重新配置之前和之後,我都會遇到相同的錯誤。這是用於填充資料庫的原始檔案:
n: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People
structuralObjectClass: organizationalUnit
entryUUID: 03a28690-1834-1033-87f5-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.559226Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z
dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups
structuralObjectClass: organizationalUnit
entryUUID: 03b017e2-1834-1033-87f6-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.648148Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z
dn: cn=miners,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: miners
gidNumber: 5000
structuralObjectClass: posixGroup
entryUUID: 03b537ae-1834-1033-87f7-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.681730Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z
dn: uid=smm,ou=People,dc=nodomain
uid: smm
sn: <my name>
givenName: <my name>
cn: <my name>
displayName: <my name>
uidNumber: 10000
gidNumber: 5000
gecos: <my name>
loginShell: /bin/bash
homeDirectory: /home/smm
structuralObjectClass: inetOrgPerson
entryUUID: 983bd260-1835-1033-87fb-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123045015Z
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: person
userPassword: <redacted>
entryCSN: 20140123054441.631096Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123054441Z
當然,包含我的真實姓名並包含slappasswd
.
此時,我不知道為什麼它不起作用以及問題是什麼。
答案1
所以,問題似乎在於密碼的載入方式我不知道它們或它們遺失了。我能夠使用 ldapmodify 命令有效地重置,首先重置 LDAP 管理員密碼,然後重置使用者帳戶密碼。我在下面列出了我所做的事情,希望對其他人有幫助。
重設 LDAP 管理者密碼
首先,我使用 slappasswd 產生密碼雜湊。
root@laptop:/etc/ldap/slapd.d# slappasswd
New password:
Re-enter new password:
{SSHA}<hash redacted>
接下來,我需要找到管理員密碼的設定位置。我是這樣做的:
root@laptop:/etc/ldap/slapd.d# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcRootDN=cn=admin,dc=nodomain dn olcRootDN olcRootPW
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}mdb,cn=config
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}<hash redacted>
您的 dc 在命令中可能會有所不同,具體取決於您的設定方式。希望我能給出一個比你的 dc 應該更好的答案,但我並不完全理解 LDAP。基本上,我所做的一切都是在 dc=nodomain 下進行的。您的配置可能會有所不同。
接下來,我使用 ldapmodify 將管理員密碼重設為我知道的密碼。請注意,我輸入了命令和以「dc:」、「replace:」和「olcRootPw:」開頭的行。您需要在最後一行後放置一個空白行,以使 ldapmodify 應用前面的命令。
root@laptop:/etc/ldap/slapd.d# ldapmodify -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}mdb,cn=config
replace: olcRootPW
olcRootPW: {SSHA}<new hash from slappasswd>
該oldcDatabase
值是從ldapsearch
命令中提取的,你的值可能與我的值不同。如果搜尋結果中沒有先前的 olcRootPw,您可能需要在上面的修改命令中使用add
而不是。replace
Ctrl-C 結束 ldapmodify 會話。
現在我知道了 LDAP 管理員密碼,可以繼續重設使用者帳戶。
重置 LDAP 使用者密碼
我使用 slappasswd 為使用者的密碼產生新的密碼雜湊。此命令對於兩次密碼重置都是相同的。
root@laptop:/etc/ldap/slapd.d# slappasswd
New password:
Re-enter new password:
{SSHA}<hash redacted>
接下來,我執行 ldapmodify 命令,但這次略有不同:
ldapmodify -H ldapi:/// -D "cn=admin,dc=nodomain" -W
該-D
選項告訴 LDAP 我正在以管理員身份運行(或 -D 後面引號中的任何人)。dc
當然,你的價值可能會有所不同。該-W
選項告訴 LDAP 提示我輸入管理員密碼。
輸入 LDAP 管理員密碼(我在上面重設的)後,我發出命令來設定使用者的密碼。這是我跑的:
dn: uid=smm,ou=People,dc=nodomain
add: userPassword
userPassword: {SSHA}<new password hash>
第一行是 dn,指定哪個使用者需要重設密碼。add
如果未設定 userPassword,第二行是命令;replace
如果已經設定了 userPassword,則第二行是命令。第三行是 LDAP 應使用的新密碼雜湊。在第三行後輸入一個空行,告訴 ldapmodify 您已完成輸入命令並且它應該運行它。希望你得到這樣的結果:
modifying entry "uid=smm,ou=People,dc=nodomain"
現在我的用戶也有了新密碼。