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.


  • 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)


    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