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:
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.
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.
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 |
|---|---|---|---|
| domainComponent (Namensbestandteile der Domain) | suse | dc |
| organizationalUnit (Organisationseinheit) | doc | ou |
| 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.