OpenLDAP-Server unter Debian
Datum: 01.03.2015 (letzte Änderung 14.05.2021)
Zielstellung: Installation von LDAP, Hinzufügen von Objekten
Installation
Neben dem Daemon ‚slapd‘ benötigen wir die ‚ldap-utils‘, um z.B. ldif-Dateien einbinden oden nach Datensätzen suchen zu können.
apt-get install slapd ldap-utils
Dabei ist lediglich das Passwort für den LDAP-Administrator namens ‚admin‘ zu vergeben, das später z.B. für authentifizierte Abfragen gebraucht wird.
Wesentlich mehr Einstellungsmöglichkeiten werden angeboten, wenn man zu einem späteren Zeitpunkt
dpkg-reconfigure slapd
ausführt. ACHTUNG: Lässt man dabei zu, dass ein Backup von der Datenbank gemacht wird, landet es im Verzeichnis ‚/var/backups‘. Solange aber dieses Backup in dem Verzeichnis verbleibt, lässt sich der reconfigure-Vorgang nicht noch einmal durchführen!
Konfiguration
Die Konfiguration wird heutzutage direkt in der Datenbank selbst gespeichet (olc = Online Configuration) und nicht mehr in einer Datei, was für eine umfassende
Replikation auch wichtig ist. Allerdings erschwert sich damit die Arbeit des Admins um einiges. Aber halb so schlimm - das Passwort
wurde bei der Installation ja schon gesetzt und auch sonst gibt es für den Anfang nicht allzuviel einzustellen.
Eine erste anonyme Read-Only-Suchabfrage unter Verwendung des Basis-DNs, der üblicherweise mit hostname -f
identisch sein
sollte, liefert als einziges Blattobjekt den Administrator des LDAP-Systemes, den ‚admin‘:
ldapsearch -x -b dc=kitdd,dc=intern
Will man es vermeiden, den Basis-DN immer mit angeben zu müssen, kann die Client-Konfigurationsdatei des Servers angepasst werden:
vi /etc/ldap/ldap.conf
Als Inhalt wird nur diese eine Zeile angepasst:
BASE dc=kitdd,dc=intern
Jetzt kann man eine Abfrage kurz und knapp ausführen mit:
ldapsearch -x
Importieren von Daten in die Datenbank
Zuerst brauchen wir eine Grundstruktur, in die dann Benutzer aufgenommen werden können:
vi organisation.ldif
Hier ist der Inhalt der Datei:
dn: ou=people,dc=kitdd,dc=intern
objectClass: organizationalUnit
ou: people
dn: ou=group,dc=kitdd,dc=intern
objectClass: organizationalUnit
ou: group
Mit folgender Zeile wird nun das Ganze in die Datenbank befördert:
ldapadd -x -D cn=admin,dc=kitdd,dc=intern -W -f organisation.ldif
Zweitens wäre ein Beispielbenutzer sinnvoll, wir erstellen dafür wieder eine Datei:
vi fritz.ldif
Als Inhalt schreiben wir folgendes hinein:
dn: cn=office,ou=group,dc=kitdd,dc=intern
objectClass: top
objectClass: posixGroup
description: Gruppe Office
cn: office
gidNumber: 10000
dn: uid=fritz,ou=group,dc=kitdd,dc=intern
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
uid: fritz
uidNumber: 10000
gidNumber: 10000
cn: fritz
sn: Meier
loginShell: /bin/bash
homeDirectory: /home/fritz
Auch dies muss wieder in die Datenbank gelangen:
ldapadd -x -D cn=admin,dc=kitdd,dc=intern -W -f fritz.ldif
Was noch fehlt, ist das Setzen eines Passwortes für fritz:
ldappasswd -x -D cn=admin,dc=kitdd,dc=intern -W -S uid=fritz,ou=group,dc=kitdd,dc=intern
Kommt kein Fehler vor, kann es mit dem Testen weitergehen…
Abfrage des Datenbestandes
Zur Kontrolle kann mit ‚ldapsearch‘ wieder der Datenbestand ausgegeben werden. Hier sollen nur die Objekte ausgegeben werden, die mit ‚fr‘ beginnen und also auch unseren fritz betreffen:
ldapsearch -x cn=fr*
Wollen wir das gehashte Passwort von fritz sehen, muss die Abfrage authentifiziert erfolgen:
ldapsearch -x -W -D cn=admin,dc=kitdd,dc=intern cn=fr*
Daten exportieren
Daten lassen sich ganz leicht exportieren, so dass sie später weiterverarbeitet werden können, z.B. den Benutzer fritz:
ldapsearch -x -LLL uid=fritz -D cn=admin,dc=kitdd,dc=intern -w admin > fritz.ldif
Benutzer erzeugen und entfernen
Nun haben wir damit auch eine Vorlage-LDIF-Datei für neue Benutzer erhalten. Es soll ein neuer Benutzer namens ‚opa‘ angelegt werden:
cp fritz.ldif opa.ldif
Jetzt müssen noch ein paar Dinge angepasst werden, zuerst natürlich der Benutzername:
sed -i 's/fritz/opa/' opa.ldif
Weitere Anpassungen betreffen auf alle Fälle noch die UID (evl. auch sambaSID) sowie GID
vi opa.ldif
Der neue Benutzer wird als nächstes mit
ldapadd -x -D cn=admin,dc=kitdd,dc=intern -W -f opa.ldif
importiert, abschließend muss ihm noch mit
ldappasswd -x -D cn=admin,dc=kitdd,dc=intern -W -S uid=opa,ou=group,dc=kitdd,dc=intern
das Secret gesetzt werden. Im Szenario „Samba-PDC mit LDAP-Backend“ ist bei gesetztem Schalter ‚ldap passwd sync = yes‘
anstelle von ‚ldappasswd‘ das Kommando smbpasswd opa
einzusetzen!
Letztendlich soll der eben angelegte Benutzer wieder aus dem LDAP-Verzeichnis entfernt werden:
ldapdelete -x -D cn=admin,dc=kitdd,dc=intern -W uid=opa,ou=group,dc=kitdd,dc=intern
Linux-Login mit Hilfe der LDAP-Accounts
Mit den neuen Benutzern wird es nun möglich, sich am Linux-System anzumelden. Die Koppelung LDAP/Unix-Account wird mit Hilfe der im „nis.schema“ definierten Objektklasse „posixAccount“ abgewickelt. Clientseitig müssen dafür jedoch noch die „NSS module for using LDAP as a naming service“ sowie die LDAP-Module für den PAM-Mechanismus, der sich ja um den Login kümmert, installiert und konfiguriert werden:
apt-get install libnss-ldap libpam-ldap
Die Einrichtung der beiden Pakete mittels Assistenten läuft hintereinander ab, zum Teil werden die gleichen Fragen gestellt, die dann einfach identisch beantwortet werden. Wichtige Punkte (oft richtig voreingestellt) sind:
URI des LDAP-Servers (FQDN oder IP-Adresse, z.B. ldap://192.168.2.201)
Angabe eines eindeutigen Namen der LDAP-Suchbasis (z.B. dc=kitdd,dc=intern)
Gewünschte LDAP-Version auswählen (empfohlen: 3)
Administrativen LDAP-Zugang festlegen (z.B. cn=admin,dc=kitdd,dc=intern mit zugehörigem Passwort)
Erlaubnis geben, dass der LDAP-Admin sich wie der lokale root verhalten darf (damit die verschiedenen Tools die lokalen Kennwörter ändern dürfen)
Bestätigen, dass keine Anmeldung erforderlich ist, um eine unauthorisierte Datenbankabfrage vorzunehmen.
Bei Bedarf können die Einstellungen später mit folgender Zeile geändert werden:
dpkg-reconfigure libnss-ldap
HINWEIS zur URI: Wenn Client und Server auf derselben Maschine laufen, kann die Vorgabe ldapi://
einfach übernommen werden (man beachte das kleine „i“). Es wird dann automatisch die lokale Socketdatei des slapd verwendet. Die beiden Dateien sehen dann so aus (ohne Kommentare und Leerzeilen):
root@deb10srv:~# cat /etc/pam_ldap.conf
base dc=dom1,dc=test
uri ldapi://
ldap_version 3
rootbinddn cn=admin,dc=dom1,dc=test
pam_password crypt
root@deb10srv:~#
root@deb10srv:~#
root@deb10srv:~# cat /etc/libnss-ldap.conf
base dc=dom1,dc=test
uri ldapi://
ldap_version 3
rootbinddn cn=admin,dc=dom1,dc=test
root@deb10srv:~#
Mit dieser Installation kommt auch automatisch der Caching-Dienst ‚nscd‘ mit, der nicht unbedingt benötigt wird. Er sollte, da er manchmal eher für Verwirrung sorgt als Nutzen bringt, gleich wieder deinstalliert werden:
apt-get remove nscd
Soeben während der Installation haben wir erfahren, dass wir die Datei ‚/etc/nsswitch.conf‘ von Hand anpassen müssen. Den betreffenden drei Zeilen wird die Zeichenkette ‚ldap‘ angefügt, so dass sie dann so aussehen:
passwd: compat ldap
group: compat ldap
shadow: compat ldap
Für einen ersten Test können wir uns mit der kleinen, nützlichen Kommandozeile
getent passwd
die Gesamtheit aller vorhandenen Benutzer aus der ‚/etc/passwd‘ und dem LDAP-Verzeichnis ausgeben lassen.
Nun wäre zwar schon ein Login z.B. mit dem Benutzer „fritz“ möglich, aber er stünde ohne Heimatverzeichnis da. Soll es beim
Erstlogin automatisch erzeugt werden, erweitert man die Datei /etc/pam.d/common-session
um diese Zeile (ans Ende anhängen):
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
Nun hoffen wir, dass alles funktioniert, wenn Fritz sich einloggt. Das Ganze am besten von einem anderen Nutzeraccount aus testen (nicht als root, damit der Passwortprompt kommt):
su - fritz
<= Have a lot of fun… =>