Authentifizierung der Systemuser gegen OpenLDAP
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 ;-)
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten