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.
Voraussetzungen: Linux (in diesem Fall wird von SuSE 8.2 (Minimal Installation) ausgegangen).
Installation Pakete:
Da innerhalb der minimalen Installation nicht alle hier erforderlichen Pakete installiert werden,
im folgenden eine Auflistung der hier benötigten Pakete. openldap2 quota make automake perl-Convert-ASNI perl-URI perl-XML-Simple perl-XML-Parser perl-Authen-SASL perl-IO-Socket-SSL XML-SAX-Base-x.xx perl-ldap-x.xx
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): XML-SAX-Base-x.xx:
tar -zxvf XML-SAX-Base-x.xx.tar.gz perl Makefile.PL make && make test make install
perl-ldap-x.xx:
gzip -d perl-ldap-x.xx.tar.gz tar -xof perl-ldap-x.xx.tar perl Makefile.PL make make test make install
LDAP-Server konfigurieren:
*** 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“. initial.ldif:
# 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
User mit „unix-ldap-useradd hinzufügen:
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) *** unix-ldap.useradd:
#!/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();
Konfiguration eMail-Client:
An dieser Stelle kann und will ich nicht auf jeden eMail-Client eingehen, deshalb wird nur in aller Kürze der von Mozilla angesprochen. Konfiguration „Mozilla“:
– Edit – Preferences – Adressing – Edit Directories
Name: Adressbuch Hostname: IP oder Hostname Base-DN: dc=mydomain.dc=de
Nun kann die entsprechende Person mittels des Namens auflöst werden.
Um eine neue eMail zu schreiben gibt man den Vornamen der betreffenden Person an – also z.B. Thomas in das To – Feld ein und drückt die
Tastenkombination Strg+K. Daraufhin wird eine Liste mit allen der Datenbank bekannten Usern „Thomas“ angezeigt.
Quellen:
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) |