LDAP - Lightweight Directory Access Protocol
Concepts
Modèle d'information
Le modèle d'information défini le type de données pouvant être stocké dans l'annuaire LDAP. Une entrée dans l'annuaire (ou entry) correspond à une instance d'une classe d'objet. Une classe regroupe donc un ensemble d'attributs permettant de décrire l'objet. Chaque attribut est défini par un nom, un type, une méthode de comparaions (lexicale pour les chaines de caractères, numérique, ...) ainsi que par un identifiant unique (OID).
Un attribut peut être possédé par plusieurs classes. C'est pourquoi les attributs sont déclaré en dehors d'une classe.
Exemple de déclaration d'un attribut entreprise pour un étudiant (la dernière ligne indique que cet attribut est une chaine de 256 caractères maximum
#umlvPerson attributetype ( 2.5.4.42.1.5 NAME 'umlvStudentEnterprise' DESC 'Enterprise of a student' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15(256) )
LDAP fournit plusieurs classes répondant aux utilisations les plus courantes. Toutefois, il est possible de créer ses propres classes en héritant des classes existantes afin d'ajouter de nouveaux attributs. Voici un exemple de déclaration d'une classe étudiant qui hérite de la classe inetOrgPerson (fournissant déjà des attributs comme le nom, prénom, adresse, ..) en lui ajoutant un attribut facultatif entreprise :
#umlvStudent objectclass ( 2.5.6.42.2.2 NAME 'umlvStudent' DESC 'Student at the UMLV' SUP InetOrgPerson MAY ( enterprise ) )
Ces classes peuvent être :
- abstraites, elles ne sont alors pas instanciables mais servent de base afin d'être hérités par d'autres classes
- structurelles qui sont les classes les plus utilisés car instanciables
- auxiliaires permettant d'ajouter des attributs facultatifs à des classes structurelles
Modèle de nommage
Le modèle de nommage définit l'organisation des donnés dans l'arbre. Il est représenté par le DIT(Directory Information Tree) qui constitue l'arbre de l'annuaire. Chaque noeud de cet arbre est une instance du schéma définie par le modèle d'information. Ces noeuds peuvent être nommé grâce à leur position dans l'arbre.
Sur le DIT précédent, l'élément DURIS ETIENNE est désigné par sa position dans la branche personnes / i2000 / univ-umlv / fr.
Ce chemin est nommé Distinguished Name (DN) et est représenté comme suit :
cn=DURIS ETIENNE, ou=personnes, o=iƩ000, dc=univ-umlv, dc=fr
Modèle fonctionnel
Le modèle fonctionnel décrit les fonctions offertes par l'annuaire :
- Connexion / déconnexion
- Recherche
- Mise à jour
- Opérations annexes (prévues par les extensions du protocole)
- base object qui indique d'oû commence la recherche
- scope indiquant la profondeur de la recherche dans l'arbre
- size limit permettant de donner une limite au nombre de réponses
- search filter qui fixe un filtre de recherche selon les attributs des noeuds visités
- list of attributes précise la liste d'attribut à retourner
&(objectclass=person)(cn=1*)(!(location=Paris))
Ce filtre permet de limiter la recherche aux noeuds de type person dont le nom commence par la lettre A et dont l'attribut location n'est pas Paris.
Manipulation des données
LDAP fournit différentes méthodes pour communiquer avec un annuaire.
Le premier moyen consiste en une connexion type client/serveur permettant à une application de se connecter / authentifier auprès d'un serveur LDAP et d'effectuer des opérations de recherche, d'ajout ou de modification de données. Le schéma ci-dessous décris les étapes d'une session LDAP.
Si ce type de communication est adapté à la majorité des applications possibles, un autre mode de communication est prévu, notamment pour les opérations d'import ou d'export, ou dans le cas de communication entre annuaires. Deux protocoles complètent ce premier:
- LDIF (LDAP Data Interchange Format) : désigne un format d'échange sous forme de fichier ASCII. Il permet de décrire les données d'un annuaire, son schéma ainsi que des opérations (ajout, supression, ...). Il est particulièrement adapté à l'exportation d'un annuaire dans le but de le sauvegarder ou de l'importer sur un autre serveur (replication).
dn: cn=DURIS ETIENNE,ou=personnes,o=i2000,dc=univ-umlv,dc=fr Changetype: add objectClass: top objectClass: frUmlvStudent Cn:DURIS ETIENNE frUmlvPersonRole: ou=enseignant,ou=roles,o=i2000,dc=univ-umlv,dc=fr mail: eduris@univ-mlv.fr
- DSML (Directory Services Markup Language) : fournit les mêmes fonctionnalités que LDIF mais a la particularité d'être structuré en XML. Il est ainsi utile lorsque le protocole LDAP ne peut pas être utilisé (par exemple, un ancien téléphonique mobile ne disposant pas de client LDAP natif mais possédant une application reconnaissant le standard XML)
<?xml version='1.0' encoding='ISO-8859-1' ?> <dsml:dsml xmlns:dsml='http://www.dsml.org/DSML'> <dsml:directory-entries> <dsml:entry dn='uid=DURIS ETIENNE,ou=personnes,o=i2000,dc=univ-umlv,dc=fr'> <dsml:objectclass> <dsml:oc-value>top</dsml:oc-value> <dsml:oc-value>frUmlvStudent</dsml:oc-value> </dsml:objectclass> </dsml:entry> </dsml:directory-entries> </dsml:dsml>
Modèle de sécurité
Un point intéresssant de ce protocole LDAP est sa couverture des différentes notions de sécurités. S'il est utilisé aujourd'hui comme point central dans la sécurisation des accès dans de nombreuses architectures, c'est pour la richesse de sa sécurité. LDAP répond aux besoins suivants :
- Authentification : LDAP propose une authentifcation 'simple' (mot de passe transitant en clair sur le réseau) mais propose aussi une authentification via SASL qui permet de négocier au démarrage de la connexion le type d'authentification et l'algorithme à utiliser (MD5, Kerberos, SSL, ...)
- Confidentialité : La confidentialité de l'échange peut être effectuée via TLS (chiffrement par clef asymétriques). Cela s'effectue sur un port réseau dédié mais consomme ainsi une grande quantité de ressources (réseau mais surtout système en temps CPU). Une extension LDAPv3 nommée startTLS permet de passer temporairement en mode TLS pour effectuer certaines opérations critiques puis de revenir en mode non chiffré
- Chiffrement des données : LDAP étant un protocole ne définissant que l'échange lors d'une connexion, le chiffrement des données stockées dépend des implémentations des serveurs mais ces derniers possèdent pour la plupart cette fonctionnalité
- Intégrité des données : Tout comme le chiffrement des données, l'intégrité des données stockées est dépendante de l'implémentation du serveur. Ces derniers permettent cette fonctionnalité via l'utilisation du couple clef privée / clef publique permettant d'attester la modification par une personne (signature numérique)
- Habilitations : les habilitations ne sont pas imposées par la version 3 du protocole mais devrait l'être dans une version future. Toutefois, presque tous les serveurs proposent la gestion des habilitations et si leur déclaration peuvent diverger, le principe reste le même : attribuer un droit particulier (lecture, modification suppression, comparaison, ...) sur un élément à un élement de l'annuaire