OpenLDAP


Installation de OpenLDAP à l'Ecole des Mines d'Alès.

Ce document est un pense bête initialement à usage interne et suppose la connaissance de LDAP et du format LDIF (cf. bibliographie).
 

1. Installation

1.1. Linux (RPM)

    Il est soit possible de compiler l'archive soit de l'installer à partir des RPM. Pour Linux Mandrake cela donne :

  • openldap-1.2.6-1mdk.i586.rpm
  • openldap-servers-1.2.6-1mdk.i586.rpm
  • openldap-devel-1.2.6-1mdk.i586.rpm    (optionnel)

    Pour ceux qui préfèrent compiler l'archive cela ne pose pas de problème sous Linux. En particulier la bibliothèque de threads standard fonctionne correctement et est compatible avec OpenLDAP.

    Les modules RPM installent les fichiers de configuration dans /etc/ldap et les fichiers de données dans /var/ldap.
 

1.2. Solaris 7

    La compilation sous Solaris 7 pose des problèmes car la version de libthread de base est incompatible. Il faut donc soit le compiler sans les threads (./configure --without-thread). Soit configurer le paquet ainsi :

env ac_cv_func_pthread_create=no ol_cv_kthread_flag=no \
             ol_cv_pthread_flag=no ol_cv_pthreads_flag=no \
             ol_cv_thread_flag=no ./configure


    La base de données utilisées est BerkeleyDB 2.7.5, elle s'installe par defaut dans /usr/local/BerkeleyDB et ./configure ne le trouve pas. Si l'on souhaite utiliser ce DB avec OpenLDAP il faut donc lancer ./configure ainsi (avec bash par exemple) :

env \
     ac_cv_func_pthread_create=no ol_cv_kthread_flag=no \
     ol_cv_pthread_flag=no ol_cv_pthreads_flag=no \
     ol_cv_thread_flag=no \
     CPPFLAGS="-I/usr/local/BerkeleyDB/include" \
     LDFLAGS="-L/usr/local/BerkeleyDB/lib" \
     ./configure \
        --prefix="/opt/openldap" \
        --with-ldbm-api=db2

    Le reste de l'installation se fait ainsi :

make depend
make
(cd tests ; make)
/bin/su -c "make install"

 

2. Configuration

    En supposant que vous ayez installé OpenLDAP à partir des RPM. Il faut commencer par créer le fichier /etc/ldap/slapd.conf :

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /etc/ldap/slapd.at.conf
include         /etc/ldap/slapd.oc.conf
schemacheck     off

pidfile         /var/run/slapd.pid
argsfile        /var/run/slapd.args

##############################################################
# ldbm database definitions
##############################################################

database        ldbm

suffix          "o=EMA, c=fr"
directory       /var/ldap

rootdn          "cn=root, o=EMA, c=fr"
rootpw          secret


    Le mot de passe est celui par défaut et doit bien sur être changé.
 

3. Démarrage du serveur

Attention, par défaut le RPM utilise libwrap (il a été construit avec configure --enable-wrappers), non pas la bibliothèque dynamique :

# ldd `which slapd`
        libdb.so.3 => /lib/libdb.so.3 (0x4000a000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x40048000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x40075000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x40084000)
        libc.so.6 => /lib/libc.so.6 (0x40095000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

mais la bibliothèque statique /usr/lib/libwrap.a. Pour éviter un access denied lors de la connexion, vous devez autoriser vos classes d'adresses à accéder à votre serveur LDAP. Indiquez les dans /etc/hosts.allow :

slapd: 159.31. 127.0.0.1

Pour commencer, il est conseillé de lancer le serveur à la main en mode debug afin de vérifier que l'insertion des données se fait correctement :

slapd -d 1

Quand tout fonctionne, vous pouvez arrêter le serveur par ^C. Vous pouvez alors lancer slapd à partir des fichiers de démarrage SysV :

/etc/rc.d/init.d/ldap start

Pour ceux qui n'utilisent pas la version RPM (ou DEB) pour Linux voici un exemple de fichier de démarrage que vous pourrez adapter facilement à votre système (extrait de celui installé par le RPM) :

#!/bin/sh
#
# Startup script for the OpenLDAP server
# description: OpenLDAP is a Lightweight Directory Access Protocol server
#
# processname: slapd
# pidfile: /var/run/slapd.pid

# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# See how we were called.
case "$1" in
start)
echo -n "Starting OpenLDAP: "
slapd
if grep -q '^replogfile' /etc/ldap/slapd.conf; then
slurpd
fi
echo
touch /var/lock/subsys/ldap
;;
stop)
echo -n "Shutting down OpenLDAP: "
killproc slapd
if grep -q '^replogfile' /etc/ldap/slapd.conf; then
killproc slurpd
fi
rm -f /var/lock/subsys/ldap
;;
status)
status slapd
if grep -q '^replogfile' /etc/ldap/slapd.conf; then
status slurpd
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac

exit 0

 

4. Création de la base

Quand le serveur a démarré il faut ensuite créer la base. Il faut d'abord créer la racine de l'organisation. Pour cela il faut éditer le fichier ema.ldif suivant :

dn: o=EMA, c=fr
o: EMA
objectclass: organization

Il faut ensuite insérer l'enregistrement dans la base :

ldapadd -D "cn=root, o=EMA, c=fr" -w secret -f ema.ldif

Maintenant que l'organisation à laquelle appartient les utilisateurs existe, il ne reste plus qu'à peupler la base. Pour cela, il existe 2 possibilités :

  • ajouter les utilisateurs un à un à l'aide d'une connexion LDAP au serveur.
  • créer la base sans utiliser le serveur LDAP. Cela est utile quand vous devez insérer beaucoup d'utilisateurs à partir d'une base vide.

Il est bien sûr possible de créer la ou les organisations en même temps que l'insertion des utilisateurs, il suffit juste que l'organisation apparaisse avant ses utilisateurs dans le fichier LDIF.

 

4.1. Insertion individuelle des utilisateurs

Pour peupler la base de ses utilisateurs, il faut créer un fichier avec un enregistrement par utilisateur. Chaque utilisateur étant séparé par une ligne vide :

dn: cn=DELEGUE Guy, o=EMA, c=fr
cn: DELEGUE Guy
sn: DELEGUE
objectclass: person
telephoneNumber: 33 (0)4 66 38 72 82
mail: Guy.Delegue@site-eerie.ema.fr
lastModified: 23/08/1999

Peuplement de la base :

ldapadd -D "cn=root, o=EMA, c=fr" -w secret -f users.ldif

 

4.2. Insertion massive d'utilisateurs

Dans ce cas il faut arrêter le serveur puis créer la base à l'aide de la commande ldif2ldbm. Cette commande n'effectuant pas de modification incrémentale, il faut lui donner en paramètre un fichier LDIF qui contienne d'abord l'organisation puis ses utilisateurs :

/etc/rc.d/init.d/ldap stop
cd /var/ldap
rm -f *
cp ema.ldif tout.ldif
cat users.ldif >> tout.ldif
ldif2ldbm -i tout.ldif
/etc/rc.d/init.d/ldap start

Le rm devant se faire dans le répertoire indiqué par la directive directory de slapd.conf.

 

5. Suppression d'une entrée 

Pour supprimer une entrée il faut préciser l'intégralité du DN :

ldapdelete -D "cn=root, o=EMA, c=fr" -w secret
cn=PELLISSIER Laurent, o=EMA, c=fr
^D

 

6. Exemple de recherche

La recherche se fait avec la commande ldapsearch. Pour éviter de préciser à chaque fois le DN et le serveur, il est souhaitable d'indiquer ses éléments par défaut dans le fichier /etc/ldap/ldap.conf :

BASE o=EMA, c=fr
HOST ldap.ema.fr

Si le fichier /etc/ldap/ldap.conf est correctement rempli avec les valeurs par défaut pour le DN et le serveur, une recherche peut se faire facilement :

$ ldapsearch sn=pellissier
cn=PELLISSIER Laurent, o=EMA, c=fr
cn=PELLISSIER Laurent
sn=PELLISSIER
objectclass=person
telephonenumber=33 (0)4 66 78 51 24
mail=Laurent.pellissier@ema.fr
lastmodified=23/08/1999
titre=Ingenieur systeme & reseaux - Chef du service
url=http://www.ema.fr/~lpelliss/

Sinon il faut préciser le DN et le serveur :

$ ldapsearch -h ldap.ema.fr -D "o=EMA, c=fr" sn=pellissier
cn=PELLISSIER Laurent, o=EMA, c=fr
[...]

Pour afficher l'ensemble des utilisateurs :

$ ldapsearch objectclass=person

Pour afficher l'ensemble des établissements :

$ ldapsearch objectclass=organization

Pour afficher l'ensemble des enregistrements :

$ ldapsearch 'objectclass=*'

Le guillement sert uniquement à éviter que le shell ne prenne en compte le joker *.
 

7. Utilisation depuis Netscape Communicator

Pour pouvoir utiliser le serveur LDAP il faut créer un répertoire dans le carnet d'adresse de Netscape. Pour cela il faut choisir Address Book dans le menu Communicator :

Ensuite la recherche s'effectue simplement en sélectionant le bon répertoire dans le carnet d'adresse :


Bibliographie


Laurent.Pellissier@ema.fr (24/08/99)