<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <META NAME="GENERATOR" CONTENT="lfparser_2.25"> <META NAME="LFCATEGORY" CONTENT="SystemAdministration"> <!-- this is used by a number of tools: =LF=AUTHOR: Atif Ghaffar =LF=CAT___: SystemAdministration =LF=TITLE_: LDAP unter Linux - Einführung =LF=NUMBER: 159 =LF=ANAME_: article159.shtml --> <TITLE>lf159, SystemAdministration: LDAP unter Linux - Einführung</TITLE> <!-- stylesheet added by lfparser: --> <style type="text/css"> <!-- td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 } pre { font-familiy:monospace,Courier } p.cl { color:#EE9500 } a.nodec { text-decoration:none } p.trans { font-size:8pt; text-align:right } p.clbox { width:50%; alignment:center; background-color:#FFD700; border-style:none; border-width:medium; border-color:#FFD700; padding:0.5cm ; text-align:center } p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:none; border-width:medium; border-color:#aedbe8; padding:0.1cm ; text-align:left } p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; border-width:medium; border-color:#AAAAAA; padding:0.5cm ; margin-top:0.1cm; margin-right:1cm; margin-left:1cm; text-align:center } --> </style> </HEAD> <BODY bgcolor="#ffffff" text="#000000"> <!-- this is generated html code. NEVER use this file for your translation work. Instead get the file with the same article number and .meta.shtml in its name. Translate this meta file and then use lfparser program to generate the final article --> <!-- lfparser can be obtained from http://www.linuxfocus.org/~guido/dev/lfparser.html --> <!-- 2pdaIgnoreStart --> <!-- start navegation bar --> <!-- top navegation bar --> <TABLE summary="topbar_1" cellspacing="0" cellpadding="0" border="0" align="center" width="90%"> <TR bgcolor="#2e2292"> <TD class="top"><TABLE summary="topbar_1_logo" cellspacing="0" cellpadding="0" border="0" width= "100%"> <TR><TD width="319"><IMG src="../../common/images/logolftop_319x45.gif" alt="[LinuxFocus-icon]" width="319" height="45" align="left" border="0"></TD> <TD class="top"> <TABLE summary="topbar_1_links" width="100%"> <TR align="right"> <TD class="top"><A class="nodec" href="../index.shtml"><FONT color= "#DDDDDD" size="2">Home</FONT></A> | <A class= "nodec" href="../map.html"><FONT color= "#DDDDDD" size="2">Plan</FONT></A> | <A class= "nodec" href="../indice.html"><FONT color= "#DDDDDD" size="2">Index</FONT></A> | <A class="nodec" href="../Search/index.html"><FONT color= "#DDDDDD" size="2">Suchen</FONT></A> </TD> </TR> <TR align="right"> <TD class="top"> <HR width="100%" noshade size="1"> </TD> </TR> </TABLE> </TD> </TR> </TABLE> </TD> </TR> </TABLE> <!-- end top navegation bar --> <!-- blue bar --> <TABLE summary="topbar_2" cellspacing="0" cellpadding="0" border="0" align="center" width="90%"> <TR bgcolor="#00ffff"> <TD><IMG src="../../common/images/transpix.gif" width="1" height= "2" alt=""></TD> </TR> </TABLE> <!-- end blue bar --> <!-- bottom navegation bar --> <TABLE summary="topbar_3" cellspacing="0" cellpadding="0" border="0" align="center" width="94%"> <TR bgcolor="#000000"> <TD> <TABLE summary="topbar_3_links" cellspacing="0" cellpadding="1" border="0" width= "100%"> <TR align="center"> <TD WIDTH="20%"><A class="nodec" href="../News/index.shtml"><FONT color= "#FFFFFF">Nachrichten</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../Archives/index.html"><FONT color= "#FFFFFF">Archiv</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../Links/index.shtml"><FONT color= "#FFFFFF">Links</FONT></A> </TD> <TD WIDTH="5%"><FONT color="#FFFFFF">|</FONT> </TD> <TD WIDTH="20%"><A class="nodec" href="../aboutus.html"><FONT color= "#FFFFFF">Über uns</FONT></A> </TD> </TR> </TABLE> </TD> </TR> </TABLE> <!-- end bottom navegation bar --> <!-- stop navegation bar --> <!-- SSI_INFO --> <!-- tr_staticssi include virtual --> <!-- tr_staticssi exec cmd --> <!-- addedByLfdynahead ver 1.1 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Dieser Artikel ist verfübar in: <A href="../../English/July2000/article159.shtml">English</a> <A href="../../Castellano/July2000/article159.shtml">Castellano</a> <A href="../../Deutsch/July2000/article159.shtml">Deutsch</a> <A href="../../Francais/July2000/article159.shtml">Francais</a> <A href="../../Nederlands/July2000/article159.shtml">Nederlands</a> <A href="../../Turkce/July2000/article159.shtml">Turkce</a> </FONT></TD></TR></TABLE><br> <!-- SSI_INFO STOP --> <!-- 2pdaIgnoreStop --> <!-- SHORT BIO ABOUT THE AUTHOR --> <TABLE ALIGN=LEFT BORDER=0 WIDTH="190" > <TR> <TD> <!-- 2pdaIgnoreStart --> <!-- PALM DOC --> <TABLE BORDER=0 hspace=4 vspace=4> <TR> <TD> <font size=1> <img src="../../common/images/2doc.gif" width=34 align=left border=0 height=22 alt="convert to palm"><a href="http://cgi.linuxfocus.org/cgi-bin/2ztxt">Convert to GutenPalm</a><br>or <a href="http://cgi.linuxfocus.org/cgi-bin/2pda">to PalmDoc</a></font> </TD> </TR> </TABLE> <!-- END PALM DOC --> <!-- 2pdaIgnoreStop --> <br> <IMG SRC="../../common/images/Atif-Ghaffar.jpg" ALT="[Photo of the Author]" HEIGHT=115 WIDTH=124> <BR>von Atif Ghaffar <br> <small><atif(at)developer.ch></small> <BR><BR> <I>Über den Autor:</I><BR> <p>Atif ist ein Chamäleon. Er verändert seine Rollen von Systemadministrator zu Programmierer, zu Lehrer, zu Projektmanager oder was immer in seinem Beruf benötigt wird. <br> Gelegentlich findet man ihn sogar auf der Toilette mit seinem Laptop wie er gerade dabei ist, Dokumentation zu schreiben. Atif glaubt daß er Linux und der Open-Source Gemeinde sehr viel verdankt. Mehr über ihn findet man auf seiner <a href="http://www.developer.ch/~aghaffar">Homepage</a></p> <!-- TRANSLATED TO de --> <BR><BR><I>Übersetzt ins Deutsche von:</I><BR> Harald Radke <small><harryrat(at)gmx.de></small> <br> <!-- TRANSLATED TO STOP --> <BR><i>Inhalt</i>: <UL> <LI><A HREF="#159lfindex0">Was ist LDAP?</A></LI> <LI><A HREF="#159lfindex1">Ausgangspunkt im Verzeichnis/Wurzel</A></LI> <LI><A HREF="#159lfindex2">Eindeutigkeit der Namen</A></LI> <LI><A HREF="#159lfindex3">LDAP Server</A></LI> <LI><A HREF="#159lfindex4">Aufsetzen des LDAP Verzeichnisses</A></LI> <LI><A HREF="#159lfindex5">Download und Installation von openLDAP</A></LI> <LI><A HREF="#159lfindex6">Konfiguration des LDAP Servers</A></LI> <LI><A HREF="#159lfindex7">Einträge dem frisch installierten LDAP Server hinzufügen</A></LI> <LI><A HREF="#159lfindex8">Anfrage an die LDAP Datenbank</A></LI> <LI><A HREF="#159lfindex9">Vorteile von LDAP</A></LI> <LI><A HREF="#159lfindex10">Beispiele zu LDAP</A></LI> <LI><A HREF="#159lfindex11">Artikel schreiben: Lehren und Lernen</A></LI> <LI><A HREF="#159lfindex12">Literaturverweise</A></LI> <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=159&lang=en">Talkback für diesen Artikel</A></LI> </UL> </TD></TR></TABLE> <!-- HEAD OF THE ARTICLE --> <br> <H2>LDAP unter Linux - Einführung</H2> <IMG SRC="../../common/images/illustration159_2.gif" ALT="openLDAP" HSPACE=10 HEIGHT=60 WIDTH=400 alt="article illustration"> <!-- ABSTRACT OF THE ARTICLE --> <P><i>Zusammenfassung</i>: <P> In diesem Artikel wird LDAP und seine Implementierung unter Linux, dem heissgeliebten Betriebssystem, ein wenig beleuchtet. <p>Es existiert eine Menge Literatur zu diesem Thema, deren Inhalt hier nicht wiederholt werden soll. Ebenso werden etwas fortgeschrittenere Aspekte von LDAP, wie etwa V2 contra V3, nicht behandelt. Tatsache ist, dass ich von diesen Dingen auch nicht allzuviel Ahnung habe. Stattdessen soll hier in einfachen Worten umrissen werden, was LDAP eigentlich ist, was es bringt und wie man es verwendet. <p> Ich bin kein Experte in Sachen LDAP, ja, eigentlich bin ich ein Neuling. Im Prinzip stellt dieser Artikel eine Art Erfahrungsbericht dar, über alles, was ich mit LDAP mache und wie es bewerkstelligt wird. Ich werde versuchen, den Leser die Verwirrung und Schwierigkeiten zu ersparen, denen ich mich lange Zeit konfrontiert sah. <p> Es stellt sich natürlich die Frage: Warum schreibt ein Anfänger auf einem Gebiet über dieses einen Artikel?<br> Vor kurzem benötigte ich die Hilfe eines Kollegen. Grundlage des Projektes war LDAP. Er konnnte mir zwar in Sachen Perl, Mailservern, uvm. helfen, LDAP war für ihn aber Neuland. Schlimmer, bei jedem Versuch sich in die Materie einzuarbeiten, wurden seine Verständnisprobleme größer. <br>Da eine gewisse Vertrautheit mit LDAP eine Mindestvoraussetzung für das Projekt war, gab ich ihm einen halbenstündigen Crashkurs, nach welchem ihm plötzlich alles klar war. Die Konzepte waren so einfach, er hatte alles vor Augen, es brauchte nur ein wenig Konzentration und ein paar verständliche Beispiele. <p> Selbiges wird in diesem Artikel versucht. <p> Bei den Literaturverweisen sind eine Menge URLs zu finden, durch die man ein wenig mehr über LDAP lernen kann. </P> <HR size="2" noshade align="right"><BR> <!-- BODY OF THE ARTICLE --> <A NAME="159lfindex0"> </A> <H2>Was ist LDAP?</H2> <p> LDAP ist die Abkürzung für <i>Lightweight Directory Access Protocol</i> und ist ein Verzeichnisdienst, vergleichbar den Verzeichnissen bekannter Dateisysteme oder Telefonbüchern, in denen man Nummern nachschlägt. Ähnlichkeiten bestehen zu netzzwerkorientierten Verzeichnissystemen, wie etwa Suns NIS, <i>Network Information System</i> oder DNS, <i>Domain Name Service</i>. Nicht zuletzt kann man auch Parallelen mit dem Baum im Garten des Nachbars finden... <p> LDAP ist eine spezialisierte Datenbank. Es ist sehr wichtig, dass man LDAP nicht einfach nur als ein weiteres Datenbanksystem betrachtet. LDAP wurde für das Auffinden (Lesen von Daten) optimiert, da Lesezugriffe wesentlich häufiger durchgeführt werden müssen, als Schreibzugriffe. <p>Was haben nun alle oben genannten Dienste gemeinsam ? <br>Sie alle geben Auskunft über bestimmte Attribute, wenn an sie eine entsprechende Anfrage gestellt wird. <p> <b>Beispiele.</b><br><br> <u>Verzeichnisse des Dateisystemes</u><br> <tt>ls /etc</tt> <br>Dadurch wird eine Liste aller Dateien und Unterverzeichnisse des Ordners <tt>/etc</tt> zurückgeliefert. <p> <tt>ls /etc/p*</tt> <br>Man erhält alle Dateien und Unterverzeichnisse, deren Namen mit <i>p</i> anfangen <p> <tt>find /usr/local/apache -name index.html</tt> <br>Hierdurch wird das Dateisystem nach Dateien/Verzeichnissen mit dem Namen <tt>index.html</tt> durchsucht, beginnend in <tt>/usr/local/apache</tt>. <p> <u>NIS Verzeichnis</u><br> <tt>ypcat passwd</tt> <br>Zurückgeliefert werden Benutzername, Passwort, ID, usw. aus der NIS Datenbank <p> <tt>ypmatch atif passwd</tt> <br>Ergebnis sind Einträge das Passwort des Benutzers <i>atif</i> betreffend <p> <u>DNS Verzeichnis</u><br> <tt>nslookup www.linuxfocus.org</tt> <br>Man erhält die IP Adresse von <tt>www.linuxfocus.org</tt> von der DNS Datenbank <p> <tt>nslookup -type MX linuxfocus.org</tt> <br>Hierdurch werden nur MX Informationen von der DNS Datenbank zurückgeliefert, in der der Hostname <tt>linuxfocus.org</tt> entspricht. <p> <u>LDAP directory</u><br> (hierzu später mehr Details) <p> <tt>ldapsearch uid=aghaffar</tt> <br>Es werden alle öffentlich zugänglichen Informationen über den Benutzer <i>aghaffer</i> zurückgeliefert. <br>Ähnlich dem Befehl <tt>find / -uid aghaffar</tt> unter Unix. <p> <tt>ldapsearch uid=aghaffar mail</tt> <br>Hierdurch bekommt man nur Mail für den Benutzer <i>aghaffar</i> zurückgeliefert. </p> <A NAME="159lfindex1"> </A> <H2>Ausgangspunkt im Verzeichnis/Wurzel</H2> <P> In jedem der oben genannten Verzeichnissyteme gibt es immer einen Ausgangspunkt von dem aus jede Reise oder Suche beginnt. Dieser wird oft auch <tt>Wurzel</tt> (Root) genannt, ähnlich der Wurzel eines Baumes. <br>Jeder Baum beginnt mit einer Wurzel und verzweigt sich dann in Äste, Blättern, Blüten, usw. <br> </p> <p> <ul> <li>Die Wurzel eines Dateisystemes ist / <li>Bei NIS ist die Wurzel der Domainname, zum Beispiel <i>linuxfocus.org</i> <li>beim DNS verwaltet Internic zum Beispiel die grundlegende Datenbank der Nameserver <li>ähnlich gibt es bei LDAP eine definierbare Basis, etwa <i>o=linuxfocus.org</i>, wobei <tt>o</tt> für <i>Organisation</i> steht </ul> Von jeder Wurzel können weitere Äste ausgehen (gleich dem Baum im Garten des Nachbarn), bei Dateisystemen zum Beispiel können weitere Unterverzeichnisse oder Dateien solche Äste sein. <br> Jeder solcher Zweige kann gewisse Attribute haben. <br> Ein Ast im Dateisystem (Verzeichnis/Datei) hat etwa folgende Eigenschaften: <ul> <li>Name</li> <li>Zeitpunkt der letzten Änderung</li> <li>Eigentümer</li> <li>Gruppe</li> <li>...</li> </ul> Es folgt ein Schaubild, welches ein Verzeichnis im Dateisytem darstellt.<br> Die Eigenschaften werden durch das Unix Kommando <tt>ls -ld /usr</tt> angezeigt.<br> <code>drwxr-xr-x 29 root root 749 Jun 17 23:45 /usr</code> <br> <img src="../../common/images/article159/fileSystemDirectory.png" alt="fileSystemDirectory"> <br> <p> Hier nun das Diagramm für ein LDAP Verzeichnis<br> <img src="../../common/images/article159/ldapDirectory2.png" alt="ldapDirectory"> <br>Auf dieses Diagramm wird später noch eingegangen werden. </p> <A NAME="159lfindex2"> </A> <H2>Eindeutigkeit der Namen</H2> <p> Im Gegensatz zu einem natürlichen Baum hat jede Verzweigung im Dateisystem-/LDAP-/Telefonbuchverzeichnis mindestens ein einzigartiges Attribut, durch welches sie sich von anderen unterscheidet. <p> Im Dateisystem ist dieses Attribut der Dateiname, zusammen mit dem Pfad, also zum Beispiel <br><code> /etc/passwd</code>. Innerhalb dieses Pfades muss der Dateiname <tt>passwd</tt> einzigartig sein. Natürlich kann es <tt>/usr/passwd</tt> oder <tt>/opt/passwd</tt> geben, welche durch ihren vollständigen Dateinamen (mit Pfad) eindeutig sind.<br> Ähnlich dazu gibt es beim DNS System den FQND, <i>Fully Qualified Domain Name</i>, welcher einen eindeutigen Eintrag darstellt (natürlich kann man einem FQDN mehrere IP Adressen zuordnen). <p> Beim LDAP stellt <tt>dn</tt>, <i>Distinguished Name</i>, das Äquivalent zum FQND des DNS dar. Diese Bezeichnung ist innerhalb eines Verzeichnisses immer einzigartig. Zum Beispiel lautet mein <tt>dn</tt>: <i>uid=aghaffar, ou=People, o=developer.ch</i> <br> Es kann keinen weiteren Eintrag mit dem selben <tt>dn</tt> geben, aber sicherlich einen weiteren wie: <i>uid=aghaffar,ou=Administrators, o=developer.ch</i> <br>Ganz wie in dem oben gezeigten Beispiel des Dateisystemes, mit: <tt>/etc/passwd</tt> und <tt>/usr/passwd</tt> <br> Es gibt ein einzigartiges Attribut namens <tt>uid</tt> im Baum <i>ou=Administrators, o=developer.ch</i> und eines im Baum <i>ou=People, o=developer.ch</i>.<br>Deshalb kommt es zwischen diesen zu keinem Konflikt. </p> <A NAME="159lfindex3"> </A> <H2>LDAP Server</H2> <p> Es gibt heutzutage eine ganze Reihe von LDAP Servern auf dem Markt, von denen die meisten unter Linux gefahren werden können.<br> Für diesen Artikel wird <i>openLDAP</i> verwendet.<br> <p> Warum gerade openLDAP? <ul> <li>Weil das Programm Open Source ist</i> </ul> openLDAP kann man von <a href="http://www.openldap.org">www.openldap.org</a> beziehen. Entweder lädt man sich die Quellcodes herunter und übersetzt sie sich selbst oder man schaut, ob die eigene Linux Distribution bereits ein vorübersetztes Paket beinhaltet. Sollte dies der Fall sein, kann man sich die Arbeit sparen und einfach diese Pakete installieren.<br> Ich selbst habe openLDAP unter SuSE 6.x und RedHat 6.x getestet. </p> <A NAME="159lfindex4"> </A> <H2>Aufsetzen des LDAP Verzeichnisses</H2> <p> Im folgenden wird Schritt für Schritt ein LDAP Server eingerichtet.<br> Hierfür notwendig: <ul> <li>das Herunterladen von openLDAP und dessen Installation</li> <li>die Konfiguration des LDAP Servers </li> <li>die Konfiguration der lokalen Umgebung, so dass diese den installierten LDAP Dienst nutzt</li> <li>Initialisierung der LDAP Datenbank</li> <li>Anfragen an das LDAP System</li> <li>Hinzufügen und Ändern von LDAP Einträgen</li> </ul> </p> <A NAME="159lfindex5"> </A> <H2>Download und Installation von openLDAP</H2> <p> Wie bereits erwähnt kann man entweder die Quellen von www.openldap.org herunterladen und, entsprechend der Dokumentation, installieren oder bereits vorkompilierte Pakete verwenden. Die Anleitung zur Installation dieser Pakete oder eine Beschreibung, wie die Programme übersetzt werden, würde diesen Artikel sprengen und wird hier deshalb nicht zu finden sein. </p> <A NAME="159lfindex6"> </A> <H2>Konfiguration des LDAP Servers</H2> <p> Als Beispiel soll hier nun ein LDAP Verzeichnis für <i>linuxfocus.org</i> erstellt werden. <br> Natürlich kann der Leser die Namen und andere Daten entsprechend den eigenen Bedürfnissen anpassen. Für die Konfiguration des Hauptservers müssen die Dateien <tt>slapd.conf</tt> und <tt>ldap.conf</tt> angepasst werden, man kann dazu seinen bevorzugten Texteditor verwenden.<br> Auf meinem Server sind diese Dateien unter <tt>/etc/openldap</tt> zu finden. Abhängig von der verwendeten Linux Distribution können sie aber auch unter <tt>/usr/local/etc/openldap</tt> oder an anderen Stellen zu finden sein, abhängig von den Parametern etwa, die man während des Übersetzens der Quellen angegeben hat. <pre> ######### /etc/openldap/slapd.conf ################################### # folgende Einträge werden standardmäßig von der SuSE 6.4 Distribution # gesetzt sie werden im zweiten oder dritten Teil dieser Artikelserie # beschrieben vielleicht werde ich bis dahin auch herausgefunden haben, # wofür sie gut sind :) include /etc/openldap/slapd.at.conf include /etc/openldap/slapd.oc.conf schemacheck off pidfile /var/run/slapd.pid argsfile /var/run/slapd.args ####################################################################### # Einstellungen für die LDAP Datenbank ####################################################################### # hier wird die zu verwendende Datenbank bestimmt, man sollte den # Standardwert (ldbm) lassen database ldbm # Endung bzw. Verzeichniswurzel. Dies ist der oberste Eintrag im # LDAP Verzeichnis suffix "o=linuxfocus.org" # Hier ist die LDAP Datenbank zu finden directory /var/lib/ldap # der (einzigartige) Name des Verwalters des Verzeichnisses rootdn "cn=Manager, o=linuxfocus.org" # keine gute Idee, das Passwort des LDAP Verwalters in Klartext # einzutragen, dies geschieht hier nur anfangs, bis man sich ein # wenig mit LDAP auseinandergesetzt hat rootpw secret # das war's erstmal </pre> Man modifiziert nun die Datei <tt>/etc/openldap/ldap.conf</tt>.<br> Diese Datei ist auf den LDAP Clients zu finden (in diesem Fall fungiert derselbe Rechner als Server und als Client). <br> Sie wird häufig von LDAP Programmen wie etwa <tt>ldapdelete</tt>, <tt>ldapadd</tt>, u.a. verwendet. <p> <pre> ##########/etc/openldap/ldap.conf######### # # LDAP Defaults # # Mehr Details auf der Man-Page ldap.conf(5) # Diese Datei sollte global lesbar sein # hier wird der LDAP Server angegeben, Rechname oder IP Adresse host 127.0.0.1 # dies ist die Verzeichniswurzel, die als Ausgangspunkt für alle # Suchen dienen soll hier wird der oberste Eintrag unserer Konfiguration # gewählt dies muss aber nicht unbedingt der Fall sein, es könnte # auch zum Beispiel base = ou=users, o=linuxfocus.ch sein # Entsprechend starten dann alle Suchaktionen von diesem Zweig des # Baumes aus. base o=linuxfocus.org # und Schluss... </pre> Nun wird der LDAP Server hochgefahren. <br> Wird das LDAP Paket von SuSE verwendet, so kann der Server mittels <br> <tt>/etc/rc.d/ldap start</tt> gestartet werden.<br> Unter RedHat sollte es <br><tt>/etc/rc.d/init.d/ldap start</tt> tun<br> Wer den Quellcode selbst übersetzt und installiert hat und dabei die Standardwerte verwendete, sollte mit <tt>/usr/local/libexec/slapd &</tt>, oder einem entsprechenden Aufruf (abhängig von dem gewählten Installationsverzeichnis) den Server starten. Man muss nur <tt>slapd</tt> finden und aufrufen.<br> </p> <A NAME="159lfindex7"> </A> <H2>Einträge dem frisch installierten LDAP Server hinzufügen</H2> <p> Nun sollte der LDAP Server laufen und bereit für die Aufnahme von Informationen sein.<br> Dazu werden normalerweise LDIF, <i>LDAP Directory Interchange Format</i>(*), Dateien angelegt. ldif ist einfach die textuellde Darstellung der LDAP Einträge. Diese sind für Menschen lesbar und können zwischen zwei verschiedenen LDAP Server von unterschiedlichen Herstellern ausgetauscht werden, auch wenn verschiedene Backends für die Datenbanken verwendet und diese unter verschiedenen Betriebssystemen betrieben werden. Für eine ausführlichere Beschreibung sollte man sich die Manualpages von <tt>ldif</tt> anschauen.<br> <br> <i><font=-1>(*)Ja, ja, wieder ein anderes Dateiformat. Ich frage mich, wieso man stattdessen nicht einfach XML verwendet</font></i> <p> Nun wird ohne weitere Umschweife diese ldif Datei erstellt. Was man in Erinnerung halten sollte ist, dass: <ul> <li>Jeder Eintrag in der ldif Datei durch eine Leerzeile von dem nächsten getrennt wird <li>Leerzeichen innerhalb der Werte durchaus eine Rolle spielen, so ist "Atif Ghaffer" ungleich "Atif Ghaffer " </ul> Die ldif Datei <tt>linuxfocus.org.ldif</tt>: <pre> dn: o=linuxfocus.org o: linuxfocus.org objectclass: top objectclass: organization dn: ou=editors, o=linuxfocus.org ou: editors objectclass: organizationalUnit dn: uid=aghaffar, ou=editors, o=linuxfocus.org uid: aghafar cn: Atif Ghaffar sn: Ghaffar givenname: Atif objectclass: person userpassword: {CRYPT}yIvSBWSuLs2N2 mailacceptinggeneralid: aghaffar@linuxfocus.org ou: editors dn: uid=mkempe, ou=editors, o=linuxfocus.org uid: mkempe cn: Magnus Kempe sn: Kempe givenname: Magnus objectclass: person userpassword: clearpass mailacceptinggeneralid: mkempe@linuxfocus.org maildrop: mkempe@developer.ch preferredlanguage: fr ou: editors </pre> Nun müssen diese Informationen noch dem LDAP Verzeichnis hinzugefügt werden. Dazu wird der Befehl <tt>ldapadd</tt> verwendet:<p> <tt>ldapadd -D "cn=Manager, o=linuxfocus.org" -w secret < linuxfocus.org.ldif</tt><p> Dieses Kommando verwendet <i>cn=Manager, o=linuxfocus.org</i> als <tt>dn</tt> des Verwalters und <tt>secret</tt> als Passwort und liest Informationen aus der Datei <tt>linuxfocus.org.ldif</tt> und fügt diese dem LDAP Verzeichnis hinzu. <br>Sollte alles geklappt haben, sollte man nun Anfragen an das LDAP Vereichnis stellen können. Alternativ, sollte es doch Probleme geben, mag der Leser an dem Punkt angekommen sein, meine Mailbox mit Post zu überfluten ;) <br><br>Jedoch hoffe ich zum Wohle meines Mailservers, dass alles funktioniert. <p> Bevor es weitergeht, hier eine zeilenweise Betrachtung der ldif Datei: <ol> <li>In dieser Zeile wird der <tt>dn</tt> des obersten Eintrages angegeben. Er stellt die Wurzel des Verzeichnisbaumes dar. <br>Dieser Eintrag muss existieren. <li>Hier wird <tt>o</tt> (die Organisation) spezifiziert und als Wert "linuxfocus.org" verwendet. <li>Definition der Klasse dieses Objektes. In diesem Fall <i>top</i>. <li>Typspezifizierung des Objektes, hier ist es ein Objekt vom Typ <i>organisation</i>. <li>Leerzeile zur Trennung. <li><tt>dn</tt> der Gruppe <i>editors</i> (Verzweigung für die Editoren des LinuxFocus) <br>Es können mehrere solcher Zweige für verschiedene Zwecke definiert werden, zum Beispiel für Rechner und deren Daten, für Mirrors, die den Server spiegeln, usw. <li>Hier wird explizit das Attribut <tt>ou</tt>,<i>Organisational Unit</i>, für <tt>editors</tt> spezifiziert. <br>Über diese Attribute kann eine Suche gestartet werden. Will man etwa alle Benutzer finden, die Editoren sind, kann man dies mittels <tt>show all dn where ou=editors</tt> bewerkstelligen. Wird diese Definition nicht getätigt, so wird dieser Eintrag nicht erfasst. <li>Definition der Objektklasse (organizationalUnit) <li>Leerzeile <li><tt>dn</tt> für den Benutzer <tt>aghaffer</tt> der Gruppe <tt>editors</tt> <li>die <tt>uid</tt> (muss eindeutig sein!) des Benutzers <li>Der <tt>cn</tt>, <i>Common Name</i>, des Benutzers. Beispielsweise bevorzuge ich "Vorname Nachname", andere jedoch "Nachname Vorname". <li><tt>sn</tt>: Nachname <li><tt>givenname</tt>, der Vorname <li>Objektklasse <tt>person</tt> <li>Passwort des Benutzers (verschlüsselt). Die Zeichenkette <tt>{CRYPT}</tt> deutet an, dass dieses Passwort mittels diesem Verschlüsselungsalgorithmus kodiert worden ist. Es folgt das verschlüsseltet Passwort "yIvSBWSuLs2N" - im Klartext <i>test</i>, verschlüsselt mit dem Salt "yI". <li>Hier steht eine E-Mail Adresse unter der ich erreicht werden kann. <li><tt>ou</tt>, dadurch werde ich der <tt>organizationalUnit</tt> namens <i>editos</i> zugeordnet. <li>Trennzeile <li>Ein weiterer <tt>dn</tt>. Benutzername <i>mkempe</i>, <tt>ou</tt>: <i>editors</i> <li>Eintrag des <i>Common Name</i>s. <li>Nachname <li>Vorname <li>Objektklasse <li><tt>userpassword</tt>. Man beachte, dass hier nun ein Passwort im Klartext angegeben ist. Es bleibt einem selbst überlassen, welche Methode man verwendet. Für jeden Eintrag kann dies festgelegt werden, nicht global für eine Datenbank. Es kann also ein Benutzer sein Passwort in Klartext, ein anderer verschlüsselt, mit <tt>CRYPT</tt> oder <tt>SHA</tt> usw. angeben. <li>E-Mailadresse unter welcher der Benutzer Post empfangen kann (im allgemeinen für den Mailserver). <li><tt>maildrop</tt>: Auch dieser Eintrag dient dem Mailserver. Er legt den wirklichen Ort fest, an dem die Mailbox des Benutzers zu finden ist. In diesem Beispiel akzeptiert der Server Post an die Adresse <i>mkempe@linuxfocus.org</i>. Der Mailserver sendet eine Anfrage an den Server, etwa " Gibt es eine Mailbox für mkempe@linuxfocus.org". Daraufhin sendet der LDAP Server die Werte des <tt>maildrop</tt> Attributes zurück. An diese Adresse verschickt der Mailserver dann die Post, mehr dazu später. Ich baue gerade die Infrastruktur eines ISP, <i>Internet Service Provider</i>s, auf und setze sehr extensiv LDAP für die Verwaltung virtueller Domänen, deren Informationen, Benutzer, usw. ein. Wer Interesse daran hat, kann mir gerne schreiben. <li><tt>preferredlanguage</tt>: Ein Attribut, mit welchem die vom Benutzer bevorzugte Sprache festgelegt wird. Dieses Attribut ist eines neben weiteren, die die Präferenzen des Benutzers beschreiben und zentral im LDAP festgehalten werden, wodurch den Benutzern ein besserer Service geboten werden kann. Beispielsweise kann dieser Benutzer immer direkt zu der französischen Version der Seiten weitergeleitet werden.<br> Man beachte, dass die vorhergehenden Einträge diese Attribute (preferredlanguage, maildrop,...) nicht definiert hatten. Eine der Stärken von LDAP, es gibt keine fest vorgegebene Struktur wie in einer Datenbanktabelle. Ein Eintrag kann nur drei Attribute haben, der nächste aber 30. <li><tt>ou</tt>: <i>editors</i> </ol> </p> <A NAME="159lfindex8"> </A> <H2>Anfrage an die LDAP Datenbank</H2> <p> Alle Informationen über den Benutzer <i>mkempe</i>: <p> <tt>ldapsearch uid=mkempe</tt> <p> Die <tt>dn</tt> aller Editoren: <p> <tt>ldapsearch '(&(objectclass=person)(ou=editors))' dn</tt> <p> Weitere Beispiele sind auf den Man-Pages zu <tt>ldapsearch</tt> zu finden. </p> <A NAME="159lfindex9"> </A> <H2>Vorteile von LDAP</H2> Was bringt es nun, auf LDAP umzusteigen? <p> LDAP ist ein offener Standard. Die meisten neuen Programme, die man verwenden wird, werden in der Lage sein, LDAP Datenbanken zu benutzen, um Informationen zu erlangen. Selbst Windows 2000 verwendet LDAP für seine Verzeichnisdienste.<br> Alle Informationen in einem Punkt zu sammeln birgt enorme Vorteile: nur eine zu verwaltetende Site, geringere Fehleranfälligkeit, weniger Daten mehrfach verteilt und so keine Notwendigkeit diese zu sichern/aktualisieren. </p> <A NAME="159lfindex10"> </A> <H2>Beispiele zu LDAP</H2> <p> Als ein Compaq Mitarbeiter könnte ich jetzt hingehen und versuchen, jemanden LDAP anzudrehen, indem ich es als "Contacts Manager" preise. Da ich aber nicht bei Compaq angestellt bin, stell ich hier eine etwas interessantere LDAP Anwendung vor. <P> <B><FONT SIZE=+2>SINGLE SOURCE OF SIGN-ON</font></b> <BR> Die Accounts aller Benutzer sind zentral gespeichert.<br> Die Benutzer können über einen LDAP Verzeichnisbaum verwaltet werden, mit ihren Passwörten und noch viel mehr Informationen, die nicht in einer einfachen Datei wie <tt>/etc/passwd</tt> untergebracht werden können. Die Benutzer können MS Windows, Unix, Mac,... Anwender sein. <br> <b>Idee</b> Authentifizierung kann direkt über die LDAP Daten anstelle von Shadowdatei, NIS, o.ä. vollzogen werden, dazu muss man Dateien wie <tt>/etc/pam.d/login</tt> usw. entsprechend anpassen.<br> <b>Idee</b> Über ein selbstgeschriebenes kleines WWW Interface kann man es den Benutzern ermöglichen, ihr Unix Passwort zu ändern, ohne sich in das System einzuloggen, da diese Information im LDAP und nicht im System gespeichert ist. Dafür wird allerdings <tt>pam_ldap</tt> benötigt. Am Ende dieses Artikels ist ein Verweis zu <tt>pam_ldap</tt> zu finden. <BR><BR> <B>ACHTUNG</b><BR> <FONT COLOR="GREEN">Single Source Of Sign-On</font><FONT COLOR="RED"> != </font><FONT COLOR="green">Single Sign-On.</font> <br>Viele LDAP Anbieter versuchen ihre Produkte dadurch zu verkaufen, das sie behaupten, dass man mit einem LDAP System eine Single Sign-On Lösung realisieren kann. <br>Das ist nur die halbe Wahrheit. Single Sign-On ist etwas ganz anderes und ist eines der großen Schlagworter vieler IT Manager heutzutage.<br> Ein Beispiel für Single Sign-On: <UL> <li>Man meldet sich bei seinem Rechner als "aghaffar" an <li>Man surft ins firmeneigene Intranet, dessen Website passwortgeschützt ist und passiert die Sperre ohne sich einzuloggen, wobei die eigene Identität dem Intranetsystem bekannt ist. <li>Man startet ein anderes Programm, etwa SAP und benötigt wieder kein Passwort, Identität und weitere Informationen liegen aber vor. <li>... </ul> Natürlich kann man LDAP als zentrale Quelle aller Benutzerinformationen verwenden, das Zauberwort für Sitzungsmanagment zwischen verschiedenen Programmen heißt"Single Sign On" Lösung und hat überhaupt nichts mit LDAP zu tun. <br>Man kann dies wohl aber mittels LDAP, NIS, Accounts zur Verwaltung von NT Domänen, Datenbanken, uvm. realisieren. <p> <b>Idee</b> Man mag zwar Benutzern einen E-Mailaccount auf dem Server einrichten, aber dazu keinen Unixaccount anlegen. Kein Problem, ich verwende hierfür LDAP zusammen mit dem <i>Postfix</i> Mailserver, sowie dem <i>Cyrus</i> IMAP/POP Server. Tausende von Benutzer werden so verwaltet, ohne dass einer von ihnen einen Account auf dem System hat. <p> <b>Idee</b> Man möchte die Einstellungen für verschiedene Programme zentral ablegen. Einstellungen und Bookmarks von Netscape zum Beispiel können mittels LDAP verwaltet werden. Der Benutzer kann von Rechner zu Rechner ziehen und immer seine persönlichen Einstellungen vom LDAP Server beziehen. Er kann von Netscape unter Windows NT zur Linux/Solaris/Macintosh Netscapeversion wechseln und dennoch dieselben Informationen verwenden (Tut mir leid, Microsoft, ich weiss, dies ist recht bitter für Euch). <p> <b>Eine Anwendung</b> Ich hasse es, meine persönlichen Daten immer und immer wieder anzugeben, sei es auf dem Papier oder im Netz. Mir ist nicht klar, warum manche Menschen mit schöner Regelmäßigkeit mein Alter, Geburtsdatum oder meine Adresse wissen wollen, obwohl ich sie ihnen irgendwann einmal habe zukommen lassen (Bürokratie...). Bei meinem letzten Arbeitgeber mussten umfangreiche Formulare für den Help-Desk Betrieb angelegt werden, die zu 75% ebenfalls auf obigen Daten basierten (Vorname, Nachname, Position, Postfach, Etage, Name des Leiters, Abteilung). Statt nun seine Benutzer zu nerven und das Risiko einzugehen, des Nachts von Fremden, die diesen verblüffend ähnlich sehen, Gewalt angetan zu bekommen, sollte man sie lieber nach den wirlich wichtigen Informationen fragen, zum Beispiel nach ihrer ID, den Rest stellt einem LDAP zur Verfügung. Alle danach noch fehlenden Daten, kann man dann wiederum vom Benutzer erfragen. <br> <b>Idee</b> Angenommen, mein Telefon funktioniert nicht, die einzigen Informationen, die ich geben kann, ist: "Mein Telefon funktioniert nicht". <br> Ein Benutzer wäre wesentlich zufriedener mit dem Intranet, wenn: <ul> <li>er eine URL zur Hand hätte, die ihn zu einer WWW Seite für die Meldung von Problemen bringt <li>diese Seite über einen Name/Passwort Login gesichert wäre (jeder Benutzer muss sich nur einmal anmelden, das System merkt sich die Informationen für diesen oder weitere gesicherte Bereiche für eventuelle spätere Besuche) <li>die Seite zwei Elemente hätte, eine Textbox, in welcher man die Fehlerbeschreibung eingeben kann und einen Knopf, mit welchem diese abgeschickt wird. </ul> </p> <A NAME="159lfindex11"> </A> <H2>Artikel schreiben: Lehren und Lernen</H2> <p> Ich hoffe, dieser Artikel konnte dem Leser ein wenig hilfreich sein, oder aber zumindest den Heisshunger seines Geistes nach digitaler Nahrung etwas stillen.<br>Wie man sieht, muss man kein Experte in einem Gebiet sein, will man sein Wissen mit anderen teilen. Genausowenig braucht es einen Professortitel oder eine Lehramtsausbildung, um Anleitungen zu schreiben. Auch die kleinste Information kann Anwendern helfen.<br>Mir persönlich fällt das Lernen einfacher, wenn ich jemand anderem beibringen will, was ich bereits weiss. Wer mag, sollte mal diese Methode ausprobieren.<p> Glücklicherweise wird heutzutage mehr und mehr über Linux geredet. Viele probieren dieses Betriebssystem auch aus, einige geben schnell wieder auf, während andere ein wenig mehr Ausdauer haben. Diese Anwender haben zum Teil gar keine Ahnung von Unix Befehlen oder dem generellen Konzept, einige von ihnen knabbern eine ganze Weile an einem bestimmten Problem herum.<br> Sollte dies den ein oder anderen Leser an seine jüngsten Erfahrungen erinnern, so qualifiziert ihn dies doch dafür, anderen zu helfen.<br><br> Wer anderen Linuxern zwar helfen möchte, allerdings glaubt, er hat kein Wissen zu bieten, dass einen Artikel füllen könnte, kann zum Beispiel Artikel in seine Muttersprache übersetzen. </p> <A NAME="159lfindex12"> </A> <H2>Literaturverweise</H2> <P> <DL> <Dt> <A HREF="http://www.padl.com/pam_ldap.html">PAM LDAP Modul</a> </dt> <Dd> Das <tt>pam_ldap</tt> Modul ermöglicht es Solaris und Linux Rechern, Authentifizierung und Passwortverwaltung über LDAP Verzeichnisse zu realisieren. </dd> <DT> <A HREF="http://www.openldap.org/">OpenLDAP</a> </dt> <DD> Das OpenLDAP Projekt stellt einen gemeinschaftlichen Versuch dar, eine zuverlässige, kommerziellen Ansprüchen genügende Open Source Softwarelösung (Anwendungen und Entwicklungswerkzeuge) für den LDAP Dienst zu erschaffen. Das Projekt wird von Freiwilligen auf der ganzen Welt getragen, die über Internet miteinander kommunizieren, planen und die Entwicklung von OpenLDAP und dessen Dokumentation vorantreiben. </dd> <DT> <a href="http://www.iit.edu/~gawojar/ldap/">Ein klasse LDAP Browser/Editor, auf Java basierend</a> </dt> <DD> Der LDAP Browser/Editor stellt einen benutzerfreundlichen Zugang zu LDAP Verzeichnissen dar, bietet sowohl die Möglichkeit, Informationen zu visualisieren, als auch sie anzupassen. Er ist komplett in Java geschrieben, unter Verwendung von JFC (SwingSet) und den JNDI Klassenbibliotheken. Er kann sowohl mit LDAP V2, als auch V3 Servern arbeiten. </dd> <DT> <A HREF="http://www.mountpoint.ch/oliver/kldap/">kldap</a> </dt> <DD> Dies ist ein LDAP Client (genauer: Browser) unter KDE. Man kann durch die Verzeichnisse traversieren, ähnlich dem Novell Administrator. </dd> <DT> <A HREF="http://freshmeat.net/search.php3?query=ldap">http://freshmeat.net/search.php3?query=ldap</a> </dt> <DD> Viele Werkzeuge rund um LDAP bei Freshmeat </dd> <DT> <A HREF="http://www.redbooks.ibm.com/abstracts/sg245110.html">http://www.redbooks.ibm.com/abstracts/sg245110.html</a> </dt> <DD> <i>LDAP Implementation Cookbook</i> (von IBM)<BR> Das Buch kann man entweder online verwenden, oder eine gebundene Version bestellen </dd> <DT> <A HREF="http://www.padl.com/ldap-nis_gateway.html">ypldapd - nis 2 ldap gateway</a> </dt> <DD> Ypldapd ist ein NIS, <i>Network Information Server</i>, Server, der LDAP als Datenbasis verwendet. Mittels <tt>ypldapd</tt>, können NIS Clients transparent LDAP nutzen, um Benutzer-, Gruppen- und Rechnerinformationen zu erhalten. Firmen sollten die Vorteile von LDAP zu schätzen lernen, wie etwa Skalierbarkeit, ohne die verwendeten Programme aktualisieren zu müssen. In Verbindung mit LDAP kann mit Servern wie dem des Netscape Verzeichnisdienstes und <tt>ypldapd</tt> eine Single Sign-On Lösung für NT und UNIX Clients realisiert werden. </dd> <DT> <A HREF="http://www.umich.edu/~dirsvcs/ldap/doc/guides/slapd/1.html#RTFToC1">Introduction to the SLAPD and SLURPD Administrator's Guide </a> </dt> <DD> Ein Muss für jeden interessierten Leser. Viele nützliche Informationen zu dem LDAP Protokoll und LDAP Servern. </dd> <DT> <A HREF="http://www.kingsmountain.com/ldapRoadmap.shtml">An LDAP RoadMap & FAQ</a> </dt> <DD> Eine Hilfe, wie man durch verschiedene LDAP und X.500 Verzeichnisdienste im Internet traversieren kann. </dd> <DT> <A HREF="http://www.umich.edu/~dirsvcs/ldap/index.html">http://www.umich.edu/~dirsvcs/ldap/index.html</a> </dt> <DD> Lightweight Directory Access Protocol </dd> </dl> <BR><BR> </p> <!-- vim: set sw=2 ts=2 et: --> <!-- 2pdaIgnoreStart --> <A NAME="talkback"> </a> <h2>Talkback für diesen Artikel</h2> Jeder Artikel hat seine eigene Seite für Kommentare und Rückmeldungen. Auf dieser Seite kann jeder eigene Kommentare abgeben und die Kommentare anderer Leser sehen: <center> <table border="0" CELLSPACING="2" CELLPADDING="1"> <tr BGCOLOR="#C2C2C2"><td align=center> <table border="3" CELLSPACING="2" CELLPADDING="1"> <tr BGCOLOR="#C2C2C2"><td align=center> <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=159&lang=en"><b> Talkback Seite </b></a> </td></tr></table> </td></tr></table> </center> <HR size="2" noshade> <!-- ARTICLE FOOT --> <CENTER><TABLE WIDTH="98%"> <TR><TD ALIGN=CENTER BGCOLOR="#9999AA" WIDTH="50%"> <A HREF="../../common/lfteam.html">Der LinuxFocus Redaktion schreiben</A> <BR><FONT COLOR="#FFFFFF">© Atif Ghaffar, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT> <BR><a href="http://cgi.linuxfocus.org/cgi-bin/lfcomment?lang=de&article=article159.shtml" target="_TOP">Einen Fehler melden oder einen Kommentar an LinuxFocus schicken</A><BR></TD> <TD BGCOLOR="#9999AA"> <!-- TRANSLATION INFO --> <font size=2>Autoren und Übersetzer:</font> <TABLE> <tr><td><font size="2">en --> -- : Atif Ghaffar <small><atif(at)developer.ch></small></font></td></tr> <tr><td><font size="2">en --> de: Harald Radke <harryrat(at)gmx.de></font></td></tr> </TABLE> </TD> </TR></TABLE></CENTER> <p><font size=1>2002-02-24, generated by lfparser version 2.25</font></p> <!-- 2pdaIgnoreStop --> </BODY> </HTML>