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