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)