Nudge am 18.01.2009

LDAP mit OpenLDAP – Teil 2

in Linux | Tags: base, DN, forest, LDAP, OpenLDAP, rootdn, rootpw, tree

Letzte Woche war ich dabei stehengeblieben, dass OpenLDAP erst einmal installiert ist, egal wie. Heute solls um ein paar LDAP-Basics gehen, die uns als Wegweiser für die richtig korrekte Installation diesen. Aber dazu muss ich erstmal kurz in etwas anderes abtauchen…

Was ist ein LDAP-Eintrag?

Im Prinzip ist ein LDAP-Eintrag nichts anderes als eine Ansammlung von Attributen und Werten. Dies lässt sich am einfachsten in LDIF, dem LDAP-Text-Format, darstellen:

1
2
3
4
5
6
dn: cn=Mathias Lieber,ou=people,dc=lieber-linux,dc=de
cn: Mathias Lieber
o: lieber-linux.de
mail: spam - mich - zu @ mailprovider . country
l: Leipzig
c: Germany
dn: cn=Mathias Lieber,ou=people,dc=lieber-linux,dc=de
cn: Mathias Lieber
o: lieber-linux.de
mail: spam - mich - zu @ mailprovider . country
l: Leipzig
c: Germany

Links stehen die Attribute, dann ein Doppelpunkt, ein Leerzeichen und dann der jeweilige Wert. Hier gibt es also die Attribute dn,cn,o,mail,l und c. Dabei steht DN für Distinguished Name, einer eindeutigen Bezeichnung des Eintrags. cn steht für Common Name, o für Organization, mail für die Email-Adresse. l und c sind Abkürzungen für location und country.

Sieht also nach einem ganz herkömmlichen Adressbuch-Eintrag aus! Na klar, das ist es auch. LDAP ist also kein Zauberwerk. Man kann die Einträge durchaus mit VCARD und anderen Formaten vergleichen und auch in gewissem Maße ineinander überführen.

Interessant ist der DN, weil er mit dem cn beginnt und dann noch weitere Attribute namens ou und dc benutzt, die irgendwie zusammengestellt sind. Was ist denn das? Erstmal zur Erklärung der Attribute an sich: ou ist eine Abkürzung für organizationalUnit. dc steht für Domain Component, also die Teile einer Internet-Domain, die man normalerweise mit Punkt voneinander trennt. Hier steht jetzt alles mit Komma getrennt. Warum das so ist, werden wir gleich feststellen, wenn wir uns die Struktur von LDAP-Einträgen anschauen.

Die Struktur einer LDAP-Datenbank

Im Gegensatz zu Datenbanken wie MySQL oder Konsorten folgt eine LDAP-Datenbank einem hierarchischem Schema. Das bedeutet, dass ein Eintrag zu einem Vater-Eintrag gehört, der wieder zu einem Vater-Eintrag gehört, der wieder… Und das geht so weiter, bis man bei einem Einstiegsknoten gelangt ist. Solch ein oberster Eintrag wird auch base oder realm genannt, und die Struktur wird meist als tree / Baum bezeichnet, mehrere zusammengehörige LDAP-Bäume bilden einen forest.

Um einen Eintrag eindeutig zu benennen, zählt man im Prinzip die Schritte auf, die man von diesem bis zu seinem Einstiegsknoten zurücklegt (“Sohn vom Sohn vom Sohn vom Sohn vom…”). Allerdings nicht wie die Fanta4 in Lyrik, sondern einfach mit Komma getrennt (“Sohn,Vater,Opa,Uropa,…”). Man kann also sagen, je mehr Kommas, desto tiefer steckt der Eintrag im LDAP-Baum drin.

Dabei muss man pro Vererbung ein entscheidendes Attribut verwenden, wie die Einträge in der jeweiligen Stufe voneinander unterschieden werden. Habe ich also einen Einstiegsknoten “KDE” als ou angelegt und darunter den Eintrag (ou) “fans”, und alle Fans werden darin durch ihren Namen unterschieden, so würden die Einträge cn=Max Mustermann,ou=fans,ou=KDE” oder auch cn=Fidel Castro,ou=fans,ou=KDE” lauten. Dies wären alles DNs.

Der DN “cn=Mathias Lieber,ou=people,dc=lieber-linux,dc=de” sagt also aus: Unter dem Knoten “.de” im Internet gibt es eine Domänen-Teil namens “lieber-linux” (also zusammen gesprochen: Unter “lieber-linux.de”) gibt es eine Kiste, da steht drauf: “people”. Und da drinne liegt ein Eintrag, der auf den Namen “Mathias Lieber” hört. Hmm, wer könnte das wohl sein…? 😉

Einen eigenen LDAP-Baum pflanzen

Wenn man OpenLDAP installiert, wird man nach einem Einstiegsknoten gefragt. Wir wissen jetzt schon, dass es sich um den DN des base-Eintrags unseres zukünftigen LDAP-Baumes handelt. Toll! Der Debian Installer fragt eigentlich gar nicht nach dem DN direkt, sondern möchte von uns wissen, unter welcher Domäne man den Baum betreiben will. Wir geben also nur ein “lieber-linux.de”, und das war’s. Wie langweilig! Jetzt, wo wir wissen, was das ist, wollen wir es auch ausprobieren!

Man schaue sich dazu die Datei /etc/ldap/slapd.conf an, da steht noch mal alles aufgeführt:

1
2
# The base of your directory in database #1
suffix          "dc=lieber-linux,dc=de"
# The base of your directory in database #1
suffix          "dc=lieber-linux,dc=de"

Wer möchte, kann also in der Datei /etc/ldap/slapd.conf manuell herumfuhrwerken. Ich rate an dieser Stelle trotzdem davon ab, denn allein der base-DN macht noch kein funktionierendes LDAP. Um mit dem entstehenden Gebilde etwas anfangen zu können, braucht man nämlich noch die Administrator-Kennung, die bereits im LDAP-Tree enthalten sein sollte. Wird auch rootdn genannt. Diesen Eintrag könnte zum Beispiel unter “cn=admin,dc=lieber-linux,dc=de” liegen. Der Eintrag muss Attribute tragen, die man zur Authentifizierung verwenden kann (also ein Passwort-Hash und ein paar Begleiterscheinungen). Oder man gibt das Passwort während der Installationsphase in /etc/ldap/slapd.conf kurz mal im Klartext an (sollte nach Installation schleunigst entfernt werden!):

1
2
3
# Mein Startgebilde ist leer, ich brauche ein manuelles Passwort!
rootdn         "cn=admin,dc=lieber-linux,dc=de"
rootpw        ganzgeheim
# Mein Startgebilde ist leer, ich brauche ein manuelles Passwort!
rootdn         "cn=admin,dc=lieber-linux,dc=de"
rootpw        ganzgeheim

Als base-DN per suffix kann man eigentlich alles mögliche definieren, Hauptsache es ist syntaktisch korrekt. Man sollte trotzdem darauf achten, möglichst sinnvoll, kompatibel und eindeutig zu bleiben. Denn theoretisch kann man zwar alles unter “dc=ibm,dc=com” laufen lassen, aber erstens gehören wir da nicht hin (na vielleicht ein paar von Euch?), und zweitens hat LDAP ja noch diese Riesen-Vision eines weltweit vernetzten Mega-Adressbuchs im Hinterkopf, wo sich Euer LDAP-Baum dann geschmeidig einklinken wird. 🙂

Also definiert mal Euren eigenen Baum. Nächste Woche gehts an die Strukturierung, Befüllen und vielleicht noch etwas mehr zu den möglichen Attributen.

Fazit

  • Wir wissen, wofür LDAP da ist. (Teil 1)
  • Wir wissen, dass wir mit OpenLDAP eine Open-Source-Implementation installieren können. (Teil 1)
  • Wir wissen, was ein Eintrag ist – eine Ansammlung von Attributen und Werten. (Teil 2)
  • Wir wissen, wie ein Eintrag benannt wird – immer mit dem DN. (Teil 2)
  • Wir wissen, wie wir einen DN bilden und verstehen. (Teil 2)
  • Wir kennen die wichtigsten Attribute. (Teil 2)
  • Wir wissen, was LDIF ist – das LDAP-Text-Format – und wie es aussieht. (Teil 2)
  • Wir wissen, wie die LDAP-Datenbank strukturiert ist – nämlich hierarchisch. (Teil 2)
  • Wir wissen, was realm, base, tree und forest sind. (Teil 2)
  • Wir wissen, wie wir einen base-DN bilden. (Teil 2)
  • Wir wissen, wo wir den base-DN definieren können – als suffix in /etc/ldap/slapd.conf. (Teil 2)
  • Wir wissen, welchen base-DN für bilden sollten – unter unserer Domäne. (Teil 2)
  • Wir wissen, was rootdn ist – der DN des LDAP-Administrators. (Teil 2)
  • Wir wissen, wie wir ein manuelles Passwort für den rootdn vergeben können – mit rootpw. (Teil 2)
  • Wir wissen, dass ein manuelles Passwort nicht gut ist! (Teil 2)

“…und den ganffen Refft kann iff noch niff”

Zurück zu LDAP mit OpenLDAP, Teil 1


Das mark ich mir: Alltagz Mr Wong Yigg Del.icio.us Yahoo MyWeb Blinklist Google folkd
 

Leave a Reply

Your email address will not be published. Required fields are marked *