29.2. Aufbau eines LDAP-Verzeichnisbaums

Ein LDAP-Verzeichnis hat eine baumartige Struktur. Alle Einträge (Objekte genannt) im Verzeichnis haben eine definierte Position innerhalb dieser Hierarchie. Diese Hierarchie wird als Directory Information Tree oder kurz DIT bezeichnet. Der komplette Pfad zum gewünschten Eintrag, der ihn eindeutig identifiziert, wird Distinguished Name oder DN genannt. Die einzelnen Knoten auf dem Weg zu diesem Eintrag werden Relative Distinguished Name oder RDN genannt. Objekte können generell zwei verschiedenen Typen zugeordnet werden:

Container

Diese Objekte können wieder andere Objekte enthalten. Solche Objektklassen sind Root (Wurzelelement des Verzeichnisbaums, das nicht real existiert), c (engl. country), ou (engl. OrganizationalUnit), und dc (engl. domainComponent). Vergleichbar ist dieses Modell auch mit Verzeichnissen (Ordnern) im Dateisystem.

Blatt

Diese Objekte sitzen am Ende eines Astes. Ihnen sind keine anderen Objekte untergeordnet. Beispiele sind Person, InetOrgPerson oder groupofNames.

An der Spitze der Verzeichnishierarchie liegt ein Wurzelelement Root. Diesem können in der nächsten Ebene entweder c (engl. country), dc (engl. domainComponent) oder o (engl. organization) untergeordnet werden.

Die Beziehungen innerhalb eines LDAP-Verzeichnisbaums werden am folgenden Beispiel (siehe Abbildung 29.1, „Aufbau eines LDAP-Verzeichnisses“) deutlich.

Abbildung 29.1. Aufbau eines LDAP-Verzeichnisses

Aufbau eines LDAP-Verzeichnisses

Die gesamte Abbildung umfasst einen fiktiven Directory Information Tree. Abgebildet sind die Einträge (engl. entries) auf drei Ebenen. Jeder Eintrag entspricht in der Abbildung einem Kästchen. Der vollständige gültige Distinguished Name für den fiktiven SuSE-Mitarbeiter Geeko Linux ist in diesem Fall cn=Geeko Linux,ou=doc,dc=suse,dc=de. Er setzt sich zusammen, indem der RDN cn=Geeko Linux zum DN des Vorgängereintrags ou=doc,dc=suse,dc=de hinzugefügt wird.

Die globale Festlegung, welche Typen von Objekten im DIT gespeichert werden sollen, geschieht über ein Schema. Der Typ eines Objekts wird durch die Objektklasse festgelegt. Die Objektklasse bestimmt, welche Attribute dem betreffenden Objekt zugeordnet werden müssen bzw. können. Ein Schema muss demnach Definitionen aller Objektklassen und Attribute enthalten, die im gewünschten Einsatzszenario verwendet werden. Es existieren einige allgemein gebräuchliche Schemata (siehe RFC 2252 und 2256). Allerdings können auch benutzerdefinierte Schemata geschaffen werden oder mehrere Schemata ergänzend zueinander verwendet werden, wenn es die Umgebung erfordert, in der der LDAP-Server betrieben werden soll.

Tabelle 29.1, „Häufig verwendete Objektklassen und Attribute“ gibt einen kleinen Überblick über die im Beispiel verwendeten Objektklassen aus core.schema und inetorgperson.schema samt zwingend erforderlicher Attribute und den passender Attributwerte.

Tabelle 29.1. Häufig verwendete Objektklassen und Attribute

Objektklasse

Bedeutung

Beispieleintrag

erforderl. Attribute

dcObject

domainComponent (Namensbestandteile der Domain)

suse

dc

organizationalUnit

organizationalUnit (Organisationseinheit)

doc

ou

inetOrgPerson

inetOrgPerson (Personenbezogene Daten für Intra-/Internet)

Geeko Linux

sn und cn

In Beispiel 29.1, „Auszug aus schema.core (Zeilennummerierung aus Verständnisgründen)“ sehen Sie einen Auszug aus einer Schema-Anweisung mit Erklärungen, der Ihnen beim Verstehen der Syntax neuer Schemata hilft.

Beispiel 29.1. Auszug aus schema.core (Zeilennummerierung aus Verständnisgründen)

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

Als Beispiel dient der Attributtyp organizationalUnitName und die zugehörige Objektklasse organizationalUnit. In Zeile 1 wird der Name des Attributs, sein eindeutiger OID (Object Identifier) (numerisch) sowie das Kürzel des Attributs gelistet. In Zeile 2 wird mit DESC eine kurze Beschreibung des Attributs eingeleitet. Hier ist auch der zugehörige RFC genannt, auf den die Definition zurückgeht. SUP in Zeile 3 weist auf einen übergeordneten Attributtyp hin, zu dem dieses Attribut gehört.

Die Definition der Objektklasse organizationalUnit beginnt in Zeile 4 wie bei der Attributsdefinition mit einem OID und dem Namen der Objektklasse. In Zeile 5 lesen Sie eine Kurzbeschreibung der Objektklasse. Zeile 6 mit dem Eintrag SUP top besagt, dass diese Objektklasse keine Unterklasse einer anderen Objektklasse ist. Zeile 7, beginnend mit MUST, führt alle Attributtypen auf, die zwingend in einem Objekt vom Typ organizationalUnit verwendet werden müssen. In Zeile 8 sind nach MAY alle Attributtypen gelistet, die in Zusammenhang mit dieser Objektklasse verwendet werden können.

Eine sehr gute Einführung in den Umgang mit Schemata finden Sie in der Dokumentation zu OpenLDAP in Ihrem installierten System unter /usr/share/doc/packages/openldap2/admin-guide/index.html.


SUSE LINUX Administrationshandbuch 9.3