[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: LDAP einrichten



Michael Renner <michael.renner@gmx.de> (Mo 28 Nov 2011 20:45:01 CET):
> Moin,
> 
> LDAP ist neu für mich. Nach der Anleitung von 
> http://www.delixs.de/dwiki/index.php/Entwicklungsumgebung/LDAP
> 
> richtete ich LDAP ein. Einen Testaccount legte ich auch an, der mit
> # ldapsearch -h localhost -b dc=vbox4php,dc=org -x uid=rmustermann
>  und getent passwd rmustermann auch zu finden ist.

Ich unterstelle mal, daß rmustermann nicht auch in der /etc/passwd
enthalten ist.

getent(1) verwendet die Resolver-Libraries (NSS), also steht vermutlich in der
/etc/nsswitch.conf auch für password, shadow und group „files ldap“
drin. libnss-ldap gibt es in zwei Geschäckern:

    libnss-ldap
    libnss-ldapd

mit entsprechend unterschiedlichen Konfigurationsdateien. (Ich *meine*,
beim libnss-ldapd ist auch der nslcd notwendig, und *dieser* hat dann
die Konfiguration!).

In Deinem obigen Beispiel gibt Du die Searchbase ausdrücklich an.
Normalerweise könnte die in der Konfiguration für die
LDAP-Client-Bibliothen (bei Debian: /etc/ldap/ldap.conf) stehen.
Wenn sie dort nicht steht, dann muß sie auch in der Konfiguration für
für nss-ldap* auftauchen. 

Aber scheinbar ist das ja alles richtig, denn sonst würde „getent“ nicht
funktionieren. Ob „getent passwd“ (also ohne einen spezifischen) 
Dir wirklich alle Nutzer liefert, hängt sehr vom LDAP-Server ab. Er muß
nicht so eine Suche unterstützen. Oder er muß nicht alle Ergebnisse
liefern. (Oft ist bei 500 Einträgen eine Obergrenze.) Wird für Dich
jetzt nicht relevant sein.

Für die Dinge, die Du wahrscheinlich vorhast, ist diese „Enumeration“
der Nutzer nicht notwendig.

> Allerdings klappt der Login für diesen User nicht. Und auch die ldapscripts 
> kennen den User nicht:
> # ldapsetpasswd rmustermann
> User rmustermann not found in LDAP

Was diese Scripts tun, weiß ich nicht. Vielleicht sind sie nicht korrekt
konfiguriert.  Wenn Du PAM korrekt konfiguriert hast (hättest), kannst
Du die Passworte ganz normal mit passwd(1) setzen.

Typischerweise brauchen LDAP-Clients die Einstellungen,
die man auch in /etc/ldap/ldap.conf machen kann. Wenn es gut läuft,
verwenden sie, was dort drin steht, manchmal habe sie eine eigene
Konfig.

    - LDAP-Server       (-h …)
    - Suchbasis         (-b …)
    - Bind-Method       (-x   (entspricht „simple“))

    Falls kein „anonymes“ Bind möglich ist:
    - Bind-User         (-D …)
    - Bind-Passwd       (-w … oder -W und dann eintippen)

Meistens wird ein anonymes Bind für normale Abfrage (keine
Passwort-Information) möglich sein.

> # ldapsearch -x -h localhost -D "uid=rmustermann,ou=users,dc=vbox4php,dc=org" 
> -W
> Enter LDAP Password: 
> ldap_bind: Invalid credentials (49)

Wenn genau dieser Nutzer noch kein (bekanntes) Passwort hat, dann ist es schwierig,
sich als dieser Nutzer anzumelden.

Du hast sicher einen „admin“-User angelegt, der darf dann alles, und der
kann auch ein Passwort setzen. In vielen Konfig-Files taucht dieser
Admin-User dann als rootdn mit einem rootpw auf. Das ist eine mit dem
normalen Passwort-System vergleichbare Logik.

Und eigentlich ist es noch komplizierter. Wie läuft so ein Anmeldvorgang
ab - ich versuche das mal mit den normalen LDAP-Kommandozeilentools
nachzustellen:

Da kommt einer, und möchte sich als „heiko“ anmelden:
Der entsprechende LDAP-Client (z.B. pam_ldap) startet eine Suche nach
dem Nutzer, vielleicht muß er sich für diese einfache Suche schon
anmelden (meistens jedoch nicht, und bei Dir auch nicht, sonst hätte
dein ganz obiges „ldapsearch“ nicht funktioniert)

    $ ldapsearch -x [-D cn=host12,dc=… -w…] -LLL uid=heiko dn
    dn: uid=heiko,ou=Users,dc=is,dc=schlittermann,dc=de

Jetzt wissen wir, zu welchem DN das Passwort passen müsste, welches der
Nutzer uns ja hoffentlich mitschickt. Jetzt versucht der entsprechende
LDAP-Client (pam_ldap) einen Bind mit genau diesem Nutzer-Namen und dem
bekannten Passwort. Wenn das klappt, ist alles ok, wenn nicht, dann eben
nicht.
    
    $ ldapwhoami -x -D uid=heiko,ou=Users,dc=is,dc=schlittermann,dc=de -w …
    dn:uid=heiko,ou=Users,dc=is,dc=schlittermann,dc=de

Alternativ liefert es „invalid credentials“. 

> Auch in der /var/log/auth.log dieser Fehler:
> sshd[19456]: pam_ldap: error trying to bind (Invalid credentials)

Ja, sieht wohl so aus, als hätte der Nutzer sein Passwort nicht richtig
angegeben.

Du kannst eine Menge mehr erfahren, wenn Du im slapd das LogLevel auf
256 stellst (stats), dann kann man sehr gut erfahren, was die Clients
eigentlich gerade tun oder tun wollen. (slapd.conf(5))

Das Passwort setzen für den Nutzer kannst Du jederzeit mit den normalen
ldap-Tools:

    ldappasswd -x -D cn=admin,… -w … uid=rmustermann,ou=…

-- 
Heiko :: dresden : linux : SCHLITTERMANN.de
GPG Key 48D0359B : 3061 CFBF 2D88 F034 E8D2 7E92 EE4E AC98 48D0 359B

Attachment: signature.asc
Description: Digital signature


Reply to: