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 "mondomaine.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 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.