Authentifizierung der Systemuser gegen OpenLDAP

Diesen Beitrag schrieb ich 9 Jahre und 1 Woche zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 3 Minuten

Wollen wir, dass sich unsere System-User gegen OpenLDAP authentifizieren dürfen, müssen wir zuerst einige Pakete nachinstallieren:

$ apt-get install libnss-ldap libpam-ldap nscd

/etc/ldap/ldap.conf

The ldap.conf configuration file is used to set system-wide defaults to be applied when running ldap clients. → man 5 ldap.conf

Generell wird beim login immer die Information dieser Datei ausgewertet. Es ist also unbedingt notwendig, hier den Zugriff auf den zentralen OpenLDAP-Server – in unserem Fall 127.0.0.1 – einzutragen.

BASE    dc=sysadmama,dc=de
URI     ldap://127.0.0.1:389

/etc/ldap.conf

This is the configuration file for the LDAP nameservice switch library (libnss-ldap) and the LDAP PAM (libpam-ldap) module.

base dc=sysadmama,dc=de
uri ldap://127.0.0.1:389
ldap\_version 3
bind\_policy soft
pam\_groupdn             ou=People,dc=sysadmama,dc=de
nss\_base\_passwd         dc=sysadmama,dc=de?sub
nss\_base\_shadow         ou=People,dc=sysadmama,dc=de?one
nss\_base\_group          dc=sysadmama,dc=de?sub

Sowohl passwd als auch group werden unserem OpenLDAP-Server entnommen – und zwar beginnend bei dc=sysadmama,dc=de. Das sub gibt an, dass ab hier der gesamte Bestand durchsucht wird. Theoretisch ermöglichen wir somit auch den Usern in InactivePeople ein Login. Jedoch: pam_groupdn erzwingt sich für Logins eine Zugehörigkeit in den ou=People-Ast! Welche Vorteile bringt das? Nun, Logins sind ausschließlich für User aus People möglich. Jedoch: Dateien im System können nun zweifelsfrei zugeordnet werden, da sie, auch wenn ein User deaktiviert wurde, weiterhin einem Usernamen anstelle einer ID gehören, und mehr noch: scriptest du dir beispielsweise, dass User, wenn sie deaktiviert werden, ihren Usernamem zu x-username ändern, so siehst du anhand des x- auch immer direkt, dass es sich um einen deaktivierten User handelt.

Rufst du dir die System-User auf stellst du an dieser Stelle jedoch fest, dass die OpenLDAP-User nach wie vor nicht angezeigt werden. Etwas fehlt noch…

$ getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

/etc/nsswitch.conf

The Name Service Switch (NSS) configuration file, /etc/nsswitch.conf, is used by the GNU C Library to determine the sources from which to obtain name-service information in a range of categories, and in what order. → man 5 nsswitch.conf

Wollen wir also unsere System-User aus unserem OpenLDAP ziehen, so müssen wir an dieser Stelle hinterlegen, dass im OpenLDAP danach gesucht werden soll. Doch Obacht: seit Einführung des systemd ist hier die Reihenfolge extrem wichtig! Lasse ich zuerst in ldap und dann in files (oder compat) suchen, fährt die Maschine einfach nicht mehr hoch! Deshalb: erst files, dann ldap.

## file: "/etc/nsswitch.conf"
passwd:         files [NOTFOUND=continue] ldap
group:          files [NOTFOUND=continue] ldap
shadow:         files [NOTFOUND=continue] ldap
...

Tipp: mit Änderungen an dieser Stelle ist nicht zu spaßen – du kannst dir das System so weit zerschießen, dass du dich nicht mehr einloggen kannst, die Maschine nicht mehr sauber hochfährt, sudo nicht mehr funktioniert… Lege dir sicherheitshalber ein Backup der nsswitch.conf nach /etc, das du im Ernstfall wieder an Ort und Stelle schieben kannst.

Und hier ist er nun, unser User firstuser, proudly presented from OpenLDAP ;-) Nach Änderungen kann es manchmal nötig sein, den nscd neu zu starten, da sonst Antworten aus dem Cache geliefert werden.

$ service nscd restart
  * Restarting Name Service Cache Daemon nscd
$ getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
firstuser:x:1000:1000:First User:/home/firstuser:/bin/bash
...

Passwortänderung mit passwd

firstuser kann sich also erfolgreich mit seinem Passwort einloggen. Doch dann will er sein Passwort per passwd ändern und – peng! – nichts geht…

$ passwd
Enter login(LDAP) password:
passwd: Authentication information cannot be recovered
passwd: password unchanged

Sollen unsere User die Möglichkeit erhalten ihr Passwort ändern zu können, so müssen wir zuerst ein weiteres benötigtes Paket installieren:

$ apt-get install libpam-cracklib
...
$ passwd
Enter login(LDAP) password:
New password:
Retype new password:
LDAP password information update failed: Insufficient access
passwd: Permission denied
passwd: password unchanged

Unser User firstuser ist nicht in der Lage, sein Passwort zu ändern – weil er seinen OpenLDAP-Eintrag nicht ändern darf. Deshalb müssen wir an dieser Stelle erneut die /etc/ldap/slapd.conf anpacken und um eine Rechtevergabe erweitern; anschließend muss die Konfiguration neu gebaut werden, wie es an dieser Stelle ausführlich beschrieben ist:

## file: "/etc/ldap/slapd.conf"
...
access to attrs=userPassword
        by anonymous auth
        by self write
        by * none

access to attrs=shadowLastChange
        by self write
        by * read

access to *
        by * read
...
$ passwd
Enter login(LDAP) password:
New password:
Retype new password:
LDAP password information changed for firstuser
passwd: password updated successfully

Tipp: die slapd.conf ist ziemlich zickig, was Kommentare angeht; Kommentaren wird üblicherweise ein # vorangestellt, dennoch schießt sich der Parser immer mal wieder ins Knie, wenn er auf ein Kommentarzeichen stößt, wo er keines erwartet. Kommentare dürfen nie innerhalb einer Zeile erscheinen und auch nicht innerhalb von Anweisungsblöcken!

access to attrs=userPassword
  ## by anonymous auth - Dies ist ein Beispiel für einen Kommentar, der den Parser zum Sterben bringt
  by self write

Nachdem die Authentifizierung der User nun also erfolgreich eingerichtet ist, können weitere Dienste an OpenLDAP angebunden werden – wenn wir uns den Stress schon geben, soll es sich wenigstens lohnen ;-)

Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Eure Gedanken zu „Authentifizierung der Systemuser gegen OpenLDAP“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.