You are here

LDAP : Linux

Pour créer cet annuaire il faut installer des "paquets" suivants (pour Debian) :

  1. slapd  (le démon)
  2. ldap-utils

La structure de notre annuaire sera simple :

  • un "TOP" pour notre domaine "domain.net"
  • Une branche "users" pour stocker les utilisateurs enregistrés (accès à l'annuaire)
  1. Un utilisateur "manager" : qui gère, entre autres les utilisateurs et qui peut effectuer des mises à jour.
  2. Un utilisateur  "totor" : standard pour les accès en lecture seule
  3. 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

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

Creer 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.