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… =>