LDAP-Adressbuch
Das folgende HowTo erklärt, wie man unter SuSE Linux ein (internes) globales Adressbuch mit dem Verzeichnisdienst openLDAP2v3 einrichtet, benutzt und administriert. Zudem habe ich ein kleines Perl-Skript geschrieben welches autom. einen Unix-User erstellt und den User dem Adressbuch hinzufügt.
Da innerhalb der minimalen Installation nicht alle hier erforderlichen Pakete installiert werden,
im folgenden eine Auflistung der hier benötigten Pakete.
Die letzten beiden Pakete (XML-SAX-Base-x.xx und perl-ldap-x.xx) bei CPAN herunterladen.
Die Pakete XML-SAX-Base und perl-ldap-0.30 müssen zuerst noch entpackt und kompiliert werden (z.B. in /tmp):
tar -zxvf XML-SAX-Base-x.xx.tar.gz perl Makefile.PL make && make test make install
gzip -d perl-ldap-x.xx.tar.gz tar -xof perl-ldap-x.xx.tar perl Makefile.PL make make test make install
*** Kursiv und Fett dargestellte Angaben müssen durch Eure Einstellungen abgeändert werden ***
Zuerst sollte folgende Ordnerstruktur auf dem Linux-Server angelegt werden:
/etc/openldap/db/scripte /etc/openldap/db/adressbook/
Die Datei "/etc/openldap/slapd.conf" sollte wie folgt aussehen
# slapd.conf include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/inetorgperson.schema pidfile /var/run/slapd.pid argsfile /var/run/slapd.args ####################################################################### # ldbm database definitions ####################################################################### allow bind_v2 database ldbm suffix "dc=mybase,dc=de" rootdn "cn=admin,dc=mybase,dc=de" rootpw password directory /var/lib/ldap index objectClass eq
Nun kann der LDAP-Server bereits mit "rcldap start" gestartet werden. Hier gilt den
Dienst dauerhaft mit dem Runlevel-Editor in Runlevel 3 und 5 einzutragen.
Als nächstes muss die Grundstruktur erstellt und der LDAP-Datenbank hinzugefügt werden.
Dazu erstellen wir folgendes Skript unter "/etc/openldap/db/scripte".
# Root erstellen dn: dc=mybase,dc=de objectClass: dcObject objectClass: organization o: myobject dc: de # Manager erstellen dn: cn=admin,dc=mybase,dc=de objectClass: person cn: admin sn: admin description: "LDAP Admin" # Containerobject "myobject" erstellen dn: o=myobject,dc=mybase,dc=de o: myobject objectClass: organization # Adressbuch erstellen dn: ou=adressbook,o=myobject,dc=mybase,dc=de ou: adressbook description: Adressbook objectClass: organizationalUnit
Mit folgendem Befehl wird die "initial.ldif" der LDAP-Datenbank hinzugefügt:
ldapadd -h hostname -x -D "cn=admin, dc=mybase, dc=de" -W -f initial.ldif
Um nicht User umständlich mit YAST und dem ldapadd-Befehl hinzuzufügen, ist es praktischer ein kleines Skript zu Hilfe zunehmen.
Deshalb hab ich mir folgendes kleines Skript in Perl geschrieben.
*** Wenn Ihr nur User dem Adressbuch hinzufügen wollt, löscht einfach den Unix-Part aus dem Script herraus (Die Variablen müsst Ihr natürlich in den LDAP-Abschnitt mit übernehmen) ***
#!/usr/bin/perl -w ######################################################## # Name: unix-ldap.useradd # #------------------------------------------------------# # Beschreibung: Script Legt einen Unix u. LDAP-User an # ######################################################## ########################### # Unix-User wird erstellt # ########################### print "Enter username (Unix):"; chomp ($Name =); system("useradd -g users -c Mail-User -s /bin/false $Name"); system("mkdir /home/$Name"); system("chown $Name /home/$Name"); system("chmod 700 /home/$Name"); system("passwd $Name"); print "User: $Name, has been added .\n"; ################################# # LDIF-File fuer User erstellen # ################################# $path="/etc/openldap/db/adressbook"; open(FILE, ">$path/$Name.ldif"); print "Enter firstname (LDAP):"; chomp ($FN = ); print "Enter surname (LDAP):"; chomp ($CN = ); print FILE "dn: cn=$FN $CN,ou=adressbook,o=myobject,dc=mybase,dc=de<\n"; print FILE "objectclass: top\n"; print FILE "objectclass: person\n"; print FILE "objectclass: organizationalPerson\n"; print FILE "objectClass: inetOrgPerson\n"; print FILE "sn: $CN\n"; print FILE "cn: $FN $CN\n"; print FILE "mail: $FN.$CN\@mydomain.de\n"; print "Enter Phonenumber:"; chomp ($PHONE = ); print FILE "telephoneNumber: $PHONE\n"; close (FILE); use Net::LDAP; use Net::LDAP::LDIF; ############ # Settings # ############ my $server = "myhost"; my $LDIFfile = "$path/$Name.ldif"; my $port = getservbyname("ldap", "tcp") || "389"; my $rootdn = "cn=admin, dc=mybase, dc=de"; my $pw = "password"; ###################### # Ldif-File einlesen # ###################### my $ldif = new Net::LDAP::LDIF($LDIFfile, "r"); my @eintraege = $ldif->read(); ####################################### # Verbindung zum LDAP-Server aufbauen # ####################################### my $c = new Net::LDAP($server, port => $port) or die "Kann Server $server nicht erreichen: $@\n"; $c->bind(dn => $rootdn, password => $pw) or die "Fehler bei Bindung: $@\n"; ############################################ # Datensatz der LDAP-Datenbank hinzufuegen # ############################################ for (@eintraege) { my $res = $c->add($_); warn "Fehler: add(" . $_->dn() . "): code " . $res->code . "\n" if $res->code(); } $c->unbind();
An dieser Stelle kann und will ich nicht auf jeden eMail-Client eingehen, deshalb wird nur in aller Kürze der von Mozilla angesprochen.
- Edit - Preferences - Adressing - Edit Directories
Name: | Adressbuch |
Hostname: | IP oder Hostname |
Base-DN: | dc=mydomain.dc=de |
Bücher:
"Perl für System-Administratoren" | O´Reilly | (ISBN: 3-89721-145-9) |
"LDAP verstehen, OpenLDAP einsetzen" | dpunkt.verlag | (ISBN: 3-89864-217-8) |
Software:
"LDAP-Browser" | Windows | Visit Homepage |
"LDAP-Admin" | Windows | Visit Homepage |
"GQ (LDAP-Browser)" | Linux | Visit Homepage |
"Diverse LDAP-Tools" | Linux / Windows | Visit Homepage |
Cont@ct: mail: Thomas Müller
[ Zurück zu Tom's Ecke ] [ Startseite ] [ Gästebuch ]
Die unter diesem Kapitel liegenden Seiten wurden erstellt von Thomas Müller