Lightweight Directory Access Protocol: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „Man-Pages“ durch „Man-Page“
 
(38 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:


== Beschreibung ==
== Beschreibung ==
{{Netzwerk-TCP-UDP-IP-Anwendungsprotokoll|LDAP}}
; '''Lightweight Directory Access Protocol''' ('''LDAP''')
* deutsch etwa ''Leichtgewichtiges Verzeichniszugriffsprotokoll''
* [[De-facto-Standard|De-facto-Industriestandard]] für [[Authentifizierung]], [[Autorisierung]] sowie Adress- und [[Benutzerverzeichnis]]se.
* Die meisten Softwareprodukte, die mit Benutzerdaten umgehen müssen und am Markt relevant sind, unterstützen LDAP.


Das '''Lightweight Directory Access Protocol''' ('''LDAP'''), deutsch etwa ''Leichtgewichtiges Verzeichniszugriffsprotokoll'', ist ein [[Netzwerkprotokoll]] zur Abfrage und Änderung von Informationen verteilter [[Verzeichnisdienst]]e. Seine aktuelle und dritte Version ist in [[Request for Comments|RFC]] 4510 bis RFC 4532 spezifiziert, das eigentliche Protokoll in RFC 4511.
{| class="wikitable"
|+LDAP im TCP/IP-Protokollstapel:
|'''Anwendung'''
| colspan="5" |'''LDAP'''
|-
|Transport
| colspan="2" |UDP
| colspan="3" |TCP
|-
|Internet
| colspan="5" |IP (IPv4, IPv6)
|-
| rowspan="2" |Netzzugang
| rowspan="2" |Ethernet
| rowspan="2" |Token
Bus
| rowspan="2" |Token
Ring
| rowspan="2" |FDDI
| rowspan="2" |…
|}


LDAP ist der [[De-facto-Standard|De-facto-Industriestandard]] für [[Authentifizierung]], [[Autorisierung]] sowie Adress- und [[Benutzerverzeichnis]]se. Die meisten Softwareprodukte, die mit Benutzerdaten umgehen müssen und am Markt relevant sind, unterstützen LDAP.
; [[Port (Protokoll)|Standard-Ports]]  
 
* ''389'' für ungesicherte sowie nur mit [[STARTTLS]] gesicherte Verbindungen
Der Standard[[Port (Protokoll)|port]] ist:
* ''636'' für mit [[Transport Layer Security|TLS]] gesicherte Verbindungen (LDAPS).
* ''389'' für ungesicherte sowie nur mit [[STARTTLS]] gesicherte Verbindungen<ref>{{Internetquelle |url=https://tools.ietf.org/html/rfc4513#section-3.1.1 |titel=&#82;FC 4513 - Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms |hrsg=Network Working Group |abruf=2021-02-11 |sprache=en}}</ref>
* ''636'' für mit [[Transport Layer Security|TLS]] gesicherte Verbindungen&nbsp;(LDAPS).<ref>{{Literatur |Autor=Expert(s) |Titel=Service Name and Transport Protocol Port Number Registry |Hrsg=iana.org |Online=https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt}}</ref>


== Überblick ==
== Überblick ==
LDAP basiert auf dem [[Client-Server-Modell]]<ref>{{Internetquelle |autor=Justin Parisi |url=https://whyistheinternetbroken.wordpress.com/2015/07/29/ldap-servers-clients/ |titel=LDAP::LDAP Servers and Clients – Part 5 |werk=Why Is The Internet Broken? |datum=2015-07-29 |abruf=2018-02-26 |sprache=en}}</ref> und wird bei Verzeichnisdiensten (englisch ''directories'' oder ''directory services'') eingesetzt.<ref>{{Internetquelle |url=https://www.pks.mpg.de/~mueller/docs/suse9.2/suselinux-adminguide_de/html/ch22s09.html |titel=Kapitel 22. Grundlagen der Vernetzung / 22.9. LDAP – Ein Verzeichnisdienst |werk=Administrationshandbuch |hrsg=SUSE LINUX |abruf=2018-02-26}}</ref> Es beschreibt die Kommunikation zwischen dem ''LDAP-Client'' und dem ''Verzeichnis-''(''Directory-'')Server. Aus einem solchen Verzeichnis können objektbezogene Daten, z.&nbsp;B. [[Personendaten]] oder [[Konfiguration (Computer)|Rechnerkonfiguration]]en, ausgelesen werden.<ref>{{Internetquelle |autor=Frank-Michael Schlede, Thomas Bär / Andreas Donner |url=https://www.ip-insider.de/was-ist-ldap-lightweight-directory-access-protocol-a-581204/ |titel=Was ist LDAP (Lightweight Directory Access Protocol)? |werk=IP Insider |hrsg=Vogel IT-Medien GmbH |datum=2017-08-01 |abruf=2018-02-26}}</ref> Die Kommunikation erfolgt auf Basis von Abfragen.<ref>{{Internetquelle |autor=Holger Kattner |url=https://www.tecchannel.de/a/ldap-abfragen-erstellen,464680 |titel=LDAP-Abfragen erstellen |werk=Computerwoche - TEC Workshop |hrsg=IDG Business Media GmbH |datum=2006-09-01 |abruf=2018-02-26}}</ref>
LDAP basiert auf dem [[Client-Server-Modell]] und wird bei Verzeichnisdiensten (englisch ''directories'' oder ''directory services'') eingesetzt. Es beschreibt die Kommunikation zwischen dem ''LDAP-Client'' und dem ''Verzeichnis-''(''Directory-'')Server.  
* Aus einem solchen Verzeichnis können objektbezogene Daten, z.&nbsp;B.&nbsp;[[Personendaten]] oder [[Konfiguration (Computer)|Rechnerkonfiguration]]en, ausgelesen werden.


Hierbei ist „[[Verzeichnis]]“ im Sinne beispielsweise eines Telefonbuches gemeint und ''nicht'' im Sinne von „Dateiordner“.
Hierbei ist „[[Verzeichnis]]“ im Sinne beispielsweise eines Telefonbuches gemeint und ''nicht'' im Sinne von „Dateiordner“.


Das Verzeichnis kann beispielsweise ein Adressbuch enthalten: In seinem [[E-Mail-Programm|E-Mail-Client]] stößt ein Nutzer die Aktion ''Suche die Mailadresse von Joe User'' an. Der E-Mail-Client formuliert eine LDAP-Abfrage an das Verzeichnis, das die Adressinformationen bereitstellt. Das Verzeichnis formuliert die Antwort und übermittelt sie an den Client: ''joe.user@example.org''.
Das Verzeichnis kann beispielsweise ein Adressbuch enthalten: In seinem [[E-Mail-Programm|E-Mail-Client]] stößt ein Nutzer die Aktion ''Suche die Mailadresse von Joe User'' an.  
* Der E-Mail-Client formuliert eine LDAP-Abfrage an das Verzeichnis, das die Adressinformationen bereitstellt.  
* Das Verzeichnis formuliert die Antwort und übermittelt sie an den Client: ''joe.user@example.org''.


LDAP bietet alle Funktionen, die für eine solche Kommunikation notwendig sind:
LDAP bietet alle Funktionen, die für eine solche Kommunikation notwendig sind:
* Anmeldung am Server (''bind'')
* Anmeldung am Server (''bind'')
* die Suchabfrage (''Suche mir bitte alle Informationen zum Benutzer mit dem Namen „Joe&nbsp;User“'')
* die Suchabfrage (''Suche mir bitte alle Informationen zum Benutzer mit dem Namen „Joe User“'')
* die Modifikation der Daten (''Ändere das Passwort des Benutzers Joe&nbsp;User'').
* die Modifikation der Daten (''Ändere das Passwort des Benutzers Joe User'').


Mittlerweile hat sich im [[Systemadministrator|administrativen]] Sprachgebrauch eingebürgert, dass man von einem ''LDAP-Server'' spricht,<ref>{{Internetquelle |url=https://www.ldap.com/choosing-an-ldap-server |titel=Choosing an LDAP Server |werk=LDAP.com |hrsg=UnboundID |datum=2015  |archiv-url=https://web.archive.org/web/20180227040005/https://www.ldap.com/choosing-an-ldap-server |archiv-datum=2018-02-27  |abruf=2018-02-26 |sprache=en}}</ref> wenn man einen Directory-Server meint, dessen Datenstruktur der LDAP-Spezifikation entspricht und der über das LDAPv3-Protokoll, das in RFC&nbsp;2251 festgelegt wurde, Daten austauschen kann.
Mittlerweile hat sich im [[Systemadministrator|administrativen]] Sprachgebrauch eingebürgert, dass man von einem ''LDAP-Server'' spricht, wenn man einen Directory-Server meint, dessen Datenstruktur der LDAP-Spezifikation entspricht und der über das LDAPv3-Protokoll, das in RFC 2251 festgelegt wurde, Daten austauschen kann.


Neuere [[Implementierung #Softwaretechnik|Implementierung]]en, die über RFC&nbsp;2251 hinausgehen, indem sie zusätzlich die [[Replikation (Datenverarbeitung)|Replikation]] der Daten zwischen verschiedenen Verzeichnissen berücksichtigen, sind Gegenstand für eine mögliche Erweiterung des Protokolls.<ref>{{Internetquelle |url=https://openldap.org/doc/admin24/replication.html |titel=18. Replication |werk=OpenLDAP |hrsg=OpenLDAP Foundation |datum=2011 |abruf=2018-02-26 |sprache=en}}</ref>
Neuere [[Implementierung #Softwaretechnik|Implementierung]]en, die über RFC 2251 hinausgehen, indem sie zusätzlich die [[Replikation (Datenverarbeitung)|Replikation]] der Daten zwischen verschiedenen Verzeichnissen berücksichtigen, sind Gegenstand für eine mögliche Erweiterung des Protokolls.


== Geschichte ==
== Geschichte ==
LDAP wurde an der [[University of Michigan|Universität von Michigan]]&nbsp;(UMich) entwickelt und 1993 erstmals im RFC&nbsp;1487 vorgeschlagen.<ref>{{Internetquelle |url=https://idmdude.com/2012/04/13/the-most-complete-history-of-directory-services-you-will-ever-find/ |titel=The Most Complete History of Directory Services You Will Ever Find |datum=2012-04-13 |abruf=2018-02-26 |sprache=en}}</ref> Gleichzeitig stellte die&nbsp;UMich die erste Serverimplementierung vor, die heute als „UMich-LDAP“ bekannt ist.
; LDAP wurde an der [[University of Michigan|Universität von Michigan]] (UMich) entwickelt
* 1993 erstmals im RFC 1487 vorgeschlagen. Gleichzeitig stellte die UMich die erste Serverimplementierung vor, die heute als „UMich-LDAP“ bekannt ist.


LDAP ist eine vereinfachte ("''lightweight''") Alternative zum Directory Access Protocol&nbsp;(DAP), das als Teil des [[X.500]]-Standard spezifiziert ist.<ref>{{Internetquelle |autor=Petra Haberer |url=http://www.mitlinx.de/ldap/index.html?http://www.mitlinx.de/ldap/ldap_geschichte.htm |titel=Geschichte und Versionen von LDAP - 'Leightweight'-Zugang zu X.500 |werk=LDAP verstehen |hrsg=MitLinX Internetdienstleistungen |abruf=2018-02-26}}</ref> Der X.500-Standard ist sehr umfangreich und setzt auf einem vollständigen [[OSI-Modell|ISO/OSI-Stack]] auf, was die Implementierung schwierig und hardwareintensiv machte.
: LDAP ist eine vereinfachte ("''lightweight''") Alternative zum Directory Access Protocol (DAP)
* das als Teil des [[X.500]]-Standard spezifiziert ist. Der X.500-Standard ist sehr umfangreich und setzt auf einem vollständigen [[OSI-Modell|ISO/OSI-Stack]] auf, was die Implementierung schwierig und hardwareintensiv machte.


LDAP wurde mit dem Ziel entwickelt, Verzeichnisdienste einfacher und somit populärer zu machen. LDAP setzt auf einen [[TCP/IP-Referenzmodell|TCP/IP-Stack]] auf und implementiert nur eine Auswahl der DAP-Funktionen und -[[Datentyp]]en.<ref>{{Internetquelle |url=https://msdn.microsoft.com/en-us/library/aa367036(v=vs.85).aspx |titel=About Lightweight Directory Access Protocol - What is LDAP? |werk=Microsoft Developer Network (MSDN) |hrsg=Microsoft |abruf=2018-02-26 |sprache=en}}</ref> Dadurch ließ sich LDAP auch auf [[Arbeitsplatzrechner]]n der frühen 1990er&nbsp;Jahre implementieren und gewann eine breite Anwendungsbasis.
; LDAP wurde mit dem Ziel entwickelt, Verzeichnisdienste einfacher und somit populärer zu machen.  
* LDAP setzt auf einen [[TCP/IP-Referenzmodell|TCP/IP-Stack]] auf und implementiert nur eine Auswahl der DAP-Funktionen und -[[Datentyp]]en. Dadurch ließ sich LDAP auch auf [[Arbeitsplatzrechner]]n der frühen 1990er Jahre implementieren und gewann eine breite Anwendungsbasis.


== LDAP und X.500 ==
== LDAP und X.500 ==
LDAP ist ein [[Speicherzugriff|Zugriff]]smechanismus gemäß&nbsp;X.500 und äußerlich auf dessen Dienst- und [[Datenmodell]]e festgelegt.<ref name="RFC 4510">{{RFC-Internet |Autor=Kurt Zeilenga |RFC=4510 |Titel=Lightweight Directory Access Protocol (LDAP): Technical Specification Road Map |Seite=2 |Datum=2006-06 |Standard=Track |Obsoletes=3771 |Kommentar=[[Internet Engineering Task Force]]}}</ref> Im Hintergrund jedoch lässt LDAP alles offen und jegliches Verzeichnissystem zu. Es gibt auch keine Festlegung vom&nbsp;LDAP auf einen bestimmten [[Front-End und Back-End|Unterbau]] wie&nbsp;[[Transmission Control Protocol|TCP]] und&nbsp;[[User Datagram Protocol|UDP]] oder&nbsp;[[Internet Protocol|IP]].
LDAP ist ein [[Speicherzugriff|Zugriff]]smechanismus gemäß X.500 und äußerlich auf dessen Dienst- und [[Datenmodell]]e festgelegt. Im Hintergrund jedoch lässt LDAP alles offen und jegliches Verzeichnissystem zu.  
* Es gibt auch keine Festlegung vom LDAP auf einen bestimmten [[Front-End und Back-End|Unterbau]] wie [[Transmission Control Protocol|TCP]] und [[User Datagram Protocol|UDP]] oder [[Internet Protocol|IP]].


Wo&nbsp;X.500 in seinem Directory Access Protocol&nbsp;(DAP) mehrere aufeinander aufbauende Nachrichten erfordert, kann im&nbsp;LDAP eine einzige zusammengefasste Nachricht genügen.<ref name="RFC 4511">{{RFC-Internet |Autor=Jim Sermersheim |RFC=4511 |Titel=Lightweight Directory Access Protocol (LDAP): The Protocol |Seite=5 |Datum=2006-06 |Standard=Track |Obsoletes=3771 |Errata=1}}</ref>
Wo X.500 in seinem Directory Access Protocol (DAP) mehrere aufeinander aufbauende Nachrichten erfordert, kann im LDAP eine einzige zusammengefasste Nachricht genügen.


== Funktionsweise ==
== Funktionsweise ==
Zeile 46: Zeile 74:


=== LDAP-Verzeichnis ===
=== LDAP-Verzeichnis ===
Die [[Datenstruktur]] eines LDAP-Verzeichnisses ist durch einen [[Baum (Graphentheorie)|hierarchischen Baum]] mit [[Wurzel (Graphentheorie)|Wurzel]]n, Zweigen und [[Blätter und innere Knoten in der Graphentheorie|Blättern]] gegeben.<ref>{{Internetquelle |autor=Margaret Rouse |url=http://www.searchnetworking.de/definition/LDAP-Lightweight-Directory-Access-Protocol |titel=LDAP (Lightweight Directory Access Protocol) |werk=Search Networkling.de |hrsg=TechTarget Germany GmbH |datum=2014-06 |abruf=2018-02-26}}</ref> Dieser Baum wird auch ''Directory Information Tree'' (DIT) genannt.<ref>{{Internetquelle |url=https://docs.oracle.com/cd/E19455-01/806-5580/6jej518p7/index.html |titel=Directory Information Tree |werk=LDAP Setup and Configuration Guide |hrsg=Oracle Corporation |datum=2010 |abruf=2018-02-26 |sprache=en}}</ref> Die Wurzel (''root'', ''suffix'') ist das oberste Daten[[Objekt (Programmierung)|objekt]], unter ihm verzweigen sich die höheren Strukturen.<ref>{{Internetquelle |url=https://www.ldap.com/the-directory-information-tree |titel=DIT and the LDAP Root DSE |werk=LDAP.com |hrsg=UnboundID |datum=2015  |archiv-url=https://web.archive.org/web/20180227035951/https://www.ldap.com/the-directory-information-tree |archiv-datum=2018-02-27    |abruf=2018-02-26 |sprache=en}}</ref>
Die [[Datenstruktur]] eines LDAP-Verzeichnisses ist durch einen [[Baum (Graphentheorie)|hierarchischen Baum]] mit [[Wurzel (Graphentheorie)|Wurzel]]n, Zweigen und [[Blätter und innere Knoten in der Graphentheorie|Blättern]] gegeben.


Beispiel: Wird ein LDAP-Verzeichnis in einem Unternehmen mit dem Namen ''[[ACME]]'' eingesetzt, so kann die ''Organisation'' als Wurzel definiert werden: ''o=acme''.
Beispiel: Wird ein LDAP-Verzeichnis in einem Unternehmen mit dem Namen ''[[ACME]]'' eingesetzt, so kann die ''Organisation'' als Wurzel definiert werden: ''o=acme''.
Zeile 54: Zeile 82:
Gruppen können in anderen Zweigen unterhalb der Wurzel hinterlegt werden: ''ou=Gruppen,o=acme''
Gruppen können in anderen Zweigen unterhalb der Wurzel hinterlegt werden: ''ou=Gruppen,o=acme''


Damit die Organisation der Daten nicht willkürlich geschieht, verwendet jedes LDAP-Verzeichnis eine bestimmte, genormte und gegebenenfalls erweiterte Struktur. Die Struktur wird durch das verwendete [[Schema (Informatik)|Schema]] definiert.<ref>{{Internetquelle |autor=Petra Haberer |url=http://www.mitlinx.de/ldap/index.html?http://mitlinx.de/ldap/ldap_schema.htm |titel=Schema, Objektklassen und Verzeichniseinträge |werk=LDAP Objektklassen und Schemas |hrsg=mitlinx.de |abruf=2018-02-28}}</ref> Ein LDAP-Schema definiert jeweils Objekt-[[Klasse (Objektorientierung)|Klasse]]n mit ihren [[Attribut (Programmierung)|Attribut]]en, z.&nbsp;B. die Klasse ''person'' oder die Klasse ''organisation''.
Damit die Organisation der Daten nicht willkürlich geschieht, verwendet jedes LDAP-Verzeichnis eine bestimmte, genormte und gegebenenfalls erweiterte Struktur.  
* Die Struktur wird durch das verwendete [[Schema (Informatik)|Schema]] definiert. Ein LDAP-Schema definiert jeweils Objekt-[[Klasse (Objektorientierung)|Klasse]]n mit ihren [[Attribut (Programmierung)|Attribut]]en, z.&nbsp;B.&nbsp;
* die Klasse ''person'' oder die Klasse ''organisation''.


Die Verzeichniseinträge heißen LDAP-''Objekte''.<ref>{{Internetquelle |autor=Philipp Föckeler |url=http://www.selfadsi.de/search.htm |titel=LDAP Objekte im Verzeichnis suchen (ADO) |werk=SelfADSI - SelfADSI ADSI Scripting / LDAP Scripting Tutorial |abruf=2018-03-01}}</ref> Jedes Objekt gehört zu mindestens einer, in der Regel aber zu mehreren Klassen.<ref>{{Internetquelle |autor=Thomas Bendler, Steffen Dettmer |url=http://www.selflinux.org/selflinux/html/ldap02.html |titel=2 Eine kleine Einführung in LDAP |werk=Das Lightweight Directory Access Protocol |abruf=2018-03-01}}</ref> So sind für die Daten einer Person, ihrer E-Mail-Adresse und ihrer Passwörter nicht etwa drei Objekte notwendig, sondern dasselbe Objekt gehört zu drei Klassen. Diese könnten in diesem Beispiel person, inetOrgPerson und [[Portable Operating System Interface|POSIX]]-[[Benutzerkonto]] heißen.
Die Verzeichniseinträge heißen LDAP-''Objekte''. So sind für die Daten einer Person, ihrer E-Mail-Adresse und ihrer Passwörter nicht etwa drei Objekte notwendig, sondern dasselbe Objekt gehört zu drei Klassen.  
* Diese könnten in diesem Beispiel person, inetOrgPerson und [[Portable Operating System Interface|POSIX]]-[[Benutzerkonto]] heißen.


Es gibt drei Arten von Objektklassen:
Es gibt drei Arten von Objektklassen:
Zeile 63: Zeile 94:
# Zu guter Letzt existieren noch [[abstrakte Klasse|abstrakte]] [[Basisklasse]]n, von denen keine Objekte, sondern nur untergeordnete Basisklassen erzeugt werden können.
# Zu guter Letzt existieren noch [[abstrakte Klasse|abstrakte]] [[Basisklasse]]n, von denen keine Objekte, sondern nur untergeordnete Basisklassen erzeugt werden können.


Jedes Objekt ist eigenständig und aus Attributen zusammengesetzt.<ref>{{Internetquelle |autor=Philipp Föckeler |url=http://www.selfadsi.de/read.htm |titel=LDAP Objekt-Attribute lesen |werk=SelfADSI - SelfADSI ADSI Scripting / LDAP Scripting Tutorial |abruf=2018-03-01}}</ref> Ein einzelnes Objekt wird eindeutig durch den ''Distinguished Name''&nbsp;(DN) identifiziert,<ref>{{Internetquelle |autor=Philipp Föckeler |url=http://www.selfadsi.de/ldap-path.htm |titel=LDAP Pfadnamen - Distinguished Names |werk=SelfADSI - SelfADSI ADSI Scripting / LDAP Scripting Tutorial |abruf=2018-03-01}}</ref> z.&nbsp;B. ''uid=juser,ou=People,ou=webdesign,c=de,o=acme''. Dieser setzt sich aus einzelnen ''Relative Distinguished Names''&nbsp;(RDN) zusammen.<ref>{{Internetquelle |autor=Oracle |url=https://docs.oracle.com/cd/E19182-01/820-6573/ghusi/index.html |titel=Distinguished Names and Relative Distinguished Names |werk=Understanding the LDAP Binding Component |abruf=2018-03-02 |sprache=en}}</ref>
Jedes Objekt ist eigenständig und aus Attributen zusammengesetzt. z.&nbsp;B.&nbsp;''uid=juser,ou=People,ou=webdesign,c=de,o=acme''.  
* Dieser setzt sich aus einzelnen ''Relative Distinguished Names'' (RDN) zusammen.


Eine andere Schreibweise für den&nbsp;DN ist der ''[[Kanonischer Name|canonical name]]'', der keine Attribut-Tags wie&nbsp;''ou'' oder&nbsp;''c'' enthält und bei dem die Trennung zwischen den&nbsp;RDNs durch Schrägstriche erfolgt;<ref>{{Internetquelle |autor=Microsoft |url=https://msdn.microsoft.com/de-de/library/ms675436(v=vs.85).aspx |titel=Canonical-Name attribute |werk=Micorosoft Developer Network (MSDN) |abruf=2018-03-02 |sprache=en}}</ref> außerdem beginnt die Reihenfolge, im Gegensatz zum&nbsp;DN, mit dem obersten Eintrag, also z.&nbsp;B. ''acme/de/webdesign/People/juser''.
Eine andere Schreibweise für den DN ist der ''[[Kanonischer Name|canonical name]]'', der keine Attribut-Tags wie ''ou'' oder ''c'' enthält und bei dem die Trennung zwischen den RDNs durch Schrägstriche erfolgt; außerdem beginnt die Reihenfolge, im Gegensatz zum DN, mit dem obersten Eintrag, also z.&nbsp;B.&nbsp;''acme/de/webdesign/People/juser''.


Jedes Attribut eines Objekts hat einen bestimmten [[Datentyp|Typ]] und einen oder mehrere Werte. Die Typenbezeichnungen der Attribute sind meist einfach zu merkende Kürzel, z.&nbsp;B.:
Jedes Attribut eines Objekts hat einen bestimmten [[Datentyp|Typ]] und einen oder mehrere Werte.  
* Die Typenbezeichnungen der Attribute sind meist einfach zu merkende Kürzel, z.&nbsp;B.&nbsp;:
* ''cn'' für ''common name''
* ''cn'' für ''common name''
* ''sn'' für ''surname'' (Nachname)
* ''sn'' für ''surname'' (Nachname)
Zeile 74: Zeile 107:
* ''c'' für ''country''
* ''c'' für ''country''
* ''mail'' für ''e-mail address''.
* ''mail'' für ''e-mail address''.
Die erlaubten Werte eines Attributs sind vom Typ abhängig. So könnte ein ''mail''-Attribut die Adresse ''hans.wurst@example.com'' enthalten, ein ''jpegPhoto''-Attribut dagegen würde ein Foto als [[Binärdatei|binäre]] Daten im [[JPEG File Interchange Format|JPEG-Format]] speichern. Die in der Objektklasse definierten Attribute können entweder obligatorisch (''mandatory'') oder optional sein.
Die erlaubten Werte eines Attributs sind vom Typ abhängig.  
* So könnte ein ''mail''-Attribut die Adresse ''hans.wurst@example.com'' enthalten, ein ''jpegPhoto''-Attribut dagegen würde ein Foto als [[Binärdatei|binäre]] Daten im [[JPEG File Interchange Format|JPEG-Format]] speichern.  
* Die in der Objektklasse definierten Attribute können entweder obligatorisch (''mandatory'') oder optional sein.


Die Objekte werden in einer hierarchischen Struktur gespeichert, die politische, geographische oder organisatorische Grenzen widerspiegelt. Die größten Einheiten werden an die Wurzel des [[Verzeichnisbaum]]es gestellt, der sich nach unten immer weiter auffächert. Während Objekte, die selbst Objekte enthalten, als ''Containerobjekte'' bezeichnet werden, heißen die „Enden“ des Baumes ''Blattobjekte''.<ref>{{Internetquelle |autor=Patrick Schnabel |url=https://www.elektronik-kompendium.de/sites/net/0905011.htm |titel=Verzeichnisdienste (X.500) - Objekte (X.500) |werk=Elektronik Kompendium |abruf=2018-03-02}}</ref>
Die Objekte werden in einer hierarchischen Struktur gespeichert, die politische, geographische oder organisatorische Grenzen widerspiegelt.  
* Die größten Einheiten werden an die Wurzel des [[Verzeichnisbaum]]es gestellt, der sich nach unten immer weiter auffächert.  
* Während Objekte, die selbst Objekte enthalten, als ''Containerobjekte'' bezeichnet werden, heißen die „Enden“ des Baumes ''Blattobjekte''.


[[Datei:datenstruktur.png|mini|Baumstruktur der LDAP-Inhalte]]
[[Datei:datenstruktur.png|mini|Baumstruktur der LDAP-Inhalte]]


Wenn einzelne LDAP-Server für einzelne Teile des Verzeichnisbaumes zuständig sind, spricht man von ''Partitionen''.<ref>{{Internetquelle |autor=The Apache Software Foundation |url=http://directory.apache.org/apacheds/basic-ug/1.4.3-adding-partition.html |titel=1.4.3 - Adding your own partition |werk=Apache Directory |datum=2018 |abruf=2018-03-02}}</ref> Stellt ein Client eine Anfrage, für die der Server nicht zuständig ist, so kann der Server den Client an einen anderen Server verweisen.
Wenn einzelne LDAP-Server für einzelne Teile des Verzeichnisbaumes zuständig sind, spricht man von ''Partitionen''. Stellt ein Client eine Anfrage, für die der Server nicht zuständig ist, so kann der Server den Client an einen anderen Server verweisen.


LDAP-Server lassen sich [[Redundanz (Technik)|redundant]] aufbauen. Hierzu wird oft eine [[Master-Slave]]-Konfiguration verwendet. Versucht ein Client, Daten auf einem Slave-Server zu ändern, so wird er an den Master verwiesen; die Änderungen auf dem Master-Server werden dann an alle Slave-Server weitergegeben.
LDAP-Server lassen sich [[Redundanz (Technik)|redundant]] aufbauen.  
* Hierzu wird oft eine [[Master-Slave]]-Konfiguration verwendet.  
* Versucht ein Client, Daten auf einem Slave-Server zu ändern, so wird er an den Master verwiesen; die Änderungen auf dem Master-Server werden dann an alle Slave-Server weitergegeben.


Da viele verschiedene Schemata in verschiedenen Versionen in Benutzung sind, ist die Vorstellung eines „globalen“ alles umfassenden LDAP-Verzeichnisses nicht real. LDAP-Server werden als zentraler Verzeichnisdienst für verschiedene Zwecke in verschiedenen Größen eingesetzt, die Objekthierarchie bleibt aber in der Regel auf eine Organisation beschränkt.
Da viele verschiedene Schemata in verschiedenen Versionen in Benutzung sind, ist die Vorstellung eines „globalen“ alles umfassenden LDAP-Verzeichnisses nicht real.  
* LDAP-Server werden als zentraler Verzeichnisdienst für verschiedene Zwecke in verschiedenen Größen eingesetzt, die Objekthierarchie bleibt aber in der Regel auf eine Organisation beschränkt.


=== Protokoll ===
=== Protokoll ===
LDAP ist ein Protokoll der Anwendungsschicht (''Applicationlayer'') nach dem für&nbsp;TCP verwendeten [[DoD-Schichtenmodell|DoD-Vier-Schichten-Modell]] und arbeitet mittels genau spezifizierter Zugriffs-Prozesse:
LDAP ist ein Protokoll der Anwendungsschicht (''Applicationlayer'') nach dem für TCP verwendeten [[DoD-Schichtenmodell|DoD-Vier-Schichten-Modell]] und arbeitet mittels genau spezifizierter Zugriffs-Prozesse:


; bind
; bind
: Mit der ''bind''-Direktive vermittelt man dem Directory-Server über einen&nbsp;DN, wer den Zugriff durchführen möchte (entweder anonym, per Passwort-[[Authentifizierung]] oder anders)
: Mit der ''bind''-Direktive vermittelt man dem Directory-Server über einen DN, wer den Zugriff durchführen möchte (entweder anonym, per Passwort-[[Authentifizierung]] oder anders)
; baseDN
; baseDN
: Die BaseDN definiert, wo im Verzeichnisbaum abwärts die Suche nach bestimmten Objekten gestartet werden soll. Die Suche kann festgelegt werden auf eine Suche über
: Die BaseDN definiert, wo im Verzeichnisbaum abwärts die Suche nach bestimmten Objekten gestartet werden soll.  
* Die Suche kann festgelegt werden auf eine Suche über
:* genau dieses Objekt (''base'')
:* genau dieses Objekt (''base'')
:* dieses Objekt und alles darunter (''sub'')
:* dieses Objekt und alles darunter (''sub'')
:* eine Ebene unterhalb des BaseDNs (''one'').
:* eine Ebene unterhalb des BaseDNs (''one'').


Ansonsten gelten die notwendigen Such-Spezifikationen wie Suchoperator (Beispiel ''(&amp;(mail=joe*)(ou=People))''), Server-Benennung (z.&nbsp;B. ''ldap.acme.com'') oder Port-Benennung.
Ansonsten gelten die notwendigen Such-Spezifikationen wie Suchoperator (Beispiel ''(&amp;(mail=joe*)(ou=People))''), Server-Benennung (z.&nbsp;B.&nbsp;''ldap.acme.com'') oder Port-Benennung.


==== Beispiel ====
==== Beispiel ====
Zeile 104: Zeile 145:
<code>ldapsearch -h ldap.acme.com -p 389 -s sub -D "cn=Directory Manager,o=acme" -W -b "ou=personen,o=acme" "(&amp;(mail=joe*)(c=germany))" mail</code>
<code>ldapsearch -h ldap.acme.com -p 389 -s sub -D "cn=Directory Manager,o=acme" -W -b "ou=personen,o=acme" "(&amp;(mail=joe*)(c=germany))" mail</code>


Erklärung: Das Kommandozeilenprogramm kontaktiert über&nbsp;LDAP
Erklärung: Das Kommandozeilenprogramm kontaktiert über LDAP
* den Directory-Server (d.&nbsp;h. den [[Hostrechner|Host]], deswegen das&nbsp;-h) <code>ldap.acme.com</code>
* den Directory-Server (d. h. den [[Hostrechner|Host]], deswegen das -h) <code>ldap.acme.com</code>
* auf [[Port (Protokoll)|Port]] <code>389</code>
* auf [[Port (Protokoll)|Port]] <code>389</code>
* und meldet sich über das [[Benutzerkonto]] des <code>Directory Managers</code> an diesem System an;
* und meldet sich über das [[Benutzerkonto]] des <code>Directory Managers</code> an diesem System an;
* das Passwort wird [[interaktiv]] abgefragt (<code>-W</code>).
* das Passwort wird [[interaktiv]] abgefragt (<code>-W</code>).
* Die Anfrage zielt auf alle Benutzereinträge (<code>-s sub</code>, d.&nbsp;h. unterhalb, des Zweiges (englisch ''branch'', daher das&nbsp;-b) <code>ou=personen,o=acme</code>)
* Die Anfrage zielt auf alle Benutzereinträge (<code>-s sub</code>, d. h.  
* unterhalb, des Zweiges (englisch ''branch'', daher das -b) <code>ou=personen,o=acme</code>)
* und sucht nach Personen aus Deutschland, deren Mailadresse mit <code>joe</code> beginnt (<code>(&amp;(mail=joe*)(c=germany))</code>).
* und sucht nach Personen aus Deutschland, deren Mailadresse mit <code>joe</code> beginnt (<code>(&amp;(mail=joe*)(c=germany))</code>).
* Werden Personen gefunden, auf die dieser [[Filter (Software)|Filter]] passt, so wird deren Mailadresse zurückgegeben (<code>mail</code>).
* Werden Personen gefunden, auf die dieser [[Filter (Software)|Filter]] passt, so wird deren Mailadresse zurückgegeben (<code>mail</code>).


== Anwendungen ==
== Anwendung ==
LDAP wird heutzutage in vielen Bereichen eingesetzt, beispielsweise:
LDAP wird heutzutage in vielen Bereichen eingesetzt, beispielsweise:
* in Adressbuch-Software wie [[Apple Adressbuch]], [[HCL Notes]], [[Microsoft Outlook]], [[Mozilla Thunderbird]], [[Novell Evolution]], der [[OpenOffice.org]]- und [[LibreOffice]]-[[Serienbrief]]<nowiki/>erstellung und dem Mailprogramm [[The Bat]]
* in Adressbuch-Software wie [[Apple Adressbuch]], [[HCL Notes]], [[Microsoft Outlook]], [[Mozilla Thunderbird]], [[Novell Evolution]], der [[OpenOffice.org]]- und [[LibreOffice]]-[[Serienbrief]]<nowiki/>erstellung und dem Mailprogramm [[The Bat]]
Zeile 121: Zeile 163:


=== LDAP und hierarchische Datenbanken ===
=== LDAP und hierarchische Datenbanken ===
LDAP agiert als [[Front-End und Back-End|Frontend]] zu [[Hierarchisches Datenbankmodell|hierarchischen Datenbanken]]. LDAP an sich ist keine Datenbank, sondern lediglich das Protokoll zur Kommunikation.
LDAP ist keine Datenbank, sondern das Protokoll zur Kommunikation. Es agiert als [[Front-End und Back-End|Frontend]] zu [[Hierarchisches Datenbankmodell|hierarchischen Datenbanken]].


=== Potentielle Probleme ===
=== Potentielle Probleme ===
==== Keine Normalformen ====
==== Keine Normalformen ====
Hierarchische Datenbanken erzwingen keine [[Normalisierung (Datenbank)|Normalformen]], z.&nbsp;B. können ''multivalued attributes'' erlaubt sein.
Hierarchische Datenbanken erzwingen keine [[Normalisierung (Datenbank)|Normalformen]], z.&nbsp;B.&nbsp;können ''multivalued attributes'' erlaubt sein.


==== Abfragesprache ====
==== Abfragesprache ====
Zeile 135: Zeile 177:
* [[Aggregation (Informatik)#Datenbank|Aggregation]] (GROUP BY): muss mit [[Schleife (Programmierung)|Schleife]]n im Client auscodiert werden.
* [[Aggregation (Informatik)#Datenbank|Aggregation]] (GROUP BY): muss mit [[Schleife (Programmierung)|Schleife]]n im Client auscodiert werden.


Anders als&nbsp;[[SQL]] ist die LDAP-[[Abfragesprache]] keine [[Algebra]], weil ihr die [[Abgeschlossenheit (algebraische Struktur)|Abgeschlossenheit]] fehlt: Abfrageergebnisse von LDAP-Anfragen sind keine LDAP-Bäume, sondern [[Knotenmenge]]n; daher ist die LDAP-Abfragesprache auch nicht auf LDAP-Ergebnisse anwendbar, um sie zu verfeinern.
Anders als [[SQL]] ist die LDAP-[[Abfragesprache]] keine [[Algebra]], weil ihr die [[Abgeschlossenheit (algebraische Struktur)|Abgeschlossenheit]] fehlt: Abfrageergebnisse von LDAP-Anfragen sind keine LDAP-Bäume, sondern [[Knotenmenge]]n; daher ist die LDAP-Abfragesprache auch nicht auf LDAP-Ergebnisse anwendbar, um sie zu verfeinern.


=== Stärken ===
=== Stärken ===
==== Autorisierung und Authentifizierung ====
==== Autorisierung und Authentifizierung ====
Das Protokoll und LDAP-Server sind auf Authentifizierung (Passwortprüfung), Autorisierung (Rechteprüfung) und Adressbuch-Suchen optimiert. Der schnelle Verbindungsauf- und -abbau, das einfach strukturierte Protokoll und die knappe Abfragesprache sorgen für eine schnelle Verarbeitung.
Das Protokoll und LDAP-Server sind auf Authentifizierung (Passwortprüfung), Autorisierung (Rechteprüfung) und Adressbuch-Suchen optimiert.  
* Der schnelle Verbindungsauf- und -abbau, das einfach strukturierte Protokoll und die knappe Abfragesprache sorgen für eine schnelle Verarbeitung.


==== Schneller Lesezugriff ====
==== Schneller Lesezugriff ====
Zeile 145: Zeile 188:


==== Verteilte Datenhaltung ====
==== Verteilte Datenhaltung ====
LDAP bietet [[Mehrrechner-Datenbanksystem|verteilte]] Datenhaltung, z.&nbsp;B. redundante lokale Datenspeicherung an verteilten Standorten, [[Lose Kopplung|lose gekoppelte]] [[Replikation (Datenverarbeitung)|Replikation]] zum [[Datenabgleich]] zwischen den Standorten und [[Hochverfügbarkeit|extrem hohe Verfügbarkeit]] ohne komplexe Konfiguration oder hohe Kosten.
LDAP bietet [[Mehrrechner-Datenbanksystem|verteilte]] Datenhaltung, z.&nbsp;B.&nbsp;redundante lokale Datenspeicherung an verteilten Standorten, [[Lose Kopplung|lose gekoppelte]] [[Replikation (Datenverarbeitung)|Replikation]] zum [[Datenabgleich]] zwischen den Standorten und [[Hochverfügbarkeit|extrem hohe Verfügbarkeit]] ohne komplexe Konfiguration oder hohe Kosten.


==== Flexibles, voll objektorientiertes Datenmodell ====
==== Flexibles, voll objektorientiertes Datenmodell ====
LDAP erbt vom X.500-Standard das [[Objektorientierung|objektorientierte]] Datenmodell. Damit können LDAP-Verzeichnisse flexibel an volatile Anforderungen angepasst werden, ohne dass bereits im Verzeichnis implementierte Funktionalität verlorengeht.
LDAP erbt vom X.500-Standard das [[Objektorientierung|objektorientierte]] Datenmodell.  
== Syntax ==
* Damit können LDAP-Verzeichnisse flexibel an volatile Anforderungen angepasst werden, ohne dass bereits im Verzeichnis implementierte Funktionalität verlorengeht.
=== Optionen ===
=== Parameter ===
== Sicherheit ==
== Sicherheit ==
== Dokumentation ==
== Dokumentation ==
=== RFC ===
=== RFC ===
=== Man-Pages ===
 
# Protokoll: RFC 4511
# Aktuelle dritte Version: [[Request for Comments|RFC]] 4510 bis RFC 4532
 
=== Man-Page ===
=== Info-Pages ===
=== Info-Pages ===
== Siehe auch ==
== Siehe auch ==
# [[Kerberos (Protokoll)|Kerberos]]
# [[Kerberos (Protokoll)|Kerberos]]
== LDAP-Software ==
=== LDAP-Software ===
=== LDAP-Server ===
==== LDAP-Server ====
Viele Hersteller bieten LDAP-Server, beispielsweise:
Viele Hersteller bieten LDAP-Server, beispielsweise:
* [[Apache Software Foundation]] ([[Free/Libre Open Source Software|FLOSS]]-Variante [[Apache Directory Server]])
* [[Apache Software Foundation]] ([[Free/Libre Open Source Software|FLOSS]]-Variante [[Apache Directory Server]])
* [[Apple]] (durch [[Apple Open Directory|Open Directory]])
* [[Apple]] (durch [[Apple Open Directory|Open Directory]])
* [[HCL Technologies]] (durch Tivoli Directory Server bzw. HCL Domino Server mit LDAP-Task)
* [[HCL Technologies]] (durch Tivoli Directory Server bzw.&nbsp;
* HCL Domino Server mit LDAP-Task)
* [[Microsoft]] (durch [[Active Directory]] beziehungsweise ADAM) (Service wird installiert, wenn Windows zum [[Domain Controller]] wird)
* [[Microsoft]] (durch [[Active Directory]] beziehungsweise ADAM) (Service wird installiert, wenn Windows zum [[Domain Controller]] wird)
* [[Novell]] (durch [[Novell Directory Services|eDirectory]])
* [[Novell]] (durch [[Novell Directory Services|eDirectory]])
Zeile 175: Zeile 221:
* [[ForgeRock]] (Weiterentwicklung eines Sun-Forks seit der Übernahme von [[Sun Microsystems|Sun]] durch [[Oracle]] 2010)
* [[ForgeRock]] (Weiterentwicklung eines Sun-Forks seit der Übernahme von [[Sun Microsystems|Sun]] durch [[Oracle]] 2010)


=== LDAP-Clients ===
==== LDAP-Clients ====
Client-Software erlaubt den Zugriff auf die Verzeichnisdaten, zum Beispiel:
Client-Software erlaubt den Zugriff auf die Verzeichnisdaten, zum Beispiel:
* [[cURL]]: Ein quelloffenes Kommandozeilenwerkzeug, das das LDAP Protokoll unterstützt.<ref>{{Internetquelle |url=https://curl.haxx.se/rfc/rfc1959.txt |titel=&#82;&#70;&#67; 1959 – An LDAP URL Format |hrsg=Network Working Group |abruf=2020-05-14 |sprache=en}}</ref>
* [[cURL]]: Ein quelloffenes Kommandozeilenwerkzeug, das das LDAP Protokoll unterstützt.
* [https://technet.microsoft.com/en-us/sysinternals/bb963907.aspx Active Directory Explorer]: Ein kostenloser LDAP-Client von [[Sysinternals]] für [[Microsoft Windows|Windows]]
* [https://technet.microsoft.com/en-us/sysinternals/bb963907.aspx Active Directory Explorer]: Ein kostenloser LDAP-Client von [[Sysinternals]] für [[Microsoft Windows|Windows]]
* [[JXplorer]]: Ein quelloffener Client, der in Java entwickelt wurde.
* [[JXplorer]]: Ein quelloffener Client, der in Java entwickelt wurde.
Zeile 185: Zeile 231:
* [http://directory.apache.org/studio/ {{lang|en|Apache Directory Studio}}]: Ein plattformübergreifender Client, der in Java von Apache Software Foundation entwickelt wurde.
* [http://directory.apache.org/studio/ {{lang|en|Apache Directory Studio}}]: Ein plattformübergreifender Client, der in Java von Apache Software Foundation entwickelt wurde.
* [http://sourceforge.net/projects/gqclient/ GQ]: Ein Client, der in GTK+/GTK2 unter GPL für [[GNU/Linux]] entwickelt wurde.
* [http://sourceforge.net/projects/gqclient/ GQ]: Ein Client, der in GTK+/GTK2 unter GPL für [[GNU/Linux]] entwickelt wurde.
* [[LDAP Account Manager]]: LDAP Account Manager ist ein Webfrontend für die Verwaltung diverser Kontotypen in einem LDAP-Verzeichnis. Es wurde in PHP geschrieben.
* [[LDAP Account Manager]]: LDAP Account Manager ist ein Webfrontend für die Verwaltung diverser Kontotypen in einem LDAP-Verzeichnis.  
* [http://luma.sourceforge.net/ Luma]: Eine in QT4 entwickelte Clientanwendung für Linux. Der Einsatz von Plugins ermöglicht eine einfache Verwaltung von Benutzerkonten, Adressbücher usw.
* Es wurde in PHP geschrieben.
* [http://luma.sourceforge.net/ Luma]: Eine in QT4 entwickelte Clientanwendung für Linux.  
* Der Einsatz von Plugins ermöglicht eine einfache Verwaltung von Benutzerkonten, Adressbücher usw.
* [http://phpldapadmin.sourceforge.net/ phpLDAPadmin]: Ein plattformübergreifender webbasierter Client, der unter GPL in PHP zum einfachen Verwaltung von LDAP-Verzeichnissen entwickelt wurde.
* [http://phpldapadmin.sourceforge.net/ phpLDAPadmin]: Ein plattformübergreifender webbasierter Client, der unter GPL in PHP zum einfachen Verwaltung von LDAP-Verzeichnissen entwickelt wurde.
* [http://www.fusiondirectory.org/ FusionDirectory]: Eine GPL-lizenzierte Web-Anwendung, die in PHP zum einfachen Verwalten von LDAP-Verzeichnissen und allen dazugehörenden Diensten entwickelt wurde. Es hat sich zu einem [[Identitätsmanagement|IDM]] entwickelt.<ref>{{Internetquelle |url=https://www.fusiondirectory.org/quest-ce-que-fusiondirectory/ |titel=Qu'est-ce que FusionDirectory ? |werk=Fusiondirectory est une solution de gestion des identités |abruf=2021-01-29 |sprache=fr}}</ref>
* [http://www.fusiondirectory.org/ FusionDirectory]: Eine GPL-lizenzierte Web-Anwendung, die in PHP zum einfachen Verwalten von LDAP-Verzeichnissen und allen dazugehörenden Diensten entwickelt wurde.  
* Es hat sich zu einem [[Identitätsmanagement|IDM]] entwickelt.
* [http://ldap-csvexport.sourceforge.net/ ldap-csvexport]: Ein GPL-lizenziertes, Perl-basiertes Kommandozeilentool für den Export von LDAP-Daten als CSV mit vielen Features.
* [http://ldap-csvexport.sourceforge.net/ ldap-csvexport]: Ein GPL-lizenziertes, Perl-basiertes Kommandozeilentool für den Export von LDAP-Daten als CSV mit vielen Features.
* [http://ldap-re-replace.sourceforge.net/ ldap-preg_replace]: Ein GPL-lizenziertes, Perl-basiertes Kommandozeilentool für das massenhafte Ändern von Attributen mit [[Regexp|regulären Ausdrücken]].
* [http://ldap-re-replace.sourceforge.net/ ldap-preg_replace]: Ein GPL-lizenziertes, Perl-basiertes Kommandozeilentool für das massenhafte Ändern von Attributen mit [[Regular expressionp|regulären Ausdrücken]].


== Links ==
== Links ==
=== Projekt-Homepage ===
=== Projekt ===
=== Weblinks ===
=== Weblinks ===
# [http://quark.humbug.org.au/publications/ldap/ldap_tut_v2.pdf Introduction to LDAP] (PDF; 2,35&nbsp;MB)
# [http://quark.humbug.org.au/publications/ldap/ldap_tut_v2.pdf Introduction to LDAP] (PDF; 2,35 MB)
# [http://www.linux-magazin.de/heft_abo/ausgaben/2001/05/straffe_verwaltung Einführender Artikel zu OpenLDAP] im ''Linux Magazin''
# [http://www.linux-magazin.de/heft_abo/ausgaben/2001/05/straffe_verwaltung Einführender Artikel zu OpenLDAP] im ''Linux Magazin''


== Literatur ==
== Literatur ==
* {{Literatur |Autor=Dieter Klünter, Jochen Laser |Titel=LDAP verstehen, OpenLDAP einsetzen |TitelErg=Grundlagen und Praxiseinsatz |Verlag=dpunkt.verlag |Ort=Heidelberg |Datum=2007 |ISBN=978-3-89864-263-7}}
# Dieter Klünter, Jochen Laser: LDAP verstehen, OpenLDAP einsetzen - Grundlagen und Praxiseinsatz, ISBN 978-3-89864-263-7
* {{Literatur |Autor=Gerald Carter |Titel=LDAP System Administration |Verlag=O’Reilly |Datum=2003}}
# Gerald Carter: LDAP System Administration, O’Reilly (2003)
=== Einzelnachweise ===
 
<references />
 


== Testfragen ==
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>


[[Kategorie:Entwurf]]
[[Kategorie:LDAP]]
[[Kategorie:Internet-Anwendungsprotokoll]]
[[Kategorie:Open Group]]

Aktuelle Version vom 6. November 2024, 12:34 Uhr

Lightweight Directory Access Protocol (LDAP) ist ein Netzwerkprotokoll zur Abfrage und Änderung von Informationen verteilter Verzeichnisdienst

Beschreibung

Lightweight Directory Access Protocol (LDAP)
LDAP im TCP/IP-Protokollstapel:
Anwendung LDAP
Transport UDP TCP
Internet IP (IPv4, IPv6)
Netzzugang Ethernet Token

Bus

Token

Ring

FDDI
Standard-Ports
  • 389 für ungesicherte sowie nur mit STARTTLS gesicherte Verbindungen
  • 636 für mit TLS gesicherte Verbindungen (LDAPS).

Überblick

LDAP basiert auf dem Client-Server-Modell und wird bei Verzeichnisdiensten (englisch directories oder directory services) eingesetzt. Es beschreibt die Kommunikation zwischen dem LDAP-Client und dem Verzeichnis-(Directory-)Server.

Hierbei ist „Verzeichnis“ im Sinne beispielsweise eines Telefonbuches gemeint und nicht im Sinne von „Dateiordner“.

Das Verzeichnis kann beispielsweise ein Adressbuch enthalten: In seinem E-Mail-Client stößt ein Nutzer die Aktion Suche die Mailadresse von Joe User an.

  • Der E-Mail-Client formuliert eine LDAP-Abfrage an das Verzeichnis, das die Adressinformationen bereitstellt.
  • Das Verzeichnis formuliert die Antwort und übermittelt sie an den Client: joe.user@example.org.

LDAP bietet alle Funktionen, die für eine solche Kommunikation notwendig sind:

  • Anmeldung am Server (bind)
  • die Suchabfrage (Suche mir bitte alle Informationen zum Benutzer mit dem Namen „Joe User“)
  • die Modifikation der Daten (Ändere das Passwort des Benutzers Joe User).

Mittlerweile hat sich im administrativen Sprachgebrauch eingebürgert, dass man von einem LDAP-Server spricht, wenn man einen Directory-Server meint, dessen Datenstruktur der LDAP-Spezifikation entspricht und der über das LDAPv3-Protokoll, das in RFC 2251 festgelegt wurde, Daten austauschen kann.

Neuere Implementierungen, die über RFC 2251 hinausgehen, indem sie zusätzlich die Replikation der Daten zwischen verschiedenen Verzeichnissen berücksichtigen, sind Gegenstand für eine mögliche Erweiterung des Protokolls.

Geschichte

LDAP wurde an der Universität von Michigan (UMich) entwickelt
  • 1993 erstmals im RFC 1487 vorgeschlagen. Gleichzeitig stellte die UMich die erste Serverimplementierung vor, die heute als „UMich-LDAP“ bekannt ist.
LDAP ist eine vereinfachte ("lightweight") Alternative zum Directory Access Protocol (DAP)
  • das als Teil des X.500-Standard spezifiziert ist. Der X.500-Standard ist sehr umfangreich und setzt auf einem vollständigen ISO/OSI-Stack auf, was die Implementierung schwierig und hardwareintensiv machte.
LDAP wurde mit dem Ziel entwickelt, Verzeichnisdienste einfacher und somit populärer zu machen.
  • LDAP setzt auf einen TCP/IP-Stack auf und implementiert nur eine Auswahl der DAP-Funktionen und -Datentypen. Dadurch ließ sich LDAP auch auf Arbeitsplatzrechnern der frühen 1990er Jahre implementieren und gewann eine breite Anwendungsbasis.

LDAP und X.500

LDAP ist ein Zugriffsmechanismus gemäß X.500 und äußerlich auf dessen Dienst- und Datenmodelle festgelegt. Im Hintergrund jedoch lässt LDAP alles offen und jegliches Verzeichnissystem zu.

  • Es gibt auch keine Festlegung vom LDAP auf einen bestimmten Unterbau wie TCP und UDP oder IP.

Wo X.500 in seinem Directory Access Protocol (DAP) mehrere aufeinander aufbauende Nachrichten erfordert, kann im LDAP eine einzige zusammengefasste Nachricht genügen.

Funktionsweise

LDAP-Directory-Eintrag

Um eine Übersicht über die Funktionsweise einer LDAP-Architektur zu bekommen, ist es notwendig, dass man zwischen der Organisation des LDAP-Verzeichnisses und dem Protokoll LDAP unterscheidet.

LDAP-Verzeichnis

Die Datenstruktur eines LDAP-Verzeichnisses ist durch einen hierarchischen Baum mit Wurzeln, Zweigen und Blättern gegeben.

Beispiel: Wird ein LDAP-Verzeichnis in einem Unternehmen mit dem Namen ACME eingesetzt, so kann die Organisation als Wurzel definiert werden: o=acme.

Personen können in Zweigen unterhalb dieser Wurzel hinterlegt werden: ou=Personen,o=acme

Gruppen können in anderen Zweigen unterhalb der Wurzel hinterlegt werden: ou=Gruppen,o=acme

Damit die Organisation der Daten nicht willkürlich geschieht, verwendet jedes LDAP-Verzeichnis eine bestimmte, genormte und gegebenenfalls erweiterte Struktur.

  • Die Struktur wird durch das verwendete Schema definiert. Ein LDAP-Schema definiert jeweils Objekt-Klassen mit ihren Attributen, z. B. 
  • die Klasse person oder die Klasse organisation.

Die Verzeichniseinträge heißen LDAP-Objekte. So sind für die Daten einer Person, ihrer E-Mail-Adresse und ihrer Passwörter nicht etwa drei Objekte notwendig, sondern dasselbe Objekt gehört zu drei Klassen.

Es gibt drei Arten von Objektklassen:

  1. Da ein Objekt zu mindestens einer strukturellen Klasse gehören muss, ist dies die Standardeinstellung.
  2. Daneben gibt es noch Hilfsklassen, welche verschiedenartigen Objekten gleiche Attribute zuweisen.
  3. Zu guter Letzt existieren noch abstrakte Basisklassen, von denen keine Objekte, sondern nur untergeordnete Basisklassen erzeugt werden können.

Jedes Objekt ist eigenständig und aus Attributen zusammengesetzt. z. B. uid=juser,ou=People,ou=webdesign,c=de,o=acme.

  • Dieser setzt sich aus einzelnen Relative Distinguished Names (RDN) zusammen.

Eine andere Schreibweise für den DN ist der canonical name, der keine Attribut-Tags wie ou oder c enthält und bei dem die Trennung zwischen den RDNs durch Schrägstriche erfolgt; außerdem beginnt die Reihenfolge, im Gegensatz zum DN, mit dem obersten Eintrag, also z. B. acme/de/webdesign/People/juser.

Jedes Attribut eines Objekts hat einen bestimmten Typ und einen oder mehrere Werte.

  • Die Typenbezeichnungen der Attribute sind meist einfach zu merkende Kürzel, z. B. :
  • cn für common name
  • sn für surname (Nachname)
  • ou für organizational unit
  • st für state (Bundesstaat / -land)
  • c für country
  • mail für e-mail address.

Die erlaubten Werte eines Attributs sind vom Typ abhängig.

  • So könnte ein mail-Attribut die Adresse hans.wurst@example.com enthalten, ein jpegPhoto-Attribut dagegen würde ein Foto als binäre Daten im JPEG-Format speichern.
  • Die in der Objektklasse definierten Attribute können entweder obligatorisch (mandatory) oder optional sein.

Die Objekte werden in einer hierarchischen Struktur gespeichert, die politische, geographische oder organisatorische Grenzen widerspiegelt.

  • Die größten Einheiten werden an die Wurzel des Verzeichnisbaumes gestellt, der sich nach unten immer weiter auffächert.
  • Während Objekte, die selbst Objekte enthalten, als Containerobjekte bezeichnet werden, heißen die „Enden“ des Baumes Blattobjekte.
Baumstruktur der LDAP-Inhalte

Wenn einzelne LDAP-Server für einzelne Teile des Verzeichnisbaumes zuständig sind, spricht man von Partitionen. Stellt ein Client eine Anfrage, für die der Server nicht zuständig ist, so kann der Server den Client an einen anderen Server verweisen.

LDAP-Server lassen sich redundant aufbauen.

  • Hierzu wird oft eine Master-Slave-Konfiguration verwendet.
  • Versucht ein Client, Daten auf einem Slave-Server zu ändern, so wird er an den Master verwiesen; die Änderungen auf dem Master-Server werden dann an alle Slave-Server weitergegeben.

Da viele verschiedene Schemata in verschiedenen Versionen in Benutzung sind, ist die Vorstellung eines „globalen“ alles umfassenden LDAP-Verzeichnisses nicht real.

  • LDAP-Server werden als zentraler Verzeichnisdienst für verschiedene Zwecke in verschiedenen Größen eingesetzt, die Objekthierarchie bleibt aber in der Regel auf eine Organisation beschränkt.

Protokoll

LDAP ist ein Protokoll der Anwendungsschicht (Applicationlayer) nach dem für TCP verwendeten DoD-Vier-Schichten-Modell und arbeitet mittels genau spezifizierter Zugriffs-Prozesse:

bind
Mit der bind-Direktive vermittelt man dem Directory-Server über einen DN, wer den Zugriff durchführen möchte (entweder anonym, per Passwort-Authentifizierung oder anders)
baseDN
Die BaseDN definiert, wo im Verzeichnisbaum abwärts die Suche nach bestimmten Objekten gestartet werden soll.
  • Die Suche kann festgelegt werden auf eine Suche über
  • genau dieses Objekt (base)
  • dieses Objekt und alles darunter (sub)
  • eine Ebene unterhalb des BaseDNs (one).

Ansonsten gelten die notwendigen Such-Spezifikationen wie Suchoperator (Beispiel (&(mail=joe*)(ou=People))), Server-Benennung (z. B. ldap.acme.com) oder Port-Benennung.

Beispiel

Beispiel für eine LDAP-Suchanfrage durch ein Kommandozeilenprogramm:

ldapsearch -h ldap.acme.com -p 389 -s sub -D "cn=Directory Manager,o=acme" -W -b "ou=personen,o=acme" "(&(mail=joe*)(c=germany))" mail

Erklärung: Das Kommandozeilenprogramm kontaktiert über LDAP

  • den Directory-Server (d. h. den Host, deswegen das -h) ldap.acme.com
  • auf Port 389
  • und meldet sich über das Benutzerkonto des Directory Managers an diesem System an;
  • das Passwort wird interaktiv abgefragt (-W).
  • Die Anfrage zielt auf alle Benutzereinträge (-s sub, d. h.
  • unterhalb, des Zweiges (englisch branch, daher das -b) ou=personen,o=acme)
  • und sucht nach Personen aus Deutschland, deren Mailadresse mit joe beginnt ((&(mail=joe*)(c=germany))).
  • Werden Personen gefunden, auf die dieser Filter passt, so wird deren Mailadresse zurückgegeben (mail).

Anwendung

LDAP wird heutzutage in vielen Bereichen eingesetzt, beispielsweise:

LDAP und hierarchische Datenbanken

LDAP ist keine Datenbank, sondern das Protokoll zur Kommunikation. Es agiert als Frontend zu hierarchischen Datenbanken.

Potentielle Probleme

Keine Normalformen

Hierarchische Datenbanken erzwingen keine Normalformen, z. B. können multivalued attributes erlaubt sein.

Abfragesprache

LDAP unterstützt nicht alle relationalen Operationen:

  • Projektion (Spaltenauswahl): wird unterstützt, allerdings nur ohne Erzeugung errechneter Attribute
  • Selektion (Zeilenauswahl): wird unterstützt
  • Kreuzprodukt (JOIN): wird nicht unterstützt
  • Spaltenumbenennung (Rename, AS): wird nicht unterstützt (es gibt keinen „Dereferenziere diesen DN“-Operator, damit existiert auch kein Selfjoin)
  • Aggregation (GROUP BY): muss mit Schleifen im Client auscodiert werden.

Anders als SQL ist die LDAP-Abfragesprache keine Algebra, weil ihr die Abgeschlossenheit fehlt: Abfrageergebnisse von LDAP-Anfragen sind keine LDAP-Bäume, sondern Knotenmengen; daher ist die LDAP-Abfragesprache auch nicht auf LDAP-Ergebnisse anwendbar, um sie zu verfeinern.

Stärken

Autorisierung und Authentifizierung

Das Protokoll und LDAP-Server sind auf Authentifizierung (Passwortprüfung), Autorisierung (Rechteprüfung) und Adressbuch-Suchen optimiert.

  • Der schnelle Verbindungsauf- und -abbau, das einfach strukturierte Protokoll und die knappe Abfragesprache sorgen für eine schnelle Verarbeitung.

Schneller Lesezugriff

Durch seine nicht normalisierte Datenspeicherung kann auf alle Daten eines LDAP-Datensatzes sehr schnell zugegriffen werden, weil alle Daten sofort mit einem einzigen Lesezugriff ausgelesen werden können.

Verteilte Datenhaltung

LDAP bietet verteilte Datenhaltung, z. B. redundante lokale Datenspeicherung an verteilten Standorten, lose gekoppelte Replikation zum Datenabgleich zwischen den Standorten und extrem hohe Verfügbarkeit ohne komplexe Konfiguration oder hohe Kosten.

Flexibles, voll objektorientiertes Datenmodell

LDAP erbt vom X.500-Standard das objektorientierte Datenmodell.

  • Damit können LDAP-Verzeichnisse flexibel an volatile Anforderungen angepasst werden, ohne dass bereits im Verzeichnis implementierte Funktionalität verlorengeht.

Sicherheit

Dokumentation

RFC

  1. Protokoll: RFC 4511
  2. Aktuelle dritte Version: RFC 4510 bis RFC 4532

Man-Page

Info-Pages

Siehe auch

  1. Kerberos

LDAP-Software

LDAP-Server

Viele Hersteller bieten LDAP-Server, beispielsweise:

LDAP-Clients

Client-Software erlaubt den Zugriff auf die Verzeichnisdaten, zum Beispiel:

  • cURL: Ein quelloffenes Kommandozeilenwerkzeug, das das LDAP Protokoll unterstützt.
  • Active Directory Explorer: Ein kostenloser LDAP-Client von Sysinternals für Windows
  • JXplorer: Ein quelloffener Client, der in Java entwickelt wurde.
  • LDAP Browser: Ein kostenloser LDAP-Client für Windows
  • LDAP Administrator: Ein erweitertes LDAP-Verwaltungstool, das zur Arbeit mit fast allen LDAP-Servern entwickelt wurde einschließlich Active Directory, Novell Directory Services, Netscape/iPlanet usw.
  • LDAP Admin: Ein LDAP-Client, der zur Arbeit unter Windows entwickelt wurde.
  • Vorlage:Lang: Ein plattformübergreifender Client, der in Java von Apache Software Foundation entwickelt wurde.
  • GQ: Ein Client, der in GTK+/GTK2 unter GPL für GNU/Linux entwickelt wurde.
  • LDAP Account Manager: LDAP Account Manager ist ein Webfrontend für die Verwaltung diverser Kontotypen in einem LDAP-Verzeichnis.
  • Es wurde in PHP geschrieben.
  • Luma: Eine in QT4 entwickelte Clientanwendung für Linux.
  • Der Einsatz von Plugins ermöglicht eine einfache Verwaltung von Benutzerkonten, Adressbücher usw.
  • phpLDAPadmin: Ein plattformübergreifender webbasierter Client, der unter GPL in PHP zum einfachen Verwaltung von LDAP-Verzeichnissen entwickelt wurde.
  • FusionDirectory: Eine GPL-lizenzierte Web-Anwendung, die in PHP zum einfachen Verwalten von LDAP-Verzeichnissen und allen dazugehörenden Diensten entwickelt wurde.
  • Es hat sich zu einem IDM entwickelt.
  • ldap-csvexport: Ein GPL-lizenziertes, Perl-basiertes Kommandozeilentool für den Export von LDAP-Daten als CSV mit vielen Features.
  • ldap-preg_replace: Ein GPL-lizenziertes, Perl-basiertes Kommandozeilentool für das massenhafte Ändern von Attributen mit regulären Ausdrücken.

Links

Projekt

Weblinks

  1. Introduction to LDAP (PDF; 2,35 MB)
  2. Einführender Artikel zu OpenLDAP im Linux Magazin

Literatur

  1. Dieter Klünter, Jochen Laser: LDAP verstehen, OpenLDAP einsetzen - Grundlagen und Praxiseinsatz, ISBN 978-3-89864-263-7
  2. Gerald Carter: LDAP System Administration, O’Reilly (2003)