26.2 Struktur eines LDAP-Verzeichnisbaums

Um ein tieferes Hintergrundwissen zur Funktionsweise eines LDAP-Servers und dem Speichern der Daten zu erhalten, ist es wichtig, die Art und Weise zu verstehen, in der Daten auf dem Server organisiert werden, und wie es LDAP ermöglicht wird, schnellen Zugriff auf die benötigten Daten bereitzustellen. Für eine erfolgreiche LDAP-Einrichtung müssen Sie außerdem die grundlegende LDAP-Terminologie kennen. Dieser Abschnitt erläutert das grundlegende Layout eines LDAP-Verzeichnisbaumes und stellt die im LDAP-Kontext verwendete grundlegende Terminologie bereit. Überspringen Sie diesen einführenden Abschnitt, wenn Sie bereits über LDAP-Hintergrundwissen verfügen und nur erfahren möchten, wie eine LDAP-Umgebung in openSUSE eingerichtet wird. Lesen Sie unter Abschnitt 26.3, Konfigurieren eines LDAP-Servers mit YaST bzw. Abschnitt 26.7, Manuelles Konfigurieren eines LDAP-Servers weiter.

Ein LDAP-Verzeichnis weist eine Baumstruktur auf. Alle Einträge (auch "Objekte" genannt) des Verzeichnisses verfügen über eine festgelegte Position innerhalb dieser Hierarchie. Diese Hierarchie wird als Verzeichnisinformationsbaum (Directory Information Tree, DIT) bezeichnet. Der vollständige Pfad zum gewünschten Eintrag, durch den der Eintrag eindeutig identifiziert wird, wird als eindeutiger Name oder DN (Distinguished Name) bezeichnet. Ein einzelner Knoten im Pfad dieses Eintrags wird relativer eindeutiger Name oder RDN (relative distinguished name) genannt. Objekte können im Allgemeinen einem von zwei möglichen Typen zugewiesen werden:

Container

Diese Objekte können wiederum andere Objekte enthalten. Solche Objektklassen sind beispielsweise root (das Stammelement des Verzeichnisbaums, das in der Regel nicht vorhanden ist), c (Land), ou (organisatorische Einheit) und dc (Domänenkomponente). Dieses Modell ist mit Verzeichnissen (Ordnern) in einem Dateisystem vergleichbar.

Blatt

Diese Objekte befinden sich am Ende einer Verzweigung und verfügen nicht über untergeordnete Objekte. Beispiele: person, InetOrgPerson oder groupofNames.

Auf der obersten Ebene in der Verzeichnishierarchie steht das Stammelement root. Hierin können die untergeordneten Elemente c (Land), dc (Domänenkomponente) oder o (Organisation) enthalten sein. Die Bezüge innerhalb eines LDAP-Verzeichnisbaums werden im folgenden Beispiel verdeutlicht, das in Abbildung 26-1 gezeigt wird.

Abbildung 26-1 Struktur eines LDAP-Verzeichnisses

Das vollständige Diagramm stellt einen Beispiel-Verzeichnisbaum dar. Die Einträge auf allen drei Ebenen werden dargestellt. Jeder Eintrag entspricht einem Feld im Bild. Der vollständige, gültige eindeutige Name für den fiktiven Mitarbeiter Geeko Linux lautet in diesem Fall cn=Geeko Linux,ou=doc,dc=example,dc=com. Er wird zusammengesetzt, indem dem RDN cn=Geeko Linux des DN des vorhergehenden Eintrags ou=doc,dc=example,dc=com hinzugefügt wird.

Die Objekttypen, die im DIT gespeichert werden sollen, werden global anhand eines Schemas bestimmt. Der Objekttyp wird durch die Objektklasse bestimmt. Mit der Objektklasse wird festgelegt, welche Attribute des betreffenden Objekts zugewiesen werden müssen bzw. können. Daher muss ein Schema die Definitionen aller Objektklassen und Attribute enthalten, die im gewünschten Anwendungsszenario verwendet werden. Es gibt einige häufig verwendete Schemata (siehe RFC 2252 und 2256). In LDAP RFC werden einige häufig verwendete Schemata definiert (siehe zum Beispiel RFC4519). Zusätzlich sind Schemata für viele andere Fälle verfügbar (zum Beispiel Samba, NIS-Ersatz etc.). Es besteht jedoch die Möglichkeit, benutzerdefinierte Schemata zu erstellen oder mehrere einander ergänzende Schemata zu verwenden, sofern die Umgebung, in der der LDAP-Server verwendet werden soll, dies erfordert.

In Tabelle 26-1 erhalten Sie einen kurzen Überblick über die Objektklassen von core.schema und inetorgperson.schema, die im Beispiel verwendet werden, und über die erforderlichen Attribute und gültigen Attributswerte.

Tabelle 26-1 Häufig verwendete Objektklassen und Attribute

Object Class

Bedeutung

Beispieleintrag

Obligatorische Attribute

dcObject

domainComponent (Name der Domänenkomponenten)

Beispiel

dc

organizationalUnit

organizationalUnit (organisatorische Einheit)

doc

ou

inetOrgPerson

inetOrgPerson (personenbezogene Daten für das Intranet oder Internet)

Geeko Linux

sn und cn

In Beispiel 26-1 wird ein Ausschnitt einer Schemadirektive mit entsprechenden Erklärungen dargestellt (die Zeilen sind für Erklärungszwecke nummeriert).

Beispiel 26-1 Ausschnitt aus schema.core

#1 attributetype (2.5.4.11 NAME ( 'ou' 'organizationalUnitName')
#2        DESC 'RFC2256: organizational unit this object belongs to'
#3        SUP name )

...
#4 objectclass ( 2.5.6.5 NAME 'organizationalUnit'
#5        DESC 'RFC2256: an organizational unit'
#6        SUP top STRUCTURAL
#7        MUST ou
#8 MAY (userPassword $ searchGuide $ seeAlso $ businessCategory 
    $ x121Address $ registeredAddress $ destinationIndicator 
    $ preferredDeliveryMethod $ telexNumber 
    $ teletexTerminalIdentifier $ telephoneNumber 
    $ internationaliSDNNumber $ facsimileTelephoneNumber 
    $ street $ postOfficeBox $ postalCode $ postalAddress 
    $ physicalDeliveryOfficeName
    $ st $ l $ description) )
    ...

Der Attributtyp organizationalUnitName und die entsprechende Objektklasse organizationalUnit dienen hier als Beispiel. Zeile 1 enthält den Namen des Attributs, den eindeutigen OID (Object Identifier) (numerisch) und die Abkürzung des Attributs.

Zeile 2 enthält eine kurze, mit DESC gekennzeichnete,, Beschreibung des Attributs. Hier wird der entsprechende RFC, auf dem die Definition basiert, erwähnt. Der Ausdruck SUP in Zeile 3 weist auf einen untergeordneten Attributtyp an, dem das Attribut angehört.

Die Definition der Objektklasse organizationalUnit beginnt in Zeile 4 wie die Definition des Attributs mit einem OID und dem Namen der Objektklasse. Zeile 5 enthält eine kurze Beschreibung der Objektklasse. In Zeile 6 mit dem Eintrag SUP top wird angegeben, dass diese Objektklasse keiner anderen Objektklasse untergeordnet ist. In Zeile 7 werden, mit MUST beginnend, alle Attributtypen aufgeführt, die in Verbindung mit einem Objekt vom Typ organizationalUnit verwendet werden müssen. In der mit MAY beginnenden Zeile 8 werden die Attribute aufgeführt, die im Zusammenhang mit dieser Objektklasse zulässig sind.

Eine sehr gute Einführung in die Verwendung von Schemata finden Sie in der Dokumentation zu OpenLDAP. Wenn Sie OpenLDAP installiert haben, ist sie unter /usr/share/doc/packages/openldap2/admin-guide/index.html zu finden.