Extrait du mémoire de DESS Génie logiciel :
LDAP (Lightweight Directory Access Protocol)


par Jean-François Giraud

Septembre 1999




LDAP

Présentation

Dans tout organisme privé ou public, la gestion des informations est un problème important : la fiabilité de l'information et de l'archivage permettent un gain de temps précieux. Le cas d'un employé travaillant dans une société en est le parfait exemple. Les informations concernant cet employé peuvent-être plus ou moins vitales (numéro de sécurité sociale, salaire, adresse postale, adresse email, ...). Au cours de sa carrière, cet employé changera sûrement de poste, de service voire même d'entreprise. L'utilisation d'un annuaire est alors bénéfique pour ne pas avoir à entrer manuellement toutes sortes d'informations lors de chaque changement.

Cependant, l'utilisation d'un annuaire, qui a pour principale vocation d'être consultable par quiconque, est problématique. En effet, il faut protéger certaines données sans pour autant tout cacher à n'importe qui. Par exemple, les employés d'une surcursale doivent pouvoir accéder aux informations contenues dans l'annuaire de la maison mère d'une façon différente des personnes totalement "externes" à celle-ci. Mais il ne faut pas tout bloquer : il s'agit d'un annuaire et donc des informations telles que adresses email doivent pouvoir être exportées.

Les annuaires qui reposent sur le protocole LDAP permettent :

  1. d'être interconnectés entre eux : par exemple, chaque surcursale d'une société a son propre annuaire ;
  2. de structurer un organisme quelconque suivant une certaine hiérarchie ;
  3. de gérer les accès en fonction des utilisateurs (même entreprise, service, etc.)

Toutefois, un annuaire ne regroupe pas que des informations concernant les utilisateurs. Il peut aussi répertorier des informations sur les ressources telles que salles et matériels. Les administrateurs, applications et utilisateurs finaux peuvent ainsi stocker et gérer des types d'informations différents à partir d'un point unique, et automatiser un grand nombre de processus gourmands en temps, chose jusqu'alors impossible. Par exemple, une demande d'information inter-services (sur le nouvel employé !) requiert parfois certains délais avant d'être traitée manuellement.

Certaines applications utilisent également des annuaires pour stocker et gérer des informations telles que configuration, préférences et droits d'accès de l'utilisateur.

Un annuaire a donc pour principale vocation de regrouper un grand nombre d'informations allant de la simple liste de noms et d'adresses à une base de données recensant toutes les ressources du réseau et leurs attributs (utilisateurs, groupes, files d'impression, etc.). Cette gestion centralisée devrait faciliter la tâche de l'administrateur. Par ailleurs, elle minimise en effet les marges d'erreur ou d'incohérence engendrées par des outils d'administration distribués, comme les informations redondantes (voire incohérentes), qui ne vont pas sans provoquer de graves problèmes d'administration, les connexions multiples ou les droits non maîtrisés d'une interface à l'autre, par exemple.

Les opérateurs de télécommunications ont élaboré la norme X.500 pour interconnecter leurs annuaires téléphoniques. Cette norme très complexe, exige de très lourds logiciels. Ces derniers étaient inutilisables dans la majeure partie des entreprises où les ressources sont limitées (en terme de puissance).

En 1994, l'université du Michigan a mis en place un protocole appelé Lightweight Directory Access Protocol (LDAP) qui définit des services d'accès adaptés et fonctionne, entre autres, au-dessus de TCP/IP.

Structure d'un annuaire LDAP

Structure hiérarchique

Les annuaires architecturés autour la norme LDAP sont organisés sous forme hiérarchique reflétant la structure humaine et géographique d'une entreprise. Ils donnent donc à cette dernière la possibilité de posséder un annuaire correspondant à son propre mode organisationnel.

Un annuaire est composé de plusieurs entrées en général triées par pays puis par organisations. A l'intérieur de chaque organisation, une décomposition en sous-unités peut être effectuée : sous-unités géographiques (comme régions, départements) ou fonctionnelles (les différents services : Production, Administration, Recherche et développement,...). Cette décomposition peut se répéter à nouveau, se précisant de plus en plus jusqu'à ce que les informations finales soient les individus, le matériel...



Définitions

La structure d'un annuaire peut donc être représentée sous forme d'arbre. Chaque noeud et feuille de cet arbre étant appelé une entrée. Chaque entrée est composée de plusieurs attributs, chacun d'eux ayant un type, une ou plusieurs valeurs. Le type de chaque attribut détermine sa syntaxe c'est-à-dire qu'il définit le type d'information permis pour ses valeurs : texte, binaire... Exemple d'un objet

La structure des objets est décrite dans un des fichiers de configuration de LDAP dont l'extension est oc.conf. Voici à quoi ressemblerait la description d'un objet personne où les attributs nom et prénom seraient obligatoires (clause requires) et les attributs numéro de GSM et photographie seraient facultatifs (clause allows).

objectclass personne
   requires
         objectclass,
         nom,
	 prenom
   allows
         numero_gsm,
	 photo
       

L'attribut objectclass est un peu particulier. En effet, chaque entrée de la base LDAP possède un attribut qui s'appelle ainsi. C'est lui qui détermine si une entrée est d'un certain type ou pas. Par exemple, si une des valeurs de l'attribut objectclass est 'personne', il s'agira d'un objet personne et nous trouverons alors dans l'annuaire les informations obligatoires et des informations facultatives si elles ont été remplies. Nommage des entrées

Toutes les entrées sont nommées par rapport à leur position dans l'annuaire. Elles sont identifées par leur chemin, à partir de la racine de l'arbre, appelé DNDN : Distinguished Name signifiant nom caractéristique. Le DN est composé de plusieurs RDNRDN : Relative Distinguished Name signifiant nom caractèristique relatif séparée par des virgules.

Par exemple, un utilisateur nommé Durand et travaillant dans le service informatique d'IBM pourrait avoir le DN suivant : uid=Durand,ou=Service informatique,o=IBM,c=US. Bien sûr, ce DN l'identifierait de manière unique dans l'annuaire LDAP. En effet, si un second Durand travaillait avec le premier, son RDN final devra forcément être différent de celui de son collègue, deux entrées de l'annuaire ne pouvant posséder un DN identique (Mais rien n'interdit à deux entrées de posséder un RDN final identique si elles se trouvent dans des branches distinctes)..

Services offerts

Le protocole LDAP offre divers services :

  1. Opération de connexion : elle permet à un client d'initialiser une session et de s'identifier auprès de l'annuaire ;
  2. Opération de déconnexion : elle est utilisée pour terminer une session ;
  3. Opération de recherche : elle permet à un serveur d'effectuer une recherche au nom d'un client qui possède une session déjà ouverte. Cette recherche est lancée à partir d'une certaine position dans la hiérarchie de l'annuaire LDAP, ne parcourt qu'une portion déterminée de l'annuaire (un seul niveau, tous les niveaux...). Le client n'aura accès qu'aux valeurs des attributs qu'il a le droit de consulter ;
  4. Opération d'ajout : elle permet à un client de demander l'ajout d'une entrée dans l'annuaire LDAP. Cet ajout ne sera effectif que si le client à les droits requis pour écrire dans l'annuaire.
  5. Opération de modification : permet à un client de réaliser la modification d'une entrée de l'annuaire. Cette modification ne sera réalisée qu'à la condition que le client ait les droits d'accès suffisants pour modifier tous les attributs qu'il souhaite modifier ;
  6. Opération de suppression : elle a lieu moins fréquemment que l'opération d'ajout lors de l'utilisation de l'annuaire. Elle permet à un client de supprimer une entrée si ces droits le permettent ;
  7. Opération de modification du RDN : elle permet à un client de modifier le RDN final d'une entrée si ses droits le permettent. Il n'est pas possible de modifier d'autres RDN car ceci entrainerait un changement de branche. Si une entrée est "transférée" ailleurs, il ne s'agit nullement d'un renommage mais d'une suppression suivie d'un ajout ;
  8. Opération de comparaison : elle permet à un client de comparer une valeur d'un attribut avec celles contenues dans l'entrée spécifiée.

Droits d'accès aux informations

LDAP permet de définir des règles pour gérer l'accès aux données de l'annuaire. Toute requête (ajout, suppression, modification, etc.) arrivant sur le serveur est analysée puis les règles du fichier de configuration sont parcourues dans leur ordre de définition. La première règle qui correspond à l'identifiant donné lors de la connexion définit le type d'accès (lecture, écriture ou aucun). Si aucune règle ne correspond, un accès par défaut est utilisé.

L'utilisation d'expressions régulières dans les règles d'accès rend possible la délégation de la gestion de l'annuaire à d'autres personnes. Nous vous présentons une règle comme exemple :

access to dn="uid=.*,ou=([^,]*),o=([^,]*),c=([^,]*)"
        by dn="uid=admin,ou=$1,o=$2,c=$3" write
        by dn="uid=.*,o=$2,c=$3" read
	by dn=".*" none
     

En reprenant l'exemple du service informatique d'IBM, l'administrateur admin pourra modifier les informations concernant Monsieur Durand qui appartient au même service que lui. Pourtant, il ne pourra pas modifier l'entrée concernant Monsieur Dupont du service administratif. En effet, le nom du service d'admin ne correspondra pas au nom du service de la personne chez qui il désire effectuer des modifications.

D'autre part, les utilisateurs appartenant à IBM US, pourront lire librement les informations concernant les employés de leur propre entreprise alors que ceux du monde extérieur n'auront aucun accès du tout.


Pour m'écrire      Répertoire parent      Acceuil