Linux NetMag
Titel: Adressbuch in einem LDAP-Server speichern
URL: http://www.linuxnetmag.com/de/issue9/m9ldap_adressbuch1.html
Artikel vom: 16.6.04
Autor: Marcel Alburg


Vorwort

Bei einem Adressbuch unterscheidet man zwei Varianten. Die erste ist das globale Adressbuch, wo der Nutzer ein öffentliches Adressbuch durchsuchen, aber nicht ändern kann. Dieses Adressbuch kommt meistens in großen Firmen vor, wo man die E-Mail- und Post- Adressen von allen Mitarbeitern speichert.

Die Zweite ist das private Adressbuch, wo der Nutzer seine Privaten Adressen hinzufügen, löschen und ändern kann.
Zu beachten ist die Rechtevergabe bei den beiden Adressbüchern. Das Globale Adressbuch sollte für alle Nutzer, die sich am LDAP Server angemeldet haben, verfügbar sein, und das Private darf nur für den jeweiligen Nutzer verfügbar sein.

Voraussetzungen

Man benötigt einen funktionierenden LDAP Server, wo schon ein paar Nutzer eingetragen sind und sich anmelden können. Möchte man nur ein globales Adressbuch nutzen, dann benötigt man die Anmeldung am LDAP Server nicht.

Einrichten des Servers - Globales Adressbuch

Je nach Linux Distribution findet man im /etc Verzeichnis einen Ordner ldap oder slapd. In diesem Ordner sollte eine slapd.conf zu finden sein. Ist dies nicht der Fall, kann man mit dem Befehl

  >> find / -name ''*ldap.conf'' 
  
danach suchen.

Folgende include Zeilen sollten in dieser Datei enthalten sein.

/etc/ldap/slapd.conf
  include         /etc/ldap/schema/core.schema
  include         /etc/ldap/schema/cosine.schema
  include         /etc/ldap/schema/nis.schema
  include         /etc/ldap/schema/inetorgperson.schema
  


Jetzt benötigt man nur noch einen geeigneten Ordner, wo alle Adressen gespeichert werden können. Am besten man fügt einen eigenen Ordner im Root hinzu. Man kann sich dazu eine Datei erstellen, die man später dem LDAP Server hinzufügt. Die folgende Datei erstellt einen Ordner im Root und fügt einen User hinzu.

/etc/ldap/global.ldif
  dn: ou=global-addressbook
  objectclass: organizationalUnit
  
  dn: cn=alburg,ou=global-addressbook
  cn: alburg
  sn: marcel
  mail: no-spam@spam.de
  departmentNumber: pr14
  preferredLanguage: german
  homePhone: 01231234567
  homePostalAddress: hauptstrasse 1
  roomNumber: 301
  mobile: 0170 1234567
  


Nach dem Abspeichern der Datei kann man diese Daten dem LDAP Server mit dem Befehl

  >> ldapadd -x -D ''[root-dn]'' -W -f global.ldif 
  
und nach Eingabe des LDAP Root Passwortes hinzufügen.
Das war es eigentlich auch schon. Wer kein privates Adressbuch benötigt, kann dann dan nächsten Punkt überspringen und bei den Einrichtung der Clients weiterlesen.

Einrichten des Servers - Privates Adressbuch

Ein privates Adressbuch sollte von keinen anderen Nutzer gesehen werden, und deshalb ist der Aufwand bei dem Server etwas höher.

Nehmen wir mal an, dass man folgende Struktur im LDAP hat:

   + dc=root
   + ou=user
   |	- uid=alburg
   + ou=groups
   |	- cn=users
   + global-addessbook
   |	- cn=alburg
  
Dann kann man unter dem User alburg noch einen Ordner anlegen, wo er dann seine privaten Adressen hinzufügen kann.

Dazu legt man sich eine Datei an, die man später dem LDAP Server hinzufügt.

/etc/ldap/private.ldif
  dn: ou=private-addressbook,uid=alburg,ou=user,dc=root
  objectclass: organizationalUnit
  
  dn: cn=alburg2,ou=private-addressbook,uid=alburg,ou=user,dc=root
  cn: alburg2
  sn: marcel
  mail: no-spam@spam.de
  departmentNumber: pr14
  preferredLanguage: german
  homePhone: 01231234567
  homePostalAddress: hauptstrasse 1
  roomNumber: 301
  mobile: 0170 1234567
  


Nach dem Abspeichern der Datei kann man diese Daten den LDAP Server mit dem Befehl

  >> ldapadd -x -D ''[root-dn]'' -W -f private.ldif 
  
und nach Eingabe des LDAP Root Passwortes hinzufügen.

Die Baumstruktur sollte dann folgendermaßen aussehen:

   + dc=root
   + ou=user
   |	- uid=alburg
   |		+ ou=private-addressbook
   |			- cn=alburg2
   + ou=groups
   |	- cn=users
   + global-addessbook
   |	- cn=alburg
  
Damit ein User nicht in den Ordner eines anderen User schauen und die privaten Adressen auslesen kann, sollte man so etwas verhindern.
In einigen Fällen nutzen Personen den LDAP Server nicht nur als Adressserver, sondern auch als Anmelde- oder Userserver. Dabei kann es zu einem Problem führen, dass das Attribut mail in dem einen Ordner beschreibbar sein muss und in dem anderen Ordner darf es nur zum Lesen freigegeben werden.

Zum Beispiel:
In dem Ordner uid=alburg,ou=user,dc=root muss das Attribut mail nur zum lesen sein, denn sonst könnte der User selbst seine E-Mail Adresse verändern. Wobei hingegen in dem Ordner *.ou=private-addressbook,uid=alburg,ou=user,dc=root das Attribut mail für die Mail-Adresse des Adressbuches zuständig ist, und deshalb benötigt der User darauf Schreibrechte.

Dazu fügt man in der slapd.conf Datei folgende Zeilen hinzu:

/etc/ldap/slapd.conf
   # hinzufügen der Schreibrechte im Privaten Adressbuch auf das Attribut Mail
   
   access to dn=".*,o=private-addressbook,uid=(.*),ou=user,dc=root" attr=mail
           by dn="uid=$1,ou=user,dc=root" write
           by dn="cn=manager,dc=alkronet,dc=de" write
           by * none
   
   # Setzen der Leserechte auf das Attribut im UserOrdner
   
   access to dn="uid=(.*),ou=user,dc=root" attr=mail
           by dn="uid=$1,ou=user,dc=root" read
           by dn="cn=manager,dc=alkronet,dc=de" write
           by * none
   
   
   # Damit der User auch in diese Ordnerebene reinschauen kann, muss man ihm
   # diese Rechte auch noch geben
   
   access to dn="uid=(.*),ou=user,dc=root"
           by dn="uid=$1,ou=user,dc=root" write
           by dn="uid=admin,ou=auth_user,o=webmail,dc=alkronet,dc=de" read
           by anonymous auth
           by * none
   
   access to dn="ou=user,dc=alkronet,dc=de"
           by dn="cn=manager,dc=alkronet,dc=de" write
           by anonymous auth
           by * read
   
   # Evolution hat sich etwas zickig verhalten, wenn diese Zeilen nicht mit 
   # drin stehen, denn dann kann man keine neuen Kontakte hinzufügen
   # ACHTUNG: Diese Zeilen sollten ganz am Ende stehen, da sonst andere Access-
   # listen ausgehebelt werden könnten
   
   access to attr=objectClass
           by anonymous auth
           by * search
   
   access to attr=entry,subschemaSubentry,objectClasses
           by anonymous auth
           by * read
  

Nach einem Neustart des LDAP Servers sollten die Rechte vergeben sein, und man kann mit einem Client auf das Adressbuch zugreifen.

Einrichten der Clients

Nützliche Software

Es gibt eine Menge Software, die wichtig sind für ein LDAP Adressbuch, die ich hier mal aufzählen möchte.

Fazit

Die MailClients unterscheiden sich kaum voneinander. Möchte man aber mit dem MailClient auch Adressen in einen LDAP Server hinzufügen, dann trennt sich die Streu vom Weizen. Nur Evolution ist in der Lage neue Adressen in den LDAP Server hinzuzufügen. OutLook Expres kann ich nicht empfehlen, da er das "Mail" Attribut des LDAP Servers nicht für die E-Mail Adresse nimmt und somit wird keine E-Mail bei der Suche angezeigt.

Aber vielleicht klappt es ja in der nächsten Zeit, dass man dann Adressen in den LDAP Server mit dem Mail Client hinzufügen kann. Wer weiss, was noch kommt. Aber demnächst kommt ja erst mal die Trennung des Mozilla Projektes, und vielleicht wird schon im nächsten Release diese Funktion bereitstehen.