Pour créer cet annuaire il faut installer des "paquets" suivants (pour Debian) :
- slapd (le démon)
- ldap-utils
La structure de notre annuaire sera simple :
- un "TOP" pour notre domaine "mondomaine.net"
- Une branche "users" pour stocker les utilisateurs enregistrés (accès à l'annuaire)
- Un utilisateur "manager" : qui gère, entre autres les utilisateurs et qui peut effectuer des mises à jour.
- Un utilisateur "totor" : standard pour les accès en lecture seule
- Le cas de l'utilisateur "propriétaire" : root (propriétaire de la base de données) est traité lors de la création de la base, il ne doit en général pas être utilisé. Son mot de passe doit donc rester secret !
Le fichier slapd.conf ne doit pas être lisible par tous :
-rw-r----- 1 root openldap 3676 2010-01-26 20:29 slapd.conf
S'il n'est pas correct le remettre "au secret" par :
chown root:openldap slapd.conf
chmod 640 slapd.conf
- Une branche "people" qui contiendra nos contacts.
Une fois les paquets installés il faut s'occuper de la configuration et celle-ci est quasiment intégralement contenue dans le fichier "/etc/slapd.conf"
Dont je présente les extraits importants ci dessous
--------------------------------------------------
backend bdb
database bdb
# The base of your directory in database #1
suffix "dc=domaine,dc=net"
rootdn "cn=root,dc=domaine,dc=net"
rootpw le_mot_de_passe_secret_non_utilisé
# Where the database file are physically stored for database #1
directory "/var/lib/ldap/domaine.net"
...
--------------------------------------------------
Vérifiez que les "acl" (Access Control List) sont corrects pour la mise à jour des contacts et la mise à jour des mots de passe. Nos "acl" sont extrêmement simples et LDAP peut faire beaucoup mieux !
--------------------------------------------------
...
# users can modify their passwords
access to attrs=userPassword
by dn.regex="cn=manager,ou=users,dc=izzop,dc=net" write
by dn.regex="cn=root,dc=izzop,dc=net" write
by anonymous auth
by self write
by * read
access to dn.base="" by * read
# The manager has full write access to people,root too, everyone else
# can read everything.
access to dn.children="ou=people,dc=izzop,dc=net"
by dn.regex="cn=manager,ou=users,dc=izzop,dc=net" write
by dn.regex="cn=root,dc=izzop,dc=net" write
by * read
# only root can update all
access to *
by dn.regex="cn=manager,ou=users,dc=izzop,dc=net" read
by dn.regex="cn=root,dc=izzop,dc=net" write
by * read
...
--------------------------------------------------
Ainsi seul notre utilisateur principal "manager" peut modifier les mots de passe et en secours le "root".
S'assurer que l'utilisateur principal "manager" et le propriétaire "root" peuvent accéder à tout en mise à jour :
--------------------------------------------------
...
access to *
by dn.regex="cn=manager,ou=users,dc=domaine,dc=net" read
by dn.regex="cn=root,dc=domaine,dc=net" write
by * read
...
--------------------------------------------------
stopper le service "slapd" et détruire la base "bdb" (c'est celle créée par défaut) située dans /var/lib/ldap/domaine.net :
cd /var/lib/ldap/domaine.net
rm -f *
Copier ceci dans le fichier /var/lib/ldap/domaine.net/DB_CONFIG pour optimiser le fonctionnement
set_cachesize 0 2097152 0
set_lk_max_objects 1500
set_lk_max_locks 1500
set_lk_max_lockers 1500
Ces valeurs ne sont pas miraculeuses mais elles fonctionnent fort bien pour la taille d'annuaire visée.
Démarrer le service "slapd" pour recréer la base ldap puis impérativement le stopper ensuite pour exécuter les opérations suivantes.
Créer un fichier "LDAPTOP" de définition de notre "structure" d'annuaire contenant :
----------------- LDAPTOP --------------------------
dn: dc=domaine,dc=net
dc: domaine
description: Mon domaine à moi
o: Domaine et Cie
objectClass: dcObject
objectClass: organization
structuralObjectClass: organization
dn: ou=users,dc=domaine,dc=net
description: les utilisateurs
objectClass: organizationalUnit
objectClass: top
ou: users
structuralObjectClass: organizationalUnit
dn: ou=people,dc=domaine,dc=net
description: Les gens
objectClass: organizationalUnit
objectClass: top
ou: people
structuralObjectClass: organizationalUnit
-------------------------------------------------
Exécuter la commande suivante (slapd stoppé !) pour intégrer ces éléments dans la base :
slapadd -f /etc/ldap/slapd.conf -l /root/LDAPTOP -c -v
Créer un fichier "LDAPMANAGER" (définition de nos utilisateurs) contenant -------------------------------------------------
dn: cn=manager,ou=users,dc=domaine,dc=net
cn: manager
givenName: manager
sn: Le responsable de l'annuaire
userPassword: le_mot_de_passe_du_manager_qui_est_secret
structuralObjectClass: inetOrgPerson
objectClass: inetOrgPerson
objectClass: top
objectClass: person
objectClass: organizationalPerson
dn: cn=totor,ou=users,dc=domaine,dc=net
cn: totor
givenName: totor
sn: utilisateur quelconque
userPassword: le_mot_de_passe_pour_lecture_seule
structuralObjectClass: inetOrgPerson
objectClass: inetOrgPerson
objectClass: top
objectClass: person
objectClass: organizationalPerson
-------------------------------------------------
Lancer la commande suivante pour intégrer ce fichier :
slapadd -f /etc/ldap/slapd.conf -l /root/LDAPMANAGER -c -v
Il reste quelques commandes pour améliorer les performances futures :
slapindex -f /etc/ldap/slapd.conf
cd /var/lib/ldap/domaine.net
chown -R openldap:openldap *
Dès que le service "slapd" est relancé l'annuaire est alors prêt pour l'enregistrement des adresses de vos contacts.
Si vous disposez déja de données de contact vous pouvez les mettre au format suivant afin de les intégrer automatiquement ( awk est votre ami si le nombre d'adresses est étevé ) et les stocker dans le fichier "MESADRESSES" :
---------------------------------------------------------
dn: cn=NOM,ou=people,dc=domaine,dc=net
displayName: LE NOM DE DISPLAY
objectClass: inetOrgPerson
objectClass: person
objectClass: organizationalPerson
sn: NOM
givenName: LE NOM DE DISPLAY
mobile: 06 01 02 03 04
homePhone: 01 01 02 03 04
homePostalAddress: ADRESSE_RUE$ADRESSE_VILLE$CODE8POSTAL$PAYS
cn: NOM
mail: MAIL@DOMAINE
--------------------------------------------------------------------------------------
Vous pourrez alors lancer les commandes destinées à intégrer votre fichier d'adresses ( les options "-c" permettent de continuer sur erreur "-v" donne un programme plus "bavard") après avoir stoppé le service "slapd"
# pour Debian; Ubuntu ...
/etc/init.d/slapd stop
# pour d'autres
service slapd stop
slapadd -f /etc/ldap/slapd.conf -l /tmp/MES_ADRESSES -c -v
Relancer le service "slapd"
Un utlitaire assez "sympa" à utiliser pour voir et éventuellement mettre à jour le contenu d'un annuaire : "luma", c'est parfait pour changer un mot de passe. D'autres utilitaires graphiquesc LDAP: "gq" ou "lat" moins "amusants" mais aussi efficaces, on peut aussi citer "jxplorer" qui, écrit en Java, existe sur la plupart des plateformes.