Mit diesem Artikel starten wir neben unserer neuen Serie über „Cool Solutions“, eine zweite, in der wir Ihnen kurz und knackig technische Begriffe erläutern. Wir werden in dieser Serie nicht sehr ins Detail gehen, da wir Ihnen in erster Linie ein allgemein besseres, technisches Verständnis der vielen Fachbegriffe, die wir täglich verwenden, geben möchten. Den Anfang machen wir heute mit einer Erklärung zu LDAP und OpenLDAP.
Was ist LDAP / OpenLDAP?
LDAP ist die Abkürzung für „Lightweight Directory Access Protocol“. Ein Protokoll, das definiert wurde, um die Abfrage von Verzeichnisdiensten zu vereinheitlichen. Es ist als Vereinfachung aus dem deutlich umfangreicheren X.500 Standards hervorgegangen und hat sich als de-facto Standard für den Umgang mit Verzeichnisdiensten etabliert.
OpenLDAP versteht sich als Referenzimplementierung für diesen Standard und bringt sowohl eine Serverimplementierung als auch eine Client-Bibliothek für den Zugriff auf LDAP Server mit. Beides kommt in UCS zum Einsatz.
Verzeichnisdienst – Struktur und Objekte
Ein LDAP Server implementiert eine Datenbank, die über das LDAP Protokoll abgefragt werden kann. Wie mit anderen Datenbanken vergleichbar, liegen hier die eigentlichen Informationen im Dateisystem. OpenLDAP als „Datenbankserver“ kümmert sich dabei um die performante Bereitstellung der Daten, u. a. durch die Indizierung der Inhalte. Jedes „Objekt“ in der Datenbank entspricht dabei einem Datensatz, der zum Beispiel alle Eigenschaften („Attribute“) eines Benutzers speichert.
In der LDAP Notation sieht das dann beispielsweise so aus:
dn: uid=steuwer,cn=users,dc=univention,dc=local objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: posixAccount objectClass: top uid: steuwer mail: steuwer@univention.de displayName: Ingo Steuwer sn: Steuwer homeDirectory: /home/steuwer givenName: Ingo title: Head of Professional Services o: Univention GmbH
Ein Datensatz besteht immer aus Attribut-Wert-Paaren, z. B. „sn: Steuwer
“ für den Nachnamen (surename / sn). Dabei gibt es im Kontext von LDAP wiederum spezielle Attribute wie zum Beispiel:
objectClass:
Das Attribut „Objektklasse“ definiert, welche Art von Datensatz das Objekt repräsentiert. Jede der zugeordneten Objektklassen erlaubt dabei eine Menge von Attributen. Welche Attribute das sind und welche Syntax sie unterstützen, wird wiederum durch „Schemata“ definiert, die dem LDAP Server bekannt gemacht werden.dn:
Der „Distinguished Name“ (DN) definiert die Position des Objektes im Verzeichnisdienst. Das Verzeichnis ist dabei wie ein Baum aufgebaut, vergleichbar mit den meisten Dateisystemen. Die Reihenfolge in einem DN ist dabei vom Blatt zur Wurzel, also genau „andersherum“, als man es vom Pfad einer Datei im Dateisystem gewohnt ist. In unserem Beispiel ist das Objekt durch „uid=steuwer
“ referenziert, der Pfad dann durch die Elemente „cn=users
“ (einem sogenannten Container) und „dc=univention,dc=local
“ (der LDAP Basis, also der „Wurzel“ des Baums).
Wozu dienen Verzeichnisdienste?
Etabliert haben sich Verzeichnisdienste zur Speicherung von Infrastrukturinformationen und vor allem von Identitäten. Nicht zuletzt durch den verbreiteten Einsatz von Active Directory ist die Ablage umfangreicher Informationen zu Anwendern (Namen, Kontaktinformationen etc.) sowie der zugehörigen Authentifikations- und Authorisationsdaten zum Standard geworden. In diesem Kontext liegt ein wesentlicher Vorteil von LDAP gegenüber SQL-Datenbanken in den deutlich detaillierter definierbaren Zugriffsregeln durch Anwender auf Daten im Verzeichnisdienst.
Zugriff auf die Daten
Für den Zugriff auf die Daten stehen diverse LDAP Clients zur Verfügung. Unter UCS nutzt man meist die entsprechenden Module in der Management Console.
Im folgenden Beispiel sei aber eine Abfrage am Kommandozeilentool „ldapsearch
“ illustriert.
Die wichtigsten Parameter sind:
- LDAP Server: Üblicherweise wird der LDAP Server als URI angegeben – für eine per SSL/TLS-verschlüsselte Verbindung in der Form „LDAPS://<FQDN>“
- LDAP Basis: LDAP Server unterstützen den Betrieb verschiedener „Datenpartitionen“, die über ihre LDAP Basis unterschieden werden. In UCS Umgebungen gibt es nur eine LDAP Basis, die auf UCS Systemen vorkonfiguriert ist. Im obigen Beispiel lautet diese „
dc=univention,dc=local
„, daher erfolgt die Angabe der Basis in der Konfigurationsdatei. Werden die Tools jedoch für den Zugriff auf andere LDAP Server verwendet, muss eine dort gültige Basis angegeben werden. - Authentifikation: LDAP Server geben bei anonymen Zugriffen meist keine Ergebnisse zurück. Im Gegensatz zu anderen Datenbanken gibt es dabei auch keine Fehlermeldungen, also kein „Access Denied“ o. ä., sondern schlicht keine Ergebnisse. Erst eine Authentifikation, z. B. durch die Angabe eines Benutzerkontos im LDAP als DN sowie dessen Passwort, ermöglicht den Zugriff.
- Filter: Die Suche nach Objekten im LDAP erfolgt über „Filter“. Üblich ist eine Kombination aus einer Objektklasse (z. B. für „ich suche nach einem User“ über „objectClass=person“) und einem Attribut (z. B. „uid=Administrator“). Um die beiden Beispiele zu einem Filter zu verknüpfen, werden diese durch „()“ eingefasst und durch ein vorangestelltes „&“ verbunden: „
(&(objectClass=person)(uid=Administrator))
„
Als voller Aufruf des Kommandozeilen-Tools „ldapsearch
“ ergibt sich dann:
ldapsearch -H LDAPS://ucs-master.univention.local \ -x -D "uid=steuwer,cn=users,dc=univention,dc=local" -w "geheim"\ "(&( objectClass=person)(uid=Administrator))"
Die Option „-H
“ erlaubt die Angabe einer LDAP URI zur Definition des zu verwendenden LDAP Servers. Bei der hier gewählten Angabe mit „LDAPS
“ wird die Verbindung per SSL verschlüsselt. Dazu ist wichtig, dass die Zertifikate bekannt sind und der Server mit dem kompletten Domänennamen („fully qualified domain name“ / FQDN) angegeben wurde. Mit dem Parameter „-x
“ wird ein einfacher LDAP Bind als Authentifikationsverfahren gewählt und über „-D
“ und „-w
“ Benutzer-DN und Passwort übergeben. Der Filter sucht dann nach dem Benutzerkonto von „Administrator“ – für ihn ist kein führender Optionbuchstabe erforderlich.
Vereinfachungen in UCS mit „univention-ldapsearch“
UCS bietet auf allen Systemen das Kommandozeilen-Tool „univention-ldapsearch
„. Damit ist es „root“ Benutzern möglich, mit dem Account des aktuellen UCS Systems auf das LDAP zuzugreifen. Das Tool nutzt im Hintergrund „ldapsearch
„, übergibt aber die korrekten Werte für LDAP Server, LDAP Basis und Authentifikation. Es reicht also die Angabe des LDAP Filters für eine Suche:
univention-ldapsearch "(&( objectClass=person)(uid=Administrator))"
Weiterführende Informationen
Wir hoffen, Sie haben eine Vorstellung davon erhalten, was sich hinter den Begriffen LDAP / OpenLDAP verbirgt.
Für nähere Informationen zu den Hintergründen von LDAP finden Sie einen guten Einstieg auf Wikipedia. Ein erster Anlaufpunkt für den konkreten Einsatz von OpenLDAP kann für Sie die Dokumentation auf der OpenLDAP Projektseite sein.
Neben den guten Man-Pages („man ldapsearch“) etc. gibt es auch zahlreiche Bücher. Und zu guter Letzt erhalten Sie einen fundierten Einstieg in die UCS Implementierung auch immer über unsere Dokumentation.
Kommentare
Lothar Lechtenberg
vielen Dank, sehr interessant. Besonders die einleitenden Erklärungen zu Beginn. Bei uns ist oft einfach von LDAP-Kennung die Rede. Jetzt kann ich mir etwas mehr darunter vorstellen, …