Was ist LDAP?

 Diese Seite drucken


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).

Zur Klarstellung:
Was ein Verzeichnis nicht ist......

  • Na toll. Cartoon-Band von ZAK, Lappan Verlag.Ein Verzeichnis ist keine Allzweckdatenbank
    • LDAP unterstützt keine Transaktionssemantik
      (Die darunterliegende Datenbank schon eher)
    • LDAP ist nicht für Aktualisierungen der Einträge optimiert
      (obwohl ja “global” und “frequently updated” ein kleiner Widerspruch ist)
    • LDAP ist nicht relational
    • Es gibt keine Stored Procedures
      (man kann sich aber eine URL stattdessen basteln)
  • Ein Verzeichnis ist kein Dateisystem
    • Ist nicht zum Verstauen von Large Objects (BLOBS, GLOBS etc.) gedacht
      (man kann sich aber darauf verweisen, z.B. per URL )
  • Ein Verzeichnis ist kein Ersatz für eine lokale Dateiablage
    • Verzeichnisse sind dazu gedacht Usern mit nicht-lokaler, unterschiedlichster Herkunft Informationen zur Verfügung zu stellen.
      (Wenn die Info nur für eine Anwendung mit Zugriff aus dem lokalen Netz gedacht ist, ist LDAP unnötig)
  • Ein Verzeichnis ist kein 'Netzwerkmanagement-Tool'
    • Netzwerkmanagement benötigt u.a. das Tracking sich schnell ändernder Zustände von beobachteten Objekten
      (Trotzdem kann statische Information über das Netzwerk in einem Verzeichnis abgelegt werden


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?
LDAP-SErver als Gateway für einen X.500-ServerEin 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.

 
 

Standalone-LDAP-Server 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