OpenLDAP – Ajouter des données à l'annuaire

Objectif: Dans ce 6eme article de la série « OpenLDAP Tutorial », nous allons alimenter l’annuaire avec des données utiles. Ceci permettra d’utiliser réellement le serveur OpenLDAP. Un prochain article détaillera un exemple concret d’utilisation de cet annuaire. Il sera présenté pas à pas la manière de restreindre l’accès à un site web (Internet ou Intranet) à des utilisateurs authentifiés. Pré-requis:

1. Création d’un nœud pour les personnes.

Un annuaire se doit d’être organisé. Dans un soucis d’organisation, on va d’abord créer un nœud (conteneur) qui recevra les entrées annuaire des personnes. Créer un fichier LDIF pour ce nœud:
vi people.ldif
Saisir dans l’éditeur, puis enregistrer:
dn: ou=People,dc=ldaptuto,dc=net
objectClass: organizationalUnit
ou: People
  • People est un nom au choix.
  • Le type de cette nouvelle entrée est organizationalUnit (OU), c’est le type usuel des nœuds conteneurs dans OpenLDAP.
  • OpenLDAP n’est pas sensible à la casse et ne fait pas de différence entre majuscules et minuscules, people ou People sont équivalents.
On ajoute cette entrée à l’annuaire:
ldapmodify -a -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f people.ldif
-a (pour add) après ldapmodify veut dire qu’on souhaite ajouter le contenu du fichier.

2. Ajouter des personnes à l’annuaire

vi dupond.ldif
Saisir dans l’éditeur, puis enregistrer:
dn: uid=dupond,ou=People,dc=ldaptuto,dc=net
objectClass: inetOrgPerson
givenName: Jean
sn: Dupond
cn: Jean Dupond
uid: dupond
userPassword: dupond
On ajoute cette entrée à l’annuaire:
ldapmodify -a -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f dupond.ldif
Et on vérifie cet ajout:
ldapsearch -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -b ou=People,dc=ldaptuto,dc=net
Remarquer que le mot de passe a été crypté et même l’administrateur ne peut plus le voir en claire.

3. Utilisation

Regardons maintenant ce qui se passe si Jean Dupond essaye de se connecter à l’annuaire et voir les personnes référencées (entre autres lui même).
ldapsearch -x -H ldap://localhost -D uid=dupond,ou=people,dc=ldaptuto,dc=net -w dupond -b ou=people,dc=ldaptuto,dc=net -LLL
ldap_bind: Invalid credentials (49)
Rappel:
  • -D : dn de l’utilisateur qui s’authentifie, la requête utilise les droits de lecture de cet utilisateur.
  • -w : Mot de passe de cet utilisateur.
Le résultat est un message d’erreur qui veut dire que l’authentification est non valide. Pourtant les données envoyées sont correctes (dn et mot de passe). La cause est un droit d’accès insuffisant pour l’authentification. On ne va pas aborder ici ce thème sensible et complexe des droits d’accès. On va juste ajouter une configuration qui permettra aux utilisateurs de l’annuaire de s’authentifier.
vi acces.ldif
Saisir dans l’éditeur, puis enregistrer:
dn: olcDatabase={1}hdb,cn=config
changeType: modify
add: olcAccess
olcAccess: to * by users read by anonymous auth by * none
Cette commande ajoute une autorisation d’authentification (by anonymous auth) et de lecture à toutes les personnes de l’annuaire. Bien entendu il n’est pas conseillé d’utiliser une telle configuration dans la réalité. Elle n’est utilisée ici que pour des raisons de simplification de la démonstration. On lance cette commande de configuration de l’annuaire:
ldapmodify -x -H ldap://localhost -D cn=admin,dc=ldaptuto,dc=net -w admin -f acces.ldif
Maintenant une requête de lecture des données des personnes de l’annuaire par Jean Dupond (la même que la précédente) permet de les afficher.
ldapsearch -x -H ldap://localhost -D uid=dupond,ou=people,dc=ldaptuto,dc=net -w dupond -b ou=people,dc=ldaptuto,dc=net -LLL
dn: ou=People,dc=ldaptuto,dc=net
objectClass: organizationalUnit
ou: People

dn: uid=dupond,ou=People,dc=ldaptuto,dc=net
objectClass: inetOrgPerson
givenName: Jean
sn: Dupond
cn: Jean Dupond
uid: dupond
userPassword:: e1NTSEF9Umk1d0QrWEtmNHRrSHBOelBEMkdqU3NNSUhtRmtNU28=
Finalement l’annuaire servi par OpenLDAP permet à Jean Dupond, qui y est référencé, de s’authentifier et de lire toutes les données qu’il contient. A tire d’exercice vous pouvez ajouter une autre personne à l’annuaire: Alain Durand. Après cela le contenu de cet annuaire aura cette structure:
dc=ldaptuto,dc=net
├── cn=admin,dc=ldaptuto,dc=net
└── ou=People,dc=ldaptuto,dc=net
    ├── uid=dupond,ou=People,dc=ldaptuto,dc=net
    └── uid=durand,ou=People,dc=ldaptuto,dc=net
 ]]>