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:
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.
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.
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 (organisatorische 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.