Prendre un thé
Tapoter des doights
Monsieur fantôme
Quelle heure est-il ?
BazinGa's Tips & tuto IT
BazinGa's - Tips & tuto IT

LDAP – Maitriser les principes

Concept

LDAP (Lightweight Directory Access Protocol) est un protocole d’accès à un annuaire d’utilisateur.
Ceci signifie que LDAP n’a pas de rapport avec la façon dont les données de l’annuaire sont stockées.
On peut comparer LDAP à ODBC pour les SGBDR : il s’agit d’un moyen d’accéder aux données.

Présentation

Schématisation

Un accès LDAP peut être comparé à un arbre constitué de branches et de feuilles (en anglais « DIT » pour « Directory Information Tree ») :

  • Les branches sont l’arborescence de votre annuaire (en brun)
  • Les feuilles sont vos objets répertoriés (en vert)
Schéma LDAP

Attention, la comparaison avec un arbre s’arrête ici car :

  • Une même feuille peut appartenir à plusieurs branches, en effet :
    • Vous pourriez avoir un employé répertorier dans plusieurs services à la fois (multitâche).
    • Vous pouvez organiser votre annuaire par groupes fonctionnels.
  • Une branche peut également être une feuille, tout dépend de ce que vous recherchez :
    • Si vous recherchez les services de l’entreprise alors les feuilles seront ici un rang plus haut.

Propriétés

Attributs et classes

Chaque objet du LDAP (les branches et les feuilles) possède des propriétés permettant de le décrire.
Ces propriétés sont stockées dans des attributs. Certains sont obligatoires et d’autres facultatifs.
Par exemple :

  • Pour une personne :
    • Le nom, le prénom et l’adresse mail sont obligatoires
    • Le numéro de téléphone et le numéro de bureau sont facultatifs.
  • Pour un service :
    • Le nom du service et le nom du chef de service sont obligatoires.
    • L’adresse mail, le bâtiment et l’étage sont facultatifs.

Les attributs s’écrivent sous la forme nom_attribut=valeur_attribut

Un seul attribut est toujours présent et toujours obligatoire et ce pour chaque objet. Il s’agit de l’attribut : objectclass.

Celui-ci permet de définir la « classe » de chaque objet de l’annuaire : une organisation, un type de « chose », un service, une personne…

Ainsi, chaque objet est au moins définit par sa classe.

Dans notre schéma on peut donc imaginer les classes suivantes :

Le standard LDAP définit des classes standardisées pour simplifier l’interopérabilité LDAP/logiciel client mais rien ne vous empêche de créer vos propres classes.

Organisation des classes

Pour pouvoir gérer ces classes, la définition de chacune d’elle se trouve dans un (ou plusieurs) fichier(s) nommé(s) « schéma ».
Ce fichier décrit chaque classe :

  • son nom
  • les attributs obligatoires
  • les attributs facultatifs

Chaque attribut y est également décrit :

  • le nom de l’attribut
  • le format de donnée qu’il doit contenir

Attention, un objet peut être associé à plusieurs classes : dans ce cas, il cumule les attributs des deux classes auxquels il appartient (bon, c’est étrange mais en gros ça veut dire que vous pouvez avoir un bâtiment considéré au sens classe comme un « bâtiment » et un « service » ce qui évite de multiplier les objets).

Standardisation

Chaque objet, en plus d’avoir une classe est en général nommé (ce n’est pas obligatoire mais fortement recommandé sinon bonjour le bazar).

Vous pouvez créer un attribut « nom » dans lequel vous renseignerez cette information.
Cependant, afin de simplifier l’utilisation des LDAP et de mieux s’y retrouver, il est courant d’utiliser les attributs suivants en fonction de la localisation dans l’arbre :

  • Branches hautes : dc= : domaine component : il s’agit en général de l’organisation.
  • Branches intermédiaires : ou= : organisation unit : les différents services ou les différentes structures au sein de l’organisation
  • Feuilles : cn= : le nom de l’objet

Cette convention n’est pas obligatoire et il est tout à fait possible de n’utiliser que des cn. Même si ce n’est pas très pratique.
Il est en revanche très commun d’utiliser les deux en parallèle :

  • Les dénomination différentes (dc=, ou=…) pour toutes les branches.
  • Les dénomination cn= pour les branches basses et les feuilles.

Voici l’arbre précédent avec leurs dénominations :

On aurait pu utiliser la même dénomination pour le ou= et pour le cn=.

Identification

Nos objets sont donc répertoriés dans différents groupes. Mais comment distinguer John Deuf du Service Dev du John Deuf du Service Client ?

Grâce au Distinguished Name ou dn=.

Il s’agit simplement du nom de l’objet auquel on ajoute tous les ascendants.
Voici quelques exemples :

  • cn=John Deuf et dn=cn=John Deuf,ou=Service Client,ou=Employés,dc=Organisation
  • cn=Marine Ade et dn=cn=Marine Ade,ou=Service Client,ou=Employés,dc=Organisation
  • cn=Guy Tar et dn=cn=Guy Tar,ou=Service Dev,ou=Employés,dc=Organisation

Ceci nous permet maintenant de distinguer le John Deuf du Service client de celui du Service Dev (c’est peut-être la même personne mais nous savons maintenant à partir de quel service on veut y faire référence).

Les dn= suivants sont tout à fait valables (utilisation des cn= au lieu des ou=) :

  • cn=John Deuf et dn=cn=John Deuf,cn=SC,ou=Employés,dc=Organisation
  • cn=Marine Ade et dn=cn=Marine Ade,cn=SC,ou=Employés,dc=Organisation
  • cn=Guy Tar et dn=cn=Guy Tar,cn=SD,ou=Employés,dc=Organisation

Il est également possible de référencer un service :

  • cn=SC et dn=cn=SD,ou=Employés,dc=Organisation

Le requêtage LDAP

Les requêtes LDAP ne sont pas très compliquées mais sont très puissantes.

Pour chercher des objets, il faut filtrer l’annuaire grâce à ces opérateurs :

  • = : Egalité
  • ~= : Approximation
  • >= : Supérieur ou égal
  • <= : Inférieur ou égal

Voici un exemple :
(cn=John Deuf) => Renvoi 2 valeurs (le John Deuf du Service Client et celui du Service Dev).

Vous pouvez utiliser plusieurs les éléments suivants pour complexifier vos requêtes :

  • & : AND : opérateur d’intersection
  • | : OR : opérateur d’union
  • ! : NOT : opérateur de négation

Voici quelques exemples :

(&(cn=John Deuf)(ou=Service Client)) => Renvoie 1 valeur, le John Deuf du Service Client.
(&(cn=John Deuf)(!(ou=Service Client))) => Renvoie 1 valeur, le John Deuf du Service Dev.

Vous pouvez utiliser le caractère * comme joker.

Voici quelques exemples :

(&(cn=*)(ou=Service Client)) => Renvoie 3 valeurs, les deux personnes du service client et le groupe Service Client.
(&(cn=*)(ou=Service Client)(objectclass=employé) => Renvoie 2 valeurs, les deux personnes du service client.
(&(|(cn=*)(ou=Service Client))(ou=personne) => Renvoie 8 valeurs, les 5 employés, plus les deux services plus le groupe « employé ».
(&(|(cn=*)(ou=Service Client))(objectclass=employé) => Renvoie 5 valeurs, les 5 employés.
(&(|(cn=John*)(cn=Camille*))(objectclass=employé) => Renvoie 3 valeurs, les deux John et Camille.
(&(cn=*ne*)(objectclass=employé) => Renvoie 2 valeurs, Marine et Camille.


Cet article vous a plu ?

N'hésitez pas à le partager, il interessera surement certains de vos contacts.

Les thèmes suivants contiennent des articles en lien avec celui-ci, allez faire un tour :

IT LDAP

50%