ldap auf Ubuntu 16.04 - Ungültige Anmeldeinformationen (49)

ldap auf Ubuntu 16.04 - Ungültige Anmeldeinformationen (49)

Ich versuche, eine lokale LDAP-Instanz einzurichten, damit ich Software debuggen kann, die LDAP zur Authentifizierung verwendet. Dies funktionierte unter Ubuntu 14.04 LTS einwandfrei, aber beim Upgradeversuch auf Ubuntu 16.04 LTS lief es nicht mehr und ich habe Ubuntu 16.04 LTS von Grund auf neu installiert und kann LDAP nach viel Frust nicht mehr richtig zum Laufen bringen.

Ich habe slapd installiert und damit slapadd -l <file>meine Datenbank gefüllt. Ich kann sehen, dass meine Datei mit folgendem geladen wurde 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

Mein Code kann sich jedoch nicht gegenüber dem Benutzer „smm“ authentifizieren und ich kann für den Benutzer mit kein Kennwort festlegen ldappasswd -D "uid=smm,ou=People,dc=nodomain" -A -S -W. Ich werde zur Eingabe der Kennwörter aufgefordert und es tritt dann der gleiche Fehler auf:

Old password: 
Re-enter old password: 
New password: 
Re-enter new password: 
Enter LDAP Password: 
ldap_bind: Invalid credentials (49)

Ich habe auch dpkg-reconfigure slapdein LDAP-Root-Passwort festgelegt. Allerdings erhalte ich sowohl vor als auch nach der Neukonfiguration denselben Fehler. Hier ist die Originaldatei, die zum Auffüllen der Datenbank verwendet wurde:

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

Enthält natürlich meinen richtigen Namen und die von generierte SSHA-Zeichenfolge slappasswd.

An diesem Punkt bin ich ratlos, warum es nicht funktioniert und was das Problem ist.

Antwort1

Das Problem scheint also gewesen zu sein, dass die Passwörter so geladen wurden, dass ich sie nicht kannte oder sie fehlten. Ich konnte zuerst das LDAP-Administratorkennwort und dann das Benutzerkontokennwort mithilfe des Befehls ldapmodify effektiv zurücksetzen. Ich liste unten auf, was ich getan habe, in der Hoffnung, dass es jemand anderem hilft.

LDAP-Administratorkennwort zurücksetzen

Zuerst habe ich den Passwort-Hash mit slappasswd generiert.

root@laptop:/etc/ldap/slapd.d# slappasswd 
New password: 
Re-enter new password: 
{SSHA}<hash redacted>

Als nächstes musste ich herausfinden, wo das Administratorkennwort festgelegt wurde. Das habe ich getan mit:

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>

Ihr DC kann im Befehl anders sein, je nachdem, wie Sie die Dinge eingerichtet haben. Ich wünschte, ich könnte Ihnen eine bessere Antwort darauf geben, was Ihr DC sein sollte, aber ich verstehe LDAP nicht ganz. Im Grunde war alles, was ich getan habe, unter dc=nodomain. Ihre Konfiguration ist wahrscheinlich anders.

Als nächstes habe ich ldapmodify verwendet, um das Administratorkennwort auf ein mir bekanntes Passwort zurückzusetzen. Bitte beachten Sie, dass ich sowohl den Befehl als auch die Zeilen eingegeben habe, die mit „dc:“, „replace:“ und „olcRootPw:“ beginnen. Sie müssen nach der letzten Zeile eine Leerzeile einfügen, damit ldapmodify die vorherigen Befehle anwendet.

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>

Der oldcDatabaseWert wird aus dem Befehl übernommen ldapsearchund Ihr Wert kann sich von meinem unterscheiden. Wenn in den Suchergebnissen kein vorheriges olcRootPw vorhanden war, müssen Sie im obigen Änderungsbefehl möglicherweise addanstelle von verwenden.replace

Strg-C beendet unsere LDAP-Modify-Sitzung.

Jetzt kenne ich das LDAP-Administratorkennwort und kann mit dem Zurücksetzen eines Benutzerkontos fortfahren.

LDAP-Benutzerkennwort zurücksetzen

Ich habe slappasswd verwendet, um einen neuen Passwort-Hash für das Passwort des Benutzers zu generieren. Dieser Befehl ist für beide Passwortrücksetzungen derselbe.

root@laptop:/etc/ldap/slapd.d# slappasswd 
New password: 
Re-enter new password: 
{SSHA}<hash redacted>

Als Nächstes habe ich den Befehl ldapmodify ausgeführt, dieses Mal jedoch etwas anders:

ldapmodify -H ldapi:/// -D "cn=admin,dc=nodomain" -W

Die -DOption teilt LDAP mit, dass ich als Administrator (oder wer auch immer in den Anführungszeichen nach -D steht) arbeite. Ihr dcWert kann natürlich anders sein. Die -WOption teilt LDAP mit, dass ich nach dem Administratorkennwort gefragt werden soll.

Nachdem ich das LDAP-Administratorkennwort eingegeben hatte (das ich oben zurückgesetzt hatte), gab ich den Befehl zum Festlegen des Benutzerkennworts ein. Folgendes habe ich ausgeführt:

dn: uid=smm,ou=People,dc=nodomain
add: userPassword
userPassword: {SSHA}<new password hash>

Die erste Zeile ist der DN, um anzugeben, welcher Benutzer ein zurückgesetztes Passwort benötigt. Die zweite Zeile ist entweder ein addBefehl, wenn das Benutzerpasswort nicht festgelegt ist, oder ein replaceBefehl, wenn das Benutzerpasswort bereits festgelegt ist. Die dritte Zeile ist der neue Passwort-Hash, den LDAP verwenden soll. Geben Sie nach der dritten Zeile eine leere Zeile ein, um ldapmodify mitzuteilen, dass Sie mit der Eingabe des Befehls fertig sind und dieser ausgeführt werden soll. Hoffentlich erhalten Sie ein Ergebnis wie:

modifying entry "uid=smm,ou=People,dc=nodomain"

Nun habe ich auch für meinen Benutzer ein neues Passwort.

verwandte Informationen