LDAP - Le modèle d'information

Décembre 2016

Introduction au modèle d'information

Le modèle d'information du protocole LDAP définit le type de données pouvant être stocké dans l'annuaire LDAP.

On appelle entrée (en anglais entry) l'élément de base de l'annuaire. Chaque entrée de l'annuaire LDAP correspond à un objet abstrait ou réel (par exemple une personne, un objet matériel, des paramètres, ...). Une entrée est contitués de plusieurs objets.

Un objet est constitué d'un ensemble de paires clés/valeurs appelées attributs permettant de définir de façon unique les caractéristiques de l'objet à stocker. Par analogie avec la terminologie objet on parle ainsi de classe d'objet pour désigner la structure d'un objet, c'est-à-dire l'ensemble des attributs qu'il doit comporter. De cette façon un objet est une "instanciation" de la classe d'objet, c'est-à-dire un ensemble d'attributs avec des valeurs particulières.

Voici un exemple d'entrée de l'annuaire :

type d'attribut valeur de l'attribut
cn: Pillou Jean-Francois
uid: jfpillou
telephonenumber: 06209937xx
mail: webmaster@commentcamarche.net
jeff@commentcamarche.net

Le schéma de l'annuaire

Ainsi, on appelle schéma (plus exactement en anglais Directory Schema) l'ensemble des définitions d'objets et d'attributs qu'un serveur LDAP peut gérer ainsi que leur syntaxe.

De cette façon, un annuaire peut uniquement comporter des entrées correspondant à une classe d'objet définie dans le schéma. Le schéma est en effet lui-même stocké dans l'annuaire à un emplacement spécifique (il s'agit pour être exact d'une instance de la classe subschema).

Grâce au schéma, l'annuaire peut garantir de façon autonome la validité des enregistrements et de leur syntaxe. Lorsqu'une entrée est créée dans l'annuaire, celui-ci vérifie sa conformité à la classe d'objet, on parle alors de schema checking.

Les attributs des entrées

Chaque entrée est constituée d'un ensemble d'attributs (paires clé/valeur) permettant de caractériser l'objet que l'entrée définit. On distingue habituellement deux types d'attributs :

  • Les attributs utilisateurs (user attributes) sont les attributs caractérisant l'objet manipulé par les utilisateurs de l'annuaire (nom, prénom, ...)
  • Les attributs opérationnels (system attributes) sont des attributs auxquels seul le serveur peut accèder afin de manipuler les données de l'annuaire (dates de modification, ...)
LDAP permet de définir des types d'attributs, c'est-à-dire des caractéristiques permettant de le définir de façon précise. Chaque attribut possède de cette façon une syntaxe qui lui est propre (la façon selon laquelle l'attribut doit être renseigné, c'est-à-dire le format des données) mais aussi la manière selon laquelle la comparaison doit s'effectuer lors d'une recherche de l'annuaire (par exemple définir si la recherche sera sensible à la casse, c'est-à-dire si la recherche devra différencier minuscules et majuscules).

Voici les principales syntaxes d'attributs définies dans le protocole LDAP v3 :

syntaxe d'attribut description
binary Attribut constitué d'une suite d'octets, c'est-à-dire d'un fichier binaire (image, vidéo, fichier, ...)
boolean Attribut constitué d'un booléen (vrai ou faux)
dn Pointeur vers un objet de l'annuaire repéré par son distinguished name
Directory string Attribut constitué d'une chaîne de caractères au format UTF-8
integer Attribut constitué d'un entier
telephoneNumber Numéro de téléphone

Voici les principales règles de comparaison d'attributs définies par le standard LDAP v3 :

règle de comparaison LDAP règle de comparaison X500 description
cis caseIgnoreMatch Attribut texte non sensible à la casse
ces caseExactMatch Attribut texte sensible à la casse
tel telephoneNumberMatch Attribut texte représentant un numéro de téléphone (les virgules et les espaces sont ignorés dans la recherche)
int integerMatch Attribut entier (pour une comparaison numérique)
dn distinguishedName Nom d'entrée. Permet de comparer deux entrées
bin octetStreamMatch Attribut binaire. Permet de comparer octet par octet
bin booleanMatch Attribut bolléen. Permet de comparer deux attributs booléens

Les attributs prédéfinis

LDAP définit un ensemble de classes et d'attributs par défaut convenant pour la grande majorité des applications. Ces attributs doivent impérativement être implémentés par les serveurs d'annuaires LDAP v3. Cela permet de garantir une certaine homogénéité entre les différents annuaires.

Voici une petite liste non exhaustive des principaux attributs utilisateurs définis par le standard LDAP v3 :

Attribut Description
aliasedObjectName DN de l'objet dont celui en cours est un alias
authorityRevocationList Liste de certificats révoqués par l'autorité chargée de les réguler
businessCategory Activité professionnelle d'une entreprise ou d'une personne
c Code du pays en deux lettres (respectant le standard ISO 3166)
caCertificate Certificat de l'autorité de régulation
certificateRevocationList Liste des certificats révoqués par l'autorité de régulation
cn Nom de l'objet (common name)
description Description de l'objet
distinguishedName Nom distingué (utilisé par d'autres attributs par héritage)
facsimileTelephoneNumber Numéro de fax
givenName Prénom de la personne
houseIdentifier Identifiant d'un batiment
initials Initiales d'une personne
internationalSDNNumber Numéro ISDN
l localité de l'objet (géographique)
member Distinguished Name des membres
name Nom (utilisé par d'autres attributs par héritage)
o Nom de l'organisation
objectClass Classe d'objets
ou Unité organisationnelle (branche de l'organisation)
owner Nom du propriétaire de l'objet
postalAddress Adresse postale (sans le code postal)
postalCode Code postal
postalOfficeBox Boîte aux lettres (postale)
presentationAddress Adresse réseau de la présentation de l'objet (généralement une URL vers la présentation en ligne)
protocolInformation Attribut complémentaire à presentationAddress pour définir le protocole à utiliser
registeredAddress Adresse postale pour des envois de courriers recommandés et de colis
seeAlso DN d'objets complémentaires
serialNumber Numéro de série de l'objet
sn Nom de famille de la personne (surname)
st Etat ou région (state)
street Nom de la rue et assimiilé (boulevard, ...)
telephoneNumber Numéro de téléphone
telexNumber Numéro de télex
title Titre de la personne (différent de fonction)
uid Identifiant unique de l'objet
userCertificate Certificat de l'utilisateur
userPassword Mot de passe de l'utilisateur

Voici une petite liste non exhaustive des principaux attributs opérationnels définis par le standard LDAP v3 :

Attribut Description
attributeTypes Liste des attributs de l'annuaire. Cet opérateur opérationnel fait partie du schéma de l'annuaire décrit par l'objet subschema
altServers Liste de serveurs LDAP alternatifs en cas de défaillance de celui-ci
createTimestamp Contient la date de création d'un objet, et est ainsi présent dans tout objet. Son occurrence est unique et il ne peut être modifiée
creatorsName Contient le DN de l'objet ayant servi à la création de l'objet, et est ainsi présent dans tout objet. Son occurrence est unique et il ne peut être modifié par un utilisateur
matchingRules Contient l'ensemble des règles de comparaison. Cet opérateur opérationnel fait partie du schéma de l'annuaire décrit par l'objet subschema
matchingRuleUse Contient l'ensemble des attributs utilisant chaque règle de comparaison. Cet opérateur opérationnel fait partie du schéma de l'annuaire décrit par l'objet subschema
modifiersName Contient le DN de l'objet utilisé pour s'identifier lors de la modification. Il est présent dans tous les objets modifiés par la commande modify. Son occurrence est unique et il ne peut être modifié par un utilisateur
modifyTimestamp Contient la date de la dernière modification de l'objet. Il est présent dans tous les objets modifiés par la commande modify. Son occurrence est unique et il ne peut être modifié par un utilisateur
namingContexts Contient l'ensemble des contextes supportés par le serveur. Son occurrence est unique et il ne peut être modifié par un utilisateur
objectClasses Contient l'ensemble des classes d'objets. Cet opérateur opérationnel fait partie du schéma de l'annuaire décrit par l'objet subschema
subschemaSubentry Contient le DN de l'objet contenant le schéma de l'annuaire (subschema)
supportedControl Contient l'ensemble des OID des contrôles supplémentaires ajoutés à l'annuaire
supportedExtensions Contient l'ensemble des OID des extensions supplémentaires (fonctions utilisateurs) ajoutés à l'annuaire
supportedLDAPVersion Contient les versions du protocole LDAP gérées par le serveur
supportedSASLMechanisms Contient la liste des mécanismes SASL supportés par l'annuaire LDAP

Les classes d'objets

Par analogie avec la terminologie objet on parle de classe d'objet pour désigner la structure d'un objet, c'est-à-dire l'ensemble des attributs qu'il doit comporter. De cette façon on dira qu'un objet est une "instanciation" de la classe d'objet, c'est-à-dire un ensemble d'attributs avec des valeurs particulières.

Une classe d'objet est ainsi composée d'un ensemble d'attributs obligatoires (devant obligatoirement être renseignés dans les objets qui en découlent) et éventuellement des attributs facultatifs.

On distingue plusieurs types de classes d'objets :

  • Les classes abstraites sont des classes non instanciables. Il s'agit de classes pouvant être dérivées, c'est-à-dire dont d'autres classes peuvent hériter. La classe d'objet de plus haut niveau étant la classe top dont toute classe d'objet dérive
  • Les classes structurelles sont des classes instanciables. Il est donc possible d'avoir des objets
  • Les classes auxiliaires sont des classes permettant d'ajouter des attributs facultatifs à des classes structurelles.

Une des caractéristiques intéressantes des classes d'objets LDAP est la possibilité d'utiliser l'héritage.
Ainsi la classe de plus haut niveau est la classe top dont toutes les classes d'objets dérivent. Avec LDAP seul l'héritage simple est autorisé (donc pas d'héritage multiple), c'est-à-dire qu'une classe ne peut dériver que d'une seule classe, mais qu'une classe peut avoir plusieurs filles.

L'exemple suivant montre le principe d'héritage LDAP avec quelques classes d'objets standards :

héritage de classes d\'objet avec LDAP

Les attributs sont caractérisés par :

  • leur nom unique
  • un Object Identifier (OID) qui permet de les identifier de façon unique
  • une syntaxe et des règles de comparaison
  • un indicateur d'usage
  • un format ou une limite de taille

Il s'agit d'utiliser une série de paires clé/valeur permettant de repérer une entrée de manière unique. Voici une série de clés généralement utilisées :
  • uid (userid), il s'agit d'un identifiant unique obligatoire
  • cn (common name), il s'agit du nom de la personne
  • givenname, il s'agit du prénom de la personne
  • sn (surname), il s'agit du nom de la personne
  • o (organization), il s'agit de l'entreprise de la personne
  • u (organization), il s'agit du service de l'entreprise dans laquelle la personne travaille
  • mail, il s'agit de l'adresse de courrier électronique de la personne (bien évidemment)
  • ...

Consulter les données

LDAP fournit un ensemble de neuf fonctions (appelées parfois procédures ou opérations) de base pour effectuer des requêtes sur les données afin de rechercher, modifier, effacer des entrées dans les répertoires.

Les opérations sont généralement classées en trois catégories :

  • les fonctions d'interrogation: il s'agit des opérations permettant de rechercher ou comparer des entrées de l'annuaire (recherche, comparaison)
  • les fonctions de mise à jour: il s'agit des opérations permettant de modifier des entrées de l'annuaire (ajout, suppression, modification, renommage)
  • les fonctions de session: il s'agit des opérations permettant d'ouvrir une session (s'identifier), de la fermer ainsi que d'annuler une requête

Voici la liste des principales opérations que LDAP peut effectuer :

Opération Description
Abandon Abandonne l'opération précédemment envoyées au serveur
Add Ajoute une entrée au répertoire
Bind Initie une nouvelle session sur le serveur LDAP
Compare Compare les entrées d'un répertoire selon des critères
Delete Supprime une entrée d'un répertoire
Extended Effectue des opérations étendues
Rename Modifie le nom d'une entrée
Search Recherche des entrées d'un répertoire
Unbind Termine une session sur le serveur LDAP

Le format d'échange de données LDIF

LDAP fournit un format d'échange (LDIF, Lightweight Data Interchange Format) permettant d'importer et d'exporter les données d'un annuaire avec un simple fichier texte. La majorité des serveurs LDAP supportent ce format, ce qui permet une grande interopérabilité entre eux.

La syntaxe de ce format est la suivante :

[<id>]
dn: <distinguished name>
<attribut> : <valeur>
<attribut> : <valeur>
...
Dans ce fichier id est facultatif, il s'agit d'un entier positif permettant d'identifier l'entrée dans la base de données.

  • chaque nouvelle entrée doit être séparée de la définition de l'entrée précédente à l'aide d'un saut de ligne (ligne vide)
  • Il est possible de définir un attribut sur plusieurs lignes en commençant les lignes suivantes par un espace ou un tabulation
  • Il est possible de définir plusieurs valeurs pour un attribut en répétant la chaîne nom:valeur sur des lignes séparées
  • lorsque la valeur contient un caractère spécial (non imprimable, un espace ou :), l'attribut doit être suivi de :: puis de la valeur encodée en base64

A voir également :

Ce document intitulé «  LDAP - Le modèle d'information  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.