3.3. LDAP-Verzeichnisdienst#

Univention Corporate Server speichert domänenweit vorgehaltene Daten in einem LDAP-Verzeichnisdienst auf Basis von OpenLDAP. Dieses Kapitel beschreibt die weitergehende Konfiguration und Anpassung von OpenLDAP.

In einer UCS-Domäne werden oft mehrere LDAP-Server betrieben. Die Konfiguration des/der verwendeten Server(s) wird in Konfiguration des verwendeten LDAP-Servers beschrieben.

3.3.1. LDAP-Schemata#

In Schema-Definitionen wird festgelegt, welche Objektklassen existieren und welche Attribute darin enthalten sind - mit anderen Worten, welche Daten in einem Verzeichnisdienst gespeichert werden können. Schema-Definitionen liegen als Text-Dateien vor und werden über die Konfigurationsdatei des OpenLDAP-Servers eingebunden.

UCS verwendet nach Möglichkeit Standard-Schemata, so dass eine Interoperabilität mit anderen LDAP-Applikationen in der Regel gegeben ist. Für Univention-spezifische Attribute - etwa für den Richtlinien-Mechanismus - werden Schema-Erweiterungen mitgeliefert.

3.3.1.1. LDAP-Schema-Erweiterungen#

Um den Aufwand für kleine Erweiterungen im LDAP möglichst gering zu halten, bringt UCS ein eigenes LDAP-Schema für Kundenerweiterungen mit. Die LDAP-Objektklasse univentionFreeAttributes kann ohne Einschränkungen für erweiterte Attribute verwendet werden. Sie bringt 20 frei zu verwendende Attribute (univentionFreeAttribute1 bis univentionFreeAttribute20) mit und kann in Verbindung mit jedem beliebigen LDAP-Objekt (z.B. einem Benutzerobjekt) verwendet werden.

Wenn LDAP-Schema-Erweiterungen als Teil von Softwarepaketen ausgeliefert werden sollen, besteht auch die Möglichkeit diese zu paketieren und durch ein Univention Directory Listener-Modul an alle Backup Directory Nodes der Domäne zu verteilen. Weitere Hinweise finden sich in Packaging LDAP Schema Extensions.

3.3.1.2. LDAP-Schema-Replikation#

Über den Listener/Notifier-Mechanismus (siehe Listener/Notifier-Domänenreplikation) wird auch die Replikation der LDAP-Schemata automatisiert. Dies entbindet den Administrator von der Notwendigkeit, Schema-Änderungen auf allen OpenLDAP-Servern der Domäne manuell nachzupflegen. Mit der Ausführung der Schema-Replikation vor der Replikation von LDAP-Objekten wird sichergestellt, dass diese nicht aufgrund fehlender Objektklassen oder Attribute scheitert.

Auf dem Primary Directory Node wird beim Start des OpenLDAP-Servers über alle Verzeichnisse mit Schema-Definitionen eine Prüfsumme erzeugt. Diese Prüfsumme wird mit der letzten in der Datei /var/lib/univention-ldap/schema/md5 gespeicherten Prüfsumme verglichen.

Die eigentliche Replikation der Schema-Definitionen wird vom Univention Directory Listener initiiert. Vor jeder Abfrage einer neuen Transaktions-ID durch den Univention Directory Notifier wird dessen aktuelle Schema-ID abgefragt. Ist diese höher als die Schema-ID auf der Listener-Seite, wird über eine LDAP-Suche vom LDAP-Server des Notifier-Systems dessen aktuell verwendetes Subschema bezogen.

Das ausgelesene Subschema wird auf dem Listener-System im LDIF-Format in die Datei /var/lib/univention-ldap/schema.conf eingebunden und der lokale OpenLDAP-Server neu gestartet. Ist die Schema-Replikation mit diesem Schritt abgeschlossen, wird die Replikation der LDAP-Objekte fortgeführt.

3.3.2. Revisionssichere LDAP-Protokollierung#

Das Paket univention-directory-logger ermöglicht die Protokollierung von Änderungen im LDAP-Verzeichnisdienst. Da jeder Datensatz den Hash-Wert des vorhergehenden Datensatzes enthält, können Manipulationen an der Logdatei - etwa entfernte Einträge - aufgedeckt werden.

Um das Paket univention-directory-logger zu installieren, folgen Sie den Schritten zur Installation von Softwarepaketen auf UCS in Installation/Deinstallation von UCS-Komponenten im Univention App Center oder Installation/Deinstallation von einzelnen Paketen auf der Kommandozeile.

Einzelne Teilbereiche des Verzeichnisdienstes können von der Protokollierung ausgenommen werden. Diese Zweige können durch die Univention Configuration Registry-Variablen ldap/logging/exclude1, ldap/logging/excludeN konfiguriert werden. Standardmässig ist der Container exkludiert, in dem die temporären Objekte gespeichert werden (cn=temporary,cn=univention). Die Protokollierung der LDAP-Änderungen erfolgt durch ein Univention Directory Listener-Modul. Nach Univention Configuration Registry-Änderungen muss der Univention Directory Listener-Dienst neu gestartet werden.

Die Protokollierung erfolgt in die Datei /var/log/univention/directory-logger.log im folgenden Format:

START
Old Hash: Hashsumme des vorhergehenden Datensatzes
DN: DN des LDAP-Objekts
ID: Listener/Notifer-Transaktions-ID
Modifier: DN des ändernden Kontos
Timestamp: Zeitstempel im Format dd.mm.yyyy hh:mm:ss
Action: add, modify oder delete

Old Values:
 Liste der alten Attribute, ist leer wenn ein Objekt hinzugefügt wird
New Values:
 Liste der neuen Attribute, ist leer wenn ein Objekt gelöscht wird
END

Für jeden protokollierten Datensatz wird eine Hashsumme berechnet und zusätzlich in die Sektion daemon.info des Syslog-Dienstes protokolliert.

Ab UCS 4.4 erratum 536 wird in der Datei /var/log/univention/directory-logger.log vor jede Zeile als Präfix die jeweilige Transaktions-ID des Eintrags hinzugefügt:

ID 342: START
ID 342: Old Hash: 70069d51a7e2e168d7c7defd19349985
ID 342: DN: uid=Administrator,cn=users,dc=example,dc=com
ID 342: ID: 342
ID 342: Modifier: cn=admin,dc=example,dc=com
ID 342: Timestamp: 15.04.2020 09:20:40
ID 342: Action: modify
ID 342:
ID 342: Old values:
ID 342: description: This is a description test
ID 342: entryCSN: 20200415091936.317108Z#000000#000#000000
ID 342: modifyTimestamp: 20200415091936Z
ID 342:
ID 342: New values:
ID 342: description: This is a description test
ID 342: entryCSN: 20200415092040.430976Z#000000#000#000000
ID 342: modifyTimestamp: 20200415092040Z
ID 342: END

Wurde univention-directory-logger vor dieser UCS-Version installiert, wird per Default das alte Verhalten (kein Präfix) beibehalten. Durch das Setzen der Univention Configuration Registry Variable ldap/logging/id-prefix auf yes kann das neue Verhalten aktiviert werden. Dieses Präfix erleichtert eine Korrelation der zusammenhängenden Zeilen bei einer Weiterverarbeitung des Protokolls in Analyse- und Monitoring-Software.

3.3.3. Timeout für inaktive LDAP-Verbindungen#

Mit der Univention Configuration Registry Variable ldap/idletimeout kann ein Zeitraum in Sekunden konfiguriert werden, nach dessen Ablauf eine LDAP-Verbindung serverseitig geschlossen wird. Wenn der Wert auf 0 gesetzt wird, wird kein Ablaufzeitraum angewendet. Der Ablaufzeitraum beträgt standardmäßig sechs Minuten.

3.3.4. LDAP-Kommandozeilen-Tools#

Neben den UMC-Modulen gibt es auch eine Reihe von Programmen, mit denen auf der Kommandozeile auf das LDAP-Verzeichnis zugegriffen werden kann.

Das Tool univention-ldapsearch vereinfacht die authentifizierte Suche im LDAP-Verzeichnis. Als Argument muss ein Suchfilter übergeben werden, im folgenden Beispiel wird der Administrator anhand der User-ID gesucht:

$ univention-ldapsearch uid=Administrator

Der Befehl slapcat ermöglicht die Speicherung der aktuellen LDAP-Daten in einer Textdatei im LDIF-Format, z.B.:

$ slapcat -f /etc/ldap/slapd.conf > ldapdata.txt

3.3.5. Zugriffskontrolle auf das LDAP-Verzeichnis#

Der Zugriff auf die Informationen im LDAP-Verzeichnis wird serverseitig durch Access Control Lists (ACLs) geregelt. Die ACLs werden in der zentralen Konfigurationsdatei /etc/ldap/slapd.conf definiert und über Univention Configuration Registry verwaltet.

Die slapd.conf wird dabei durch ein Multifile-Template verwaltet; weitere ACL-Elemente können unterhalb von /etc/univention/templates/files/etc/ldap/slapd.conf.d/ zwischen den Dateien 60univention-ldap-server_acl-master und 70univention-ldap-server_acl-master-end eingefügt oder die bestehenden Templates erweitert werden.

Wenn LDAP-ACL-Erweiterungen als Teil von Softwarepaketen ausgeliefert werden sollen, besteht auch die Möglichkeit diese zu paketieren und durch ein Univention Directory Listener-Modul an alle LDAP-Server der Domäne zu verteilen. Weitere Hinweise finden sich in Packaging LDAP ACL Extensions.

Die Grundeinstellung des LDAP-Servers bei Neuinstallationen mit UCS erlaubt keinen anonymen Zugriff auf das LDAP-Verzeichnis. Dieses Verhalten kann mit der Univention Configuration Registry Variable ldap/acl/read/anonymous konfiguriert werden. Einzelne IP-Adressen können über die Univention Configuration Registry Variable ldap/acl/read/ips für den anonymen Lesezugriff freigeschaltet werden.

Nach erfolgreicher Authentifizierung am LDAP-Server können alle Attribute eines Benutzerkontos von diesem Benutzer ausgelesen werden.

Ein zusätzlicher, interner Account, der Root-DN, besitzt darüber hinaus auch schreibenden Vollzugriff.

Unter UCS gibt es außerdem einige standardmäßig installierte ACLs, die den Zugriff auf sensitive Daten unterbinden (z.B. auf das Benutzerpasswort) und für den Betrieb notwendige Regeln setzen (etwa nötige Zugriffe auf Rechnerkonten für Anmeldungen). Der lesende und schreibende Zugriff auf diese sensitiven Daten ist nur für die Mitglieder der Gruppe Domain Admins vorgesehen.

Dabei werden auch enthaltene Gruppen unterstützt. Mit der Univention Configuration Registry Variable ldap/acl/nestedgroups kann diese Gruppen-in-Gruppen-Funktionalität für die LDAP-ACLs deaktiviert werden, wodurch eine Geschwindigkeitssteigerung bei den Verzeichnisdienstanfragen zu erwarten ist.

3.3.5.1. Delegation des Zurücksetzens von Benutzerpasswörtern#

Um einer Teilgruppe von Administratoren mit eingeschränkten Rechten, z.B. einem Helpdesk, das Zurücksetzen von Benutzerpasswörtern zu ermöglichen, kann das Paket univention-admingrp-user-passwordreset installiert werden. Es legt über ein Join-Skript die Benutzergruppe User Password Admins an, sofern diese noch nicht existiert.

Mitglieder dieser Gruppe erhalten über zusätzliche LDAP-ACLs die Berechtigung, Passwörter von anderen Benutzern zurückzusetzen. Diese LDAP-ACLs werden bei der Paketinstallation automatisch aktiviert. Um eine andere schon existierende Gruppe statt der Gruppe User Password Admins zu verwenden, kann der DN der zu verwendenden Gruppe in die Univention Configuration Registry Variable ldap/acl/user/passwordreset/accesslist/groups/dn eingetragen werden. Nach der Änderung ist ein Neustart des LDAP-Servers erforderlich.

Passwörter können über das UMC-Modul Benutzer zurückgesetzt werden. In der Standardeinstellung wird das Modul nur dem Benutzer Administrator angezeigt. Während der Installation wird automatisch eine neue Richtlinie default-user-password-admins erstellt, die den Mitgliedern der Gruppe User Password Admins zugewiesen ist und mit einem entsprechenden Container im LDAP-Verzeichnis verknüpft werden kann. Weitere Hinweise zur Konfiguration von UMC-Richtlinien finden sich in Kapitel Delegierte Administration für UMC-Module.

Die Richtlinie ermöglicht dabei die Suche nach Benutzern sowie die Ansicht aller Attribute eines Benutzerobjektes. Wird versucht, neben dem Passwort weitere Attribute zu modifizieren, für die keine ausreichenden Zugriffsrechte auf das LDAP-Verzeichnis existieren, wird der Schreibzugriff vom Univention Directory Manager mit der Meldung Zugriff verweigert abgelehnt.

Vorsicht

Das Paket ist auf dem Primary Directory Node sowie den Backup Directory Nodes zu installieren. Während der Installation wird der LDAP-Server neu gestartet und ist kurzzeitig nicht erreichbar.

Das Zurücksetzen der Passwörter durch die Passwort-Gruppe kann für sensible Benutzer oder Gruppen (z.B. Domänen-Administratoren) verhindert werden. Mit den Univention Configuration Registry-Variablen ldap/acl/user/passwordreset/protected/uid und ldap/acl/user/passwordreset/protected/gid können Benutzer und Gruppen konfiguriert werden. Mehrere Werte müssen durch Kommas getrennt werden. Nach Änderungen an den Variable ist es erforderlich, den LDAP-Server über den Befehl systemctl restart slapd neu zu starten. In der Standardeinstellung werden die Mitglieder der Gruppe Domain Admins vor Passwortänderungen geschützt.

Sollte für die Änderung des Passworts der Zugriff auf zusätzliche LDAP-Attribute notwendig sein, können die Attributnamen in der Univention Configuration Registry Variable ldap/acl/user/passwordreset/attributes ergänzt werden. Nach der Änderung ist zur Übernahme ein Neustart des LDAP-Verzeichnisdienstes notwendig. Für eine UCS-Standard-Installation ist diese Variable bereits passend gesetzt.

3.3.6. Name Service Switch / LDAP-NSS-Modul#

Die in Univention Corporate Server verwendete GNU C-Standardbibliothek (glibc) bietet eine modulare Schnittstelle zur Auflösung von Namen von Benutzern, Gruppen und Rechnern, den Name Service Switch.

Das LDAP-NSS-Modul wird auf UCS-Systemen standardmäßig für den Zugriff auf die Domänen-Daten (z.B. Benutzer) verwendet. Das Modul greift dabei auf den in der Univention Configuration Registry Variable ldap/server/name (und falls nötig zusätzlich der ldap/server/addition) festgelegten LDAP-Server zu.

Das Verhalten bei nicht erreichbarem LDAP-Server kann durch die Univention Configuration Registry Variable nssldap/bindpolicy festgelegt werden. Standardmäßig wird bei nicht erreichbarem Server eine erneute Verbindung aufgebaut. Wird die Variable auf soft gesetzt, wird kein erneuter Verbindungsaufbau durchgeführt. Dies kann den Boot eines Systems mit nicht erreichbarem LDAP-Server - z.B. in einer abgeschottenen Testumgebung - deutlich beschleunigen.

3.3.7. Syncrepl zur Anbindung von Nicht-UCS OpenLDAP-Servern#

Für die Anbindung von nicht auf UCS-Systemen installierten OpenLDAP-Servern an das UCS-Managementsystem kann parallel zum Notifier-Dienst der Syncrepl-Replikationsdienst aktiviert werden. Dieser ist Bestandteil von OpenLDAP, registriert Veränderungen im lokalen Verzeichnisdienst und überträgt diese auf weitere OpenLDAP-Server.

3.3.8. Konfiguration des Verzeichnis-Dienstes bei Verwendung von Samba/AD#

Standardmäßig ist der OpenLDAP-Server so konfiguriert, dass er zusätzlich zu den Standard-Ports 389 und 636 auch auf den Ports 7389 und 7636 Anfragen entgegen nimmt.

Wird Samba/AD eingesetzt, belegt der Dienst Samba/AD-Domänencontroller die Ports 389 und 636. In diesem Fall wird OpenLDAP automatisch umkonfiguriert, so dass nur noch die Ports 7389 und 7636 eingesetzt werden. Dies ist insbesondere bei der Konfiguration von syncrepl zu beachten (siehe Syncrepl zur Anbindung von Nicht-UCS OpenLDAP-Servern). univention-ldapsearch verwendet automatisch den Standard-Port.

3.3.9. Tägliche Sicherung der LDAP-Daten#

Auf dem Primary Directory Node und allen Backup Directory Nodes wird der Inhalt des LDAP-Verzeichnisses durch einen Cron-Job täglich gesichert. Falls Samba 4 eingesetzt wird, werden auch dessen Daten-Verzeichnis gesichert.

Die LDAP-Daten werden im LDIF-Format im Verzeichnis /var/univention-backup/ im Namensschema ldap-backup_DATUM.ldif.gz gespeichert. Sie sind nur für den Benutzer root lesbar. Die Samba 4 Backup-Dateien werden im Verzeichnis /var/univention-backup/samba/ gesichert.

Mit der Univention Configuration Registry Variable backup/clean/max_age kann definiert werden, wie lange alte Backup-Dateien aufgehoben werden (z.B. backup/clean/max_age=365, alle Dateien älter als 365 Tage werden automatisch gelöscht). Diese Variable wird bei Neuinstallationen ab UCS 4.4-7 automatisch auf 365 gesetzt. Falls die Variable nicht gesetzt ist, werden keine Backup-Dateien gelöscht.