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