Was ist LDAP? |
LDAP - Definition
LDAP ist die Abkürzung für das Lightweight Directory Access Protocol. Wie der Name sagt, unterstützt dieses Protokoll einen Verzeichnisdienst (Directory).
LDAP wurde in den frühen 90ern an der University of Michigan implementiert.
Es gibt verschiedene kommerzielle LDAP-Server.
Mit OpenLDAP gibt es aber auch eine auf der Arbeit von Michigan basierende Open
Source-Implementierung von LDAP. OpenLDAP wird standardmäßig bei
Linux und BSD-Betriebssystemen verwendet und kann mit den meisten UNIX-Systemen
genutzt werden. Wir werden OpenLDAP auch in unserem Workshop verwenden.
![]()
Das Problem: Gewachsene Strukturen
Anwendungen
müssen heute oft nicht nur auf Ressourcen im eigenen Local Area Network
(LAN) oder im Intranet einer Institution zugreifen, sondern auch auf Ressourcen
irgendwo im weiteren Universitätsnetzwerk, bei Projektpartnern oder im
Internet.
Das wilde Wachstum der letzten Jahre hat dazu geführt, dass es in den meisten
Netzen verschiedene, spezialisierte Verzeichnisse mit teilweise redundanten
Informationen gibt, die oft nur schwer gemeinsam genutzt werden können.
Irgendwann ist ein Irrgarten aus Import- und Exportskripten entstanden, der
praktisch nicht mehr wartbar ist.
Gleichzeitig wächst der Wunsch nach zentraler Datenhaltung für neue
Applikationen, die man andererseits vor nicht autorisiertem Zugriff schützen
will.
![]()
Die Lösung: Verzeichnisdienste
Das Wort Verzeichnis verwirrt in diesem Zusammenhang viele Leute, weil ihnen nicht bewusst ist, dass die meisten Netzwerke Verzeichnisse benutzen, oder weil sie denken, LDAP soll jetzt das einzige Verzeichnis im Netzwerk werden.
Tatsächlich sind aber Verzeichnisse Bestandteil des täglichen
Lebens, besonders in der IT-Welt.
Uns allen ist das Konzept eines Telefonbuchs vertraut, im Zusammenhang mit Computern
wird dann aber statt des korrekteren Begriffs Verzeichnis der Terminus Datenbank
benutzt. Dabei gibt es viele Verzeichnisdienste, die im IT-Bereich alltäglich
sind: DNS, NIS, Whois, LDAP, X.500, NDS, Finger, ...
LDAP ist seit einigen Jahren ein heißes Thema für Systemadministratoren. LDAP stellt einen Verzeichnisdienst zur Verfügung, der zur Speicherung und zum Wiederabruf von Informationen über einzelne Personen (z.B. Mitarbeiter) einer Organisation genutzt werden kann. Die Bandbreite der Informationen, die auf diese Weise verfügbar gemacht werden können, ist recht groß: traditionelle Telefon- oder andere institutionelle Verzeichnisse (Lage von Büros, Telefonnummern usw.), Daten von Unix-Benutzer-Accounts, persönlichere Daten, wie private Telefonnummern und Fotografien, zusammen mit weiteren spezifischen Daten. In diesem Artikel wollen wir uns die Dienste ansehen, die LDAP zur Verfügung stellen kann.
![]()
Was ist ein Verzeichnis?
Ein
Verzeichnis ist eine Auflistung von Informationen über Objekte in einer
gewissen Ordnung. Zu jedem Objekt kann man Detailinformationen abfragen.
Beispiel: In einem Telefonbuch sind die Objekte die Personen, die Ordnung ist
alphabetisch, und die Detailinformationen, die man bekommen kann, sind Adresse
und Telefonnummer.
Oft wird der Begriff 'Yellow Pages' benutzt, um die Art zu charakterisieren,
in der ein Verzeichnis benutzt wird. In Wirklichkeit sind Verzeichnisse auf
Computern natürlich viel flexibler als solche auf Papier, weil man ein
Verzeichnis nicht nur nach vorgegebenen Kriterien (Nachnamen in alphabetischer
Ordnung), sondern nach spezifischen eigenen Kriterien durchsuchen kann.
![]()
Was ist der Unterschied zwischen einem LDAP-Verzeichnis und 'normalen' Datenbanken?
Ein
Verzeichnisdienst (Directory Service) ähnelt
in seiner Funktionsweise zwar einer Datenbank (oft wird auch der Begriff Data
Repository benutzt), unterscheidet sich aber von traditionellen relationalen
Datenbanken in folgenden Punkten:
Ein Directory ist mehr auf das Finden und Auslesen
von Informationen spezialisiert als auf das Schreiben immer neuer Informationen.
Beispiel: Ein Telefonbuch wird nur jährlich aufgelegt, eine 'passwd-Datenbank'
wird nur selten geändert, aber beide werden ständig abgefragt.
Suchen ist eine der Hauptoperationen in Verzeichnisdiensten. Ein Verzeichnisdienst
stellt daher fortgeschrittene Suchfeatures
zur Verfügung.
Verzeichnisse müssen in der Lage sein, eine große Anzahl von Suchanfragen
zu verarbeiten; sie sind für den Lesezugriff
optimiert. Schreibzugriff ist oft beschränkt auf die Administratoren
oder die Besitzer einer spezifischen Informationseinheit. Verzeichnisse eignen
sich nicht für das Ablegen von Informationen, die sich häufig ändern.
Beispiel: Die Informationen über Netzwerkdrucker können in einem Verzeichnis
stehen, die sich hochdynamisch ändernden Informationen der Druckerwarteschlangen
gehören nicht hinein.
Verzeichnisdienste sind von vornherein so konzipiert, dass sie
standortunabhängig sind. Wenn ein
Server eine Information lokal nicht vorhält, wird er den Client entweder
' an den zuständigen Kollegen weiterschicken' oder er wird die Client-Anwendung
transparent darauf zugreifen lassen.
Er nutzt die Vorteile von Techniken zur verteilten
Speicherung und Datenreplikation, was eine effiziente Skalierung
erlaubt.
Verzeichnisdienste legen Informationen in Entries ab, nicht in Zeilen einer Tabelle (Records). Eine Entry kann darüber hinaus Attribute haben, was bei einer Datenbank ein Feld wäre. . Entries können alle möglichen Objekte sein: Personen, Drucker, Räume usw. Die grundlegenden Datenstrukturen eines LDAP-Verzeichnisses, insgesamt als Schema bezeichnet, können entsprechend den lokalen Bedürfnissen erweitert werden
Ein Verzeichnis muss keine sicheren
Transaktionen unterstützen (Transaktionen sind Operationen nach
dem Alles-oder-Nichts-Prinzip: Entweder wird ein Aktion vollständig oder
gar nicht ausgeführt).
Da die Aufgabe von Verzeichnissen im Allgemeinen nur die Bewältigung von
Lesezugriffen ist, kommen komplexe Transaktionen nur selten vor. Man hat sich
daher bei der ersten LDAP-Spezifikation darauf geeinigt, dass man kleinere Anomalien
und vorübergehende Inkonsistenzen in Kauf nimmt. Da hinter den meisten
Verzeichnisimplementationen transaktionssichere Datenbanken stehen, müssen
sich aber auch Pessimisten in der Praxis keine großen Sorgen um Anomalien
oder Inkonsistenzen machen.
Verzeichnisse zeichnen sich in der Regel auch durch starke Beschränkungen in der Wahl der Datentypen aus. Ein Verzeichnisdienst für Kundenkontakte wird eventuell ausschließlich Namen, Adressen und Telefonnummern aufnehmen können. Auch diese Beschränkung ist in der Praxis nicht so streng: Die darunter liegenden Datenbanken unterstützen typischerweise möglichst viele Formate.
Für die Suche nach Informationen benutzen Verzeichnisse nicht die für relationale Datenbanken typische Structured Query Language (SQL), sondern haben dafür oft vereinfachte und optimierte Zugangsprotokolle, die nur einfachste Anwendungslogik zulassen.
LDAP hält an offenen Standards fest, um das Zusammenspiel zwischen Implementierungen verschiedener Hersteller sicherzustellen. Genauer gesagt, hält er sich an eine Reihe von so genannten RFCs fest (mehr dazu später).
![]()
Wie kann ein LDAP-Verzeichnis die Arbeit im Netzwerk erleichtern?
Wenn man sich bewusst macht, dass in einem Netzwerk schon alle
möglichen Verzeichnisse nebeneinander existieren, wird einem klar, dass
viele Informationen mehrfach abgelegt sind. Auf 'datenbankchinesisch' sagt man,
dass die Daten nicht normalisiert sind:
Daten müssen an mehreren Orten geändert werden, wenn sich zugehörige
Informationen ändern. Eine Aktualisierung ist nicht nur mühsam und
zeitaufwändig, sondern auch fehlerträchtig. 
Außerdem müssen sich die Administratoren jeder einzelnen Passwortdatenbank Gedanken um eine sichere Passwortpolicy, sichere Transportprotokolle, sichere Autorisierungsmechanismen und die ausreichende Verfügbarkeit des Authentifizierungs- und Autorisierungsdienstes machen. Und wie geht man mit sich wiedersprechenden Sicherheitsrichtlinien um?
Irgendwann wünscht man sich eine Zusammenführung aller
Verzeichnisse - und das ist genau der Einsatzzweck, für den LDAP konzipiert
wurde.
LDAP ermöglicht einfach und schnell:
LDAP erreicht diese Ziele durch folgende Eigenschaften (hier beziehe ich mich auf die Version 3):
![]()
Wieso habe ich noch nichts von LDAP gehört, wenn es so
toll ist?
Na
ja, LDAP ist dann doch nicht ganz das Allheilmittel für alle Netzwerkwehwehchen,
das wir uns wünschen würden. LDAP wird leider nicht so unterstützt,
wie ich es mir wünschen würde. Suns Solaris unterstützt beispielsweise
LDAP und seinen Naming Service; das umfasst aber leider nicht die Verschlüsselung.
Microsoft setzt LDAP intern zwar bereits seit Windows 2000 im Active Directory
ein, ist aber erst mit dem .net-Server auf volle LDAP-Kompatibilität eingeschwenkt.
Viele Hersteller verzichten immer noch auf eine LDAP-Schnittstelle zur User-Authenitfizierung
bei ihren Produkten, und auf der Ebene, wo Entscheidungen getroffen werden,
ist es noch zu wenig bekannt.
Es gibt außerdem noch viel zu wenig Support und Dokumentation auf dem
Einsteigerlevel. Man kann sich natürlich durch die RFCs quälen, aber
gute Einstiegsliteratur ist dünn gesät: Es gibt kaum gute LDAP-Bücher,
und das beste ist 800 Seiten dick. All das führt natürlich dazu dass
sich LDAP nur langsam durchsetzt..
Jetzt werden wir uns dem LDAP-Protokoll genauer widmen, ein bisschen LDAP-Grundwissen erwerben, und zu Übungszwecken ein einfaches LDAP-Verzeichnis mit OpenLDAP aufbauen.
![]()
Was ist LDAP jetzt - ein Protokoll oder ein Verzeichnis?
Wie das P in LDAP schon sagt: LDAP ist ein Kommunikationsprokoll, d.h. LDAP definiert den Transport und das Format von Nachrichten, die zwischen einem Client und einem X.500-artigen Verzeichnis ausgetauscht werden. LDAP definiert nicht das Directory selbst.
Trotzdem wird oft der Begriff LDAP-Directory
gebraucht. Was hat man sich darunter vorzustellen?
Ein
Client-Programm initiiert eine Nachricht, in der es eine LDAP-API aufruft. Ein
X.500-Verzeichnisdienst selbst versteht aber gar keine LDAP-Messages. Und in
der Tat benutzen LDAP Client und X.500-Server verschiedene Kommunikationsprotokolle
(TCP/IP der eine, OSI der andere): Der LDAP-Client braucht einen Gateway-Prozess
(man kann es auch Proxy oder Front-End nennen), der seine Requests an den X.500
Server 'übersetzt' weiterleitet. Und dieser Gateway ist ein LDAP-Server.
Er ist wiederum Client des X.500-Servers, mit dem er über OSI kommuniziert.
Immer
mehr Leute, die gar keinen X.500-Server hatten, wollten auch von den Vorteilen
des LDAP-Protokoll profitieren. Warum also nicht die Informationen direkt im
LDAP-Server ablegen, statt ihn nur als Gateway zu einem x.500-Server zu benutzen?
Damit wäre auch die OSI-Protokollschicht nicht mehr notwendig. Das macht
den ursprünglich ja nur als Proxy gedachten LDAP-Server komplizierter.
Man nennt diese Art LDAP-Server manchmal auch explizit Standalone-LDAP-Server,
weil sie unabhängig von einem X.500-Server arbeiten.
Für den Client spielt es allerdings keine Rolle: er 'redet' nur mit dem
LDAP-Server, egal, wo dieser seine Informationen herholt.
![]()
Petra Haberer Version
1.0.1