28 Sep

LDAP

Concepts

Dans le monde de l’informatique, un annuaire est un système de stockage de données, dérivé des bases de données hiérarchisées, permettant en particulier de conserver les données pérennes, c’est-à-dire les données n’étant que peu mises à jour (historiquement, sur une base annuelle, d’où le nom), comme les coordonnées des personnes, des partenaires, des clients et des fournisseurs d’une entreprise, les adresses email.

La recherche peut se faire selon de multiples critères et les données peuvent être utilisées par des logiciels clients comme des applications serveurs. En outre, certaines versions de service d’annuaires savent gérer les droits sur les données mais aussi les services proposés sur les machines clientes par une authentification grâce à un couple login / mot de passe. Aujourd’hui ces données sont centralisées sur une ou plusieurs machines et les données transfèrent entre les machines via des protocoles réseaux.

Différence entre annuaire et base de données

Les annuaires vérifient les caractéristiques suivantes :

  • un annuaire est prévu pour être plus sollicité en lecture qu’en écriture. Cela signifie qu’un annuaire est conçu pour être plus souvent consulté que mis à jour.
  • les données sont stockées de manière hiérarchique dans l’annuaire, tandis que les bases de données dites “relationnelles” stockent les enregistrements de façon tabulaire.
  • les annuaires doivent être compacts et reposer sur un protocole réseau léger
  • Un annuaire doit comporter des mécanismes permettant de rechercher facilement une information et d’organiser les résultats
  • les annuaires doivent pouvoir être répartis. Cela signifie qu’un serveur d’annuaire doit comporter des mécanismes permettant de coopérer, c’est-à-dire d’étendre la recherche sur des serveur tiers si jamais aucun enregistrement n’est trouvé
  • Un annuaire doit être capable de gérer l’authentification des utilisateurs ainsi que les droits de ceux-ci pour la consultation ou la modification de données

Ainsi, un annuaire est généralement une application se basant sur une base de données afin d’y stocker des enregistrements, mais surtout un ensemble de services permettant de retrouver facilement les enregistrements à l’aide de requêtes simples. Une base de données par contre n’est pas forcément un annuaire….

Histoire

Avant de parler de LDAP il faut parler de son précurseur le protocole X500. Les normes X500 officielles sont définies par le CCITT (CCITT Recommandations of the X500 series : The Directory).

X500 présente les concepts de base concernant la sécurité, les protocoles de réplication de données, la gestion du schéma d’un arbre, etc…

Directory Access Protocol (DAP) est un protocole standard à l’initiative de ITU-T et de l’ISO pour accéder à un service d’annuaire X.500.

LDAP (1993)

Développé en 1993 par l’université du Michigan, LDAP a été initialement conçu pour être une alternative légère (d’où son nom de Lightweight Directory Access Protocol) pour accéder aux annuaires X.500

Aujourd’hui, les travaux sur LDAP sont menés au sein d’IETF (Internet Engineering Task Force). LDAP en est déjà à sa troisième version du protocole (LDAPv3).

Il existe une RFC pour chaque version de LDAP, constituant un document de référence :

Protocole LDAP

LDAP est un protocole d’annuaire standard et extensible. Il fournit :

  • le protocole permettant d’accéder à l’information contenue dans l’annuaire,
  • un modèle d’information définissant le type de données contenues dans l’annuaire,
  • un modèle de nommage définissant comment l’information est organisée et référencée,
  • un modèle fonctionnel qui définit comment on accède à l’information ,
  • un modèle de sécurité qui définit comment données et accès sont protégés,
  • un modèle de duplication qui définit comment la base est répartie entre serveurs,
  • des APIs pour développer des applications clientes,
  • LDIF, un format d’échange de données.

Le protocole définit comment s’établit la communication client-serveur. Il fournit à l’utilisateur des commandes pour se connecter ou se déconnecter, pour rechercher, comparer, créer, modifier ou effacer des entrées. Des mécanismes de chiffrement (SSL ou TLS) et d’authentification (SASL), couplés à des mécanismes de règles d’accès (ACL) permettent de protéger les transactions et l’accès aux données.

Contrairement à d’autres protocoles d’Internet, comme HTTP, SMTP ou NNTP, le dialogue LDAP ne se fait pas en ASCII mais utilise le format de codage Basic Encoding Rule (BER).

 

Modèle d’information

Les serveurs LDAP sont conçus pour stocker une grande quantité de données mais de faible volume et pour accéder en lecture très rapidement à celles-ci grâce au modèle hiérarchique.

Le Directory Information Tree

Les données LDAP sont structurées dans une arborescence hiérarchique qu’on peut comparer au système de fichier Unix. Cet arbre (qui correpond à la définition mathématique du terme) est appelé Directory Information Tree (DIT) et comporte une racine ou suffixe.

Chaque nœud de l’arbre correspond à une entrée de l’annuaire ou directory service entry (DSE). Le schéma suivant donne un exemple d’arborescence :

dc=org
|
dc=example
/          \
ou=people     ou=groups
|             |
uid=john       cn=dev

Ce modèle est en fait repris de X500, mais contrairement à ce dernier, conçu pour rendre un service d’annuaire mondial (ce que le DNS fait par exemple pour les noms de machines de l’Internet), l’espace de nommage d’un annuaire LDAP n’est pas inscrit dans un contexte global.

Les entrées correspondent à des objets abstraits ou issus du monde réel, comme une personne, une imprimante, ou des paramètres de configuration. Elles contiennent un certain nombre de champs appelés attributs dans lesquelles sont stockées des valeurs. Chaque serveur possède une entrée spéciale, appelée root directory specific entry (rootDSE) qui contient la description de l’arbre et de son contenu.

Le schéma

L’ensemble des définitions relatives aux objets que sait gérer un serveur LDAP s’appelle le schéma. Le schéma décrit les classes d’objets, leurs types d’attributs et leur syntaxe.

Il existe deux objets abstraits particuliers : les aliases et les referrals qui permettent à une entrée de l’annuaire de pointer vers une autre entrée du même ou d’un autre annuaire. L’attribut aliasObjectName de l’objet alias a pour valeur le DN de l’entrée pointée. L’attribut ref de l’objet referral a pour valeur l’URL LDAP de l’entrée désignée.

Les attributs

Une entrée de l’annuaire contient une suite de couples types d’attributs – valeurs d’attributs. Les attributs sont caractérisés par :

  • Un nom qui l’identifie
  • Un Object Identifier (OID) qui l’identifie également
  • S’il est mono ou multi-valué
  • Une syntaxe et des règles de comparaison
  • Un indicateur d’usage
  • Un format ou une limite de taille de valeur qui lui est associée

Les attributs décrivent généralement des caractéristiques de l’objet, ce sont des attributs dits normaux qui sont accessibles aux utilisateurs. Mais d’autres attributs sont dits opérationnels car ils ne servent qu’au serveur pour administrer les données.

La syntaxe indique le type de données associées à l’attribut et la manière dont l’annuaire doit comparer les valeurs lors d’une recherche.

Certains serveurs LDAP respectent les standards X500 de hiérarchisation des attributs, qui permettent de décrire un attribut comme étant un sous-type d’un attribut super-type et d’hériter ainsi de ses caractéristiques. Ces attributs super-types peuvent être utilisés comme critère de recherche générique qui porte sur tous ses sous attributs.

Les OIDs

(même principe que dans SNMP)

Les objets et leurs attributs sont normalisés par le RFC2256 (http://www.ietf.org/rfc/rfc2256.txt) de sorte à assurer l’interopérabilité entre les logiciels. Ils sont issus du schéma de X500, plus des ajouts du standard LDAP ou d’autres consortiums industriels. Ils sont tous référencés par un object identifier (OID) unique dont la liste est tenue à jour par l’Internet Assigned Numbers Authority (IANA). Il est possible de modifier le schéma en rajoutant des attributs à un objet (déconseillé) ou en créant un nouvel objet (mieux) et d’obtenir un OID pour cet objet auprès de l’IANA (encore mieux).

Un OID est une séquence de nombres entiers séparés par des points. Les OID sont alloués de manière hiérarchique de telle manière que seule l’autorité qui a délégation sur la hiérachie “1.2.3” peut définir la signification de l’objet “1.2.3.4”.

Le Distinguish Name

Chaque entrée est référencée de manière unique dans le DIT par son distinguished name (DN). Le DN représente le nom de l’entrée sous la forme du chemin d’accès à celle-ci depuis le sommet de l’arbre. On peut comparer le DN au path d’un fichier Unix. Par exemple, le DN de John correspondant à l’arbre donné précédemment en exemple est :

uid=john,ou=people,dc=example,dc=org

Le DN représente le chemin absolu d’accès à l’entrée. Comme pour le système de fichier Unix, on peut utiliser un relative distinguished names (RDNs) pour désigner l’entrée depuis une position déterminée de l’arbre. Par exemple, à partir de la position dc=example, dc=org de la figure 1, on peut employer les RDNs suivants :

ou=people
ou=groups
cn=dev,ou=groups
uid=john, ou=people

 

LDIF

LDAP Data Interchange Format (LDIF) permet de représenter les données LDAP sous format texte standardisé, il est utilisé pour afficher ou modifier les données de la base. Il a vocation à donner une lisibilité des données pour le commun des mortels.

LDIF est utilisé dans deux optiques :

  • faire des imports/exports de base
  • faire des modifications sur des entrées.

La syntaxe est un nom d’attribut suivi de : suivi de la valeur (uid: john), le premier attribut d’une entrée étant le DN (dn: uid=john,ou=people,dc=example,dc=org). Le format utilisé est l’ASCII, les données binaires étant codés en base 64.

Modèle fonctionnel

Opérations de base

Les opérations de base permettent d’accéder au serveur ou de modifier la structure de l’arbre et/ou les entrées de l’annuaire. Elles jouent un rôle analogue aux commandes de manipulation de fichiers d’Unix (cp, mv, rm…).

  • Search: recherche dans l’annuaire d’objets à partir de critères
  • Compare: comparaison du contenu de deux objets
  • Add: ajout d’une entrée
  • Modify: modification du contenu d’une entrée
  • Delete: suppression d’un objet
  • Rename (Modify DN): modification du DN d’une entrée
  • Bind: connexion au serveur
  • Unbind: déconnexion
  • Abandon: abandon d’une opération en cours
  • Extended: opérations étendues (v3)

Les commandes search et compare se font sous la forme d’une requête composée de 8 paramètres :

  • base object: endroit de l’arbre où doit commencer la recherche
  • scope: la profondeur de la recherche
  • derefAliases: si on suit les liens ou pas
  • size limit: nombre de réponses limite
  • time limit: temps maxi alloué pour la recherche
  • attrOnly: renvoie ou pas la valeur des attributs en plus de leur type
  • search filter: le filtre de recherche
  • list of attributes: la liste des attributs que l’on souhaite connaitre

Il n’existe pas de fonction read dans LDAP. Cette fonction est simulée par la fonction search avec un search scope égal à base.

Le filtre de recherche s’exprime suivant une syntaxe spécifique dont la forme générale est :

(< operator(< search operation)(< search operation)…))

Ce filtre décrit une ou plusieurs conditions exprimées sous forme d’expressions régulières sensées désigner un ou plusieurs objets de l’annuaire, sur lesquels on veut appliquer l’opération voulue. Les opérateurs de recherche disponibles sont

  • Égalité : =
  • Approximation : ~=
  • Comparaison = <, >, <=, >=
  • Présence : =*
  • Sous-chaîne : *<expression>*
  • ET, OU : (&(<expression>) (<expression>))
  • Négation : !(<expression>)

A lire Active Directory

Une réflexion au sujet de « LDAP »

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.