
| Datenbank-Backend Eine Datenbank, die für die physikalische Speicherung der Daten genutzt wird. Diese kann textbasiert sein - aber auch eine SQL-Datenbank ist möglich. |
| LDIF LDAP Data Interchange Format. LDIF ist ein ASCII-basiertes Dateiformat zur Darstellung von Informationen aus einem LDAP-Verzeichnis. |
In der Praxis setzen die meisten Unternehmen aus Redundanz- und Lastverteilungsgründen mehrere LDAP-Server zur Authentifizierung und Namensauflösung ein. Selbst in mittelgroßen Unternehmen sind das schon mal schnell fünf bis acht LDAP-Server. In älteren OpenLDAP-Versionen musste der Dienst jedes Mal neu gestartet beziehungsweise die Konfigurationsdatei neu geladen werden, nachdem eine Änderung in der Konfigurationsdatei /etc/openldap/slapd.conf durchgeführt wurde. Da die Änderungen meistens auf allen LDAP-Servern durchgeführt werden sollten, musste dies für jeden Server separat durchgeführt werden.
Seit der Version 2.3 des OpenLDAP-Servers kann die Konfiguration zur Laufzeit geändert werden. Für die Umsetzung wurde ein neues Datenbank-Backend namens ldif eingeführt, in dem die Konfigurationseinstellungen gespeichert werden. Die Konfigurationsdateien werden im LDIF-Format im Verzeichnis /etc/openldap/slapd.d erwartet.
Das Ändern von Konfigurationseinstellungen erfolgt nun analog zum Hinzufügen von Benutzern oder Gruppen. Es wird eine LDIF-Datei mit Konfigurationseinstellungen erstellt, die dann mit einem der beiden Befehle ldapadd oder ldapmodify auf die Datenbank angewendet werden. Der LDAP-Server erkennt die Konfigurationsänderungen und wendet sie sofort ohne Neustart an.
Die bisherige Konfigurationsdatei kann zwar weiterhin genutzt und geändert werden, allerdings mit den bekannten Nachteilen des anschließenden Neustarts des LDAP-Dienstes.
/etc/init.d/ldap stop mkdir /etc/openldap/slapd.d /usr/lib/openldap/slapd -f /etc/openldap/slapd.conf \ -F /etc/openldap/slapd.d rm /etc/openldap/slapd.conf chown -R ldap:ldap /etc/openldap/slapd.d /etc/init.d/ldap start |
| Abb. 1: Konvertierung einer bestehenden Konfiguration in das neue Verfahren. |
Von der Parallelnutzung beider Konfigurationsverfahren ist abzuraten, da kein automatischer Abgleich stattfindet und schnell die Übersicht verloren geht, wo welche Einstellung aktiviert wurde. Wir empfehlen deshalb, die bestehende Konfiguration in das neue Verfahren zu konvertieren und die alte Konfigurationsdatei anschließend zu löschen. Abbildung 1 zeigt die notwendigen Schritte zur Konvertierung.
Es gilt dabei allerdings eine kleine Einschränkung zu beachten: Der alte Replikationsdaemon slurpd kann mit dem neuen Verfahren nicht umgehen und braucht zwingend eine slapd.conf. Dies stellt jedoch ein zu vernachlässigendes Problem dar, da der wesentlich flexiblere und auf Performance ausgelegte syncrepl-Mechanismus [1] von OpenLDAP Version 2.3 diese Einschränkung nicht besitzt.
Der LDAP-Konfigurationsbaum unter /etc/openldap/slapd.d ist nun folgendermaßen aufgebaut: Direkt im Konfigurationsverzeichnis befinden sich das Objekt cn=config und die Datei cn=config.ldif, in der globale Konfigurationsattribute wie z. B. PID, args, TLS, Threads oder der Pfad zum Konfigurationsverzeichnis gesetzt werden. Letztendlich entsprechen die Einstellungen den globalen Einstellungen der alten Konfigurationsdatei.
Die unterhalb von cn=config befindlichen Objekte, wie z. B. cn=schema beinhalten weitere Einstellungen zur Konfiguration: Das Objekt cn=schema ist für die Konfiguration der vom slapd verwendeten Standardschemata wie z. B. core, cosine und inetOrgPerson zuständig. Mit den in geschweiften Klammern bei 0 beginnenden Zahlen kann die Ladereihenfolge der Einträge bestimmt werden.
$> ldapsearch -LLL -x -D "cn=config" -W -b cn=config objectClass=* |
| Abb. 2: Anzeige der Konfiguration. |
ldap1:/tmp # cat test.ldif |
| Abb. 3: Änderung des olcThreads-Attributs zur Laufzeit. |
Auch innerhalb der Schemadateien sind die
Objekte nun im LDIF-Format und können
zur Laufzeit durch importieren einer Datei im
LDIF-Format geändert werden. Um administrativen
Zugriff auf die Konfiguration zu erlangen,
muss nun in der Datei /etc/openldap/slapd.d/
In großen Unix-Umgebungen kommt häufig das Produkt sudo zum Einsatz. Das Wort „sudo“ steht hier für „substitute user do“. Um nicht allen Benutzern eines Unix-Systems alle Berechtigungen zu geben, kann der Administrator mit sudo die Berechtigungen einschränken, indem nur bestimmte Kommandos erlaubt sind und festgelegt wird, auf welchem Server sie von wem und unter welcher Benutzerkennung ausgeführt werden dürfen. Dafür schreibt der Benutzer den Befehl sudo vor den eigentlichen Befehl. Ein Beispiel wäre sudo useradd -m user1.
Klassisch wird die Konfiguration in der Datei /etc/sudoers vorgenommen. Von der Herstellerseite ist die Datei zwar so aufgebaut, dass nur eine Datei für alle Systeme gepflegt werden muss. Diese muss aber nach einer Änderung auf die betroffenen Systeme verteilt werden, was vor allem in größeren Umgebungen einen erheblichen Pflegeaufwand verursacht. Dieser Pflegeaufwand wird mit Hilfe von NIS oder anderen Möglichkeiten reduziert. Hier möchten wir aufzeigen, welche Anwendungsmöglichkeiten LDAP bietet, indem wir die sudo-Konfigurationsdaten in unserem LDAP-Verzeichnisdienst pflegen.
Um die sudo-spezifischen Objekte innerhalb des LDAP-Verzeichnisdienstes zu verwalten, muss eine Schemaerweiterung auf den LDAPServern vorgenommen werden. Dazu wird die Schemadatei sudo.schema benötigt, welche von der sudo-Webseite heruntergeladen werden kann. Zusätzlich muss die Schemadatei von OpenLDAP geladen werden. Dies kann entweder über den herkömmlichen Weg include/etc/openldap/schema/sudo.schema innerhalb der Konfigurationsdatei slapd.conf oder über das oben beschriebene Verfahren cn=config gelöst werden.
Nachdem der LDAP-Server mit den Schemaerweiterungen gestartet ist, können nun erste Einträge vorgenommen werden. Dies kann sowohl mit klassischen LDIF-Dateien geschehen, als auch mit Scripting-Verfahren, wie beispielsweise Perl oder einem grafischen LDAP-Browser wie phpLDAPadmin oder dem LDAP Account Manager (LAM).
Auch die Konvertierung einer bestehenden sudo-Konfiguration ist leicht möglich. Mit den Kommandos
export SUDOERS_BASE=ou=SUDOers,dc=ordix,dc=de sudoers2ldif /etc/sudoers > /tmp/sudoers.ldif
dn: ou=SUDOers,dc=ordix,dc=de objectClass: top objectClass: organizationalUnit ou: SUDOers |
| Abb. 4: LDIF-Datei mit der sudo-Konfiguration. |
uri ldap://ldap1.ordix.de sudoers_base ou=SUDOers,dc=ordix,dc=de sudo_debug 2 |
| Abb. 5: Client-Konfiguration in der Datei /etc/ldap.conf. |
kann aus einer bestehenden Konfigurationsdatei eine LDIF-Datei erstellt werden, die dann in den LDAP-Verzeichnisbaum importiert werden kann. Abbildung 4 zeigt ein Beispiel für eine LDIF-basierte Konfiguration, die nun mit dem Kommando ldapadd importiert werden kann.
In diesem Beispiel wird eine separate Organisationseinheit SUDOers angelegt, um die sudo-Konfiguration von anderen Einträgen getrennt zu verwalten. Mit dem Eintrag cn=defaults können globale sudo-Optionen konfiguriert werden, wie beispielsweise das logfile, indem lokal auf dem System die mit Hilfe von sudo ausgeführten Kommandos protokolliert werden.
Mit dem Eintrag cn=%users wird allen Mitgliedern der Gruppe users - außer joe - auf den Servern nameserver1 und nameserver2 das Recht gegeben, das CD-ROMLaufwerk zu mounten bzw. zu unmounten und den Server herunter zu fahren bzw. neu zu starten.
Nun müssen die sudo-Clients von dem LDAP-Server erfahren. Hierzu wird auf dem Client lokal die Datei /etc/ldap.conf bearbeitet bzw. neu angelegt. sudo_debug ist bei der Fehlersuche hilfreich, sollte bei erfolgreichem Betrieb aber auf 0 gesetzt werden. Die Datei sollte dem Benutzer root gehören und auch nur für ihn Leserechte besitzen. Die alte Datei /etc/sudoers könnte jetzt vom System entfernt werden.
Möchte man allerdings einen Fallback-Mechanismus realisieren, welcher bei Netzwerkausfall greift, lässt man sie lokal bestehen. Die Datei wird dann automatisch genutzt, falls der LDAP-Server nicht erreichbar sein sollte. Das Kommando sudo -l sollte nun die Kommandos anzeigen, die der aufrufende Benutzer ausführen darf.
Wie in diesem und dem letzten ORDIX News Artikel berichtet, bietet OpenLDAP 2.3 einige neue Funktionen, die die Administration vor allem von größeren Netzwerken mit mehreren LDAP-Servern erleichtern.
Die in der Ausgabe 4/2007 beschriebenen overlays bieten modulare Möglichkeiten, den LDAP-Server um Funktionen zu erweitern, ohne ihn neu zu kompilieren. Die hier beschriebene Konfiguration zur Laufzeit erweitert die Administration, ohne dass lästige Neustarts der Dienste erforderlich werden.
Die Integration der sudo-Verwaltung ist nur ein Beispiel von vielen, wie man die Konfiguration zentral im LDAP verwaltet. Weitere Möglichkeiten sind zum Beispiel die Pflege der E-Mail-Adressen, die Verwaltung von Radiusbenutzern oder die Verwaltung der DHCP/DNS-Daten innerhalb von LDAP.
Christian Fertsch (info@ordix.de).