25.2. Struktur eines LDAP-Verzeichnisbaums

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 (DIT, Directory Information Tree) 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 25.1, „Struktur eines LDAP-Verzeichnisses“ gezeigt wird.

Abbildung 25.1. Struktur eines LDAP-Verzeichnisses

Struktur eines LDAP-Verzeichnisses

Das vollständige Diagramm umfasst einen Beispiel-Verzeichnisbaum. 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 SUSE-Mitarbeiter Geeko Linux lautet in diesem Fall cn=Geeko Linux,ou=doc,dc=suse,dc=de. Er wird zusammengesetzt, indem dem RDN cn=Geeko Linux der DN des vorhergehenden Eintrags ou=doc,dc=suse,dc=de hinzugefügt wird.

Die allgemeine Festlegung der Objekttypen, die im DIT gespeichert werden sollen, erfolgt anhand eines Schemas. 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 verwendeten Schemata (siehe RFC 2252 und 2256). 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 25.1, „Häufig verwendete Objektklassen und Attribute“ 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 Attributwerte.

Tabelle 25.1. Häufig verwendete Objektklassen und Attribute

Objektklasse

Bedeutung

Beispieleintrag

Erforderliche Attribute

dcObject

domainComponent (Name der Domänenkomponenten)

suse

dc

organizationalUnit

organizationalUnit (organisato­rische Einheit)

doc

ou

inetOrgPerson

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

Geeko Linux

sn und cn

In Beispiel 25.1, „Ausschnitt aus schema.core“ wird ein Ausschnitt einer Schemadirektive mit entsprechenden Erklärungen dargestellt (die Zeilen sind für Erklärungszwecke nummeriert).

Beispiel 25.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 Definitition 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 mti 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.