IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Annuaires LDAP avec OpenLDAP

Annuaires LDAP avec OpenLDAP


précédentsommairesuivant

III. Présentation de quelques standards LDAP

Dans le chapitre précédent, nous avons vu que la norme LDAP est une agglomération de différentes RFCs, de différents standards. Dans ce chapitre quelques uns de ces standards vont être présentés.

III-A. Les fichiers LDIF

III-A-1. Introduction aux fichiers LDIF

LDIF est un format de fichier, spécifié dans la [rfc2849]. Les fichiers de type LDIF sont utilisés d'une part pour décrire des objets d'un annuaire LDAP, et d'autre part pour décrire un ensemble d'opérations à effectuer sur le contenu d'un annuaire. L'utilisation descriptive permet, par exemple, de créer les premières entrées d'un annuaire, ou bien d'avoir une sauvegarde d'un annuaire sous la forme d'un fichier.

Le format LDIF a été développé par l'Université du Michigan, dans ses implémentations d'annuaire LDAP. La première utilisation a été celle de fichiers descriptifs, puis le format a évolué pour pouvoir décrire des modifications apportées à un annuaire.

III-A-2. Syntaxe

La syntaxe d'une entrée dans un fichier LDIF est la suivante :

 
Sélectionnez
dn: <distinguished name>
<attrdesc>: <attrvalue>
<attrdesc>: <attrvalue>
<attrdesc>:: <base64-encoded-value>
<attrdesc>:< <URL>

Soit en premier le DN de l'entrée décrite, ou bien de l'entrée sur laquelle nous allons effectuer des opérations, suivi d'une liste d'attributs et de leurs valeurs, les attributs pouvant décrire une opération en fonction du type de fichier LDIF.

Les attributs dont la valeur contient des accents doivent être encodés en UTF-8. Les attributs contenant des caractères spéciaux doivent être encodés en base 64. Les attributs peuvent être sur plusieurs lignes, à condition que les lignes supplémentaires commencent par un blanc. Les attributs dont la valeur est localisée dans un fichier sont introduit par la :< ou lieu de :. Les espaces entre les noms d'attributs et leur valeur sont optionnels, mais utiles à la lisibilité du fichier.

Le DN doit être encodé en base 64, lorsqu'il commence par une espace, un <, un : , un retour ligne ou un retour chariot. De même pour les attributs qui se terminent avec une espace.

Un fichier LDIF peut commencer par un numéro de version, qui doit être 1: version: 1. Les commentaires commencent par #. Les différentes entrées sont séparées par une ligne blanche, qui peut être un CR LF ou LF. Il ne peut y avoir plus deux lignes blanches consécutives.

Il est possible de rajouter des options à un attribut. L'intitulé de l'option se rajoute au nom de l'attribut, avec un ;. Il est possible de mettre plusieurs options à la suite. Si un attribut a une valeur vide, il peut être représenté, la valeur dans le fichier LDIF restant vide.

Plusieurs opérations sur les attributs (ci-après changetype: add, delete ou modidy) peuvent s'enchaîner, en les séparant par une ligne contenant un -.

III-A-3. Liste des opérations

III-A-3-a. Ajout d'une entrée

 
Sélectionnez
dn: <distinguished name>
changetype: add
objectclass: top
objectclass: <objectclassvalue>
<attrdesc>: <attrvalue>
<attrdesc>: <attrvalue>

Il existe certaines commandes d'administration qui permettent d'insérer dans un annuaire des objets décrits dans un fichier LDIF, sans qu'il soit nécessaire que ce fichier LDIF contienne la commande d'insertion ci-dessus.

III-A-3-b. Suppression d'une entrée

 
Sélectionnez
dn: <distinguished name>
changetype: delete

Ce n'est pas la peine de mettre des attributs supplémentaires. L'objet ne peut être effacé que s'il n'a pas de descendants.

III-A-3-c. Ajout de valeurs à un attribut

 
Sélectionnez
dn: <distinguished name>
changetype: modify
add: <attribut>
<attribut>: <attrvalue1>
<attribut>: <attrvalue2>

On peut ainsi donner à l'attribut autant de valeurs que l'on souhaite. Les attributs précédents de l'objet ne sont pas effacés.

III-A-3-d. Suppression de valeurs à un attribut

Si l'on souhaite effacer uniquement certaines valeurs, il faut passer en paramètres ces valeurs. L'opération a la syntaxe suivante :

 
Sélectionnez
dn: <distinguished name>
changetype: modify
delete: attribut
<attribut>: <première valeur à effacer>
<attribut>: <seconde valeur à effacer>

Si l'on souhaite effacer toutes la valeurs d'un attribut d'un objet, il ne faut passer en paramètres aucune valeur de l'attribut. La syntaxe a ainsi la forme suivante :

 
Sélectionnez
dn: <distinguished name>
changetype: modify
delete: attribut

III-A-3-e. Remplacer les valeurs d'un attribut

Similaire au deux cas précédents, les paramètres contiennent cette fois les valeurs qui remplacent les valeurs précédentes :

 
Sélectionnez
dn: <distinguished name>
changetype: modify
replace: attribut
<attribut>: <nouvelle valeur 1>
<attribut>: <nouvelle valeur 2>

III-A-3-f. Modification du DN et/ou du RDN

La syntaxe pour modifier le DN d'une entrée, soit modifier sa position dans l'arbre, ou pour modifier son RDN, soit modifier son identifiant, sont similaires. La modification d'un DN s'écrit :

 
Sélectionnez
dn: <distinguished name>
changetype: moddn
newrdn: <nouveau relative distinguished name>
deleteoldrdn: <1 ou 0>
newsuperior: <nouveau parent>

deleteoldrdn indique si l'on souhaite ou non conserver l'ancienne entrée. Ce type d'opération ne marche que sur les serveurs LDAP respectant la version 3 de la norme.

La modification d'un RDN s'écrit :

 
Sélectionnez
dn: <distinguished name>
changetype: modrdn
newrdn: <nouveau relative distinguished name>
deleteoldrdn: <1 ou 0>

III-B. Filtre de recherche

III-B-1. Présentation générale

Un filtre LDAP est comparable à une requête SQL. C'est une chaîne de caractères destinée à être exécutée pour récupérer des entrées d'un annuaire LDAP. Plus précisément elle ne définit que la partie WHERE d'une requête SQL: un filtre définit sur quels objets et sur quels attributs doit se faire la recherche.

Un filtre LDAP est donc constitué d'un ensemble d'opérations, portant sur des attributs, combinées avec les opérateurs booléens classiques: ET, OU et NON.

Une opération élémentaire de recherche s'écrit sous la forme : attribut OPERATEUR valeur La forme générale d'un filtre est une combinaison : (operator(search operation)(search operation)...)).

La syntaxe complète des filtres LDAP est décrite dans le document [rfc2254], qui fait partie de l'ensemble des RFC définissant la norme LDAP.

III-B-2. Les opérations élémentaires

Une opération élémentaire est composée d'un attribut, d'un opérateur de comparaison et d'une valeur. Pour effectuer des filtres sur le type des objets, sur leur classe, il suffit d'utiliser leur objectclass comme un attribut. Au besoin, il est possible d'utiliser l'OID de l'attribut plutôt que son nom.

Les opérateurs de recherche sont les suivants :

Égalité : =
Approximation ~=
Supérieur ou égal >=
Inférieur ou égal <=

S'il n'existe pas d'opérateur : "différent de", "strictement inférieur", ou "strictement supérieur", il est possible de les obtenir à l'aide des opérateurs autorisés, en utilisant un opérateur booléen "NON".

La valeur accepte le caractère '*' afin de permet des recherches sur des parties de chaînes. Ce même caractère, seul, permet de tester la présence d'un attribut. Ce caractère n'est valide qu'avec l'opération d'égalité.

Une opération doit obligatoirement se trouver entre deux parenthèses. Les valeurs qui sont dans la partie droite d'une opération élémentaire ne sont pas entre quote, mais certains caractères doivent être échappés :

Le caractère Sa valeur ASCII Le caractère dans un filtre
* 0x2a \2a
( 0x28 \28
) 0x29 \29
\ 0x5c \5c
NULL (caractère vide) 0x00 \00

Les opérateurs booléens sont les suivants :

L'opérateur NON !
L'opérateur ET &
L'opérateur OU |

Un opérateur booléen s'applique à toutes les opérations qui suivent jusqu'à l'opérateur suivant.

III-B-3. Exemples de filtres simples

Toutes les personnes ayant leur numéro de téléphone renseigné dans la base :

 
Sélectionnez
(&(objectclass=person)(telephoneNumber=*))

Toutes les personnes dont le nom commence par 'A' et n'habitant pas Paris :

 
Sélectionnez
(&(objectclass=person)(cn=A*)(!(l=Paris)))

Toutes les personnes dont le nom ressemble à Febvre (Faivre, Fèvre, Lefebvre, ...) :

 
Sélectionnez
(&(objectclass=person)(cn~=febvre))
(&(objectclass=person)(cn=*f*vre))

III-B-4. Les filtres étendus

En plus des attributs constituant une entrée d'un annuaire, il est possible, grâce aux filtres étendus, de considérer les éléments du DN comme faisant partie aussi de l'entrée elle même, lors de la recherche. La syntaxe est la suivante :

 
Sélectionnez
attribut:dn:=value

Par exemple le filtre (ou:dn:=users) récupérera non seulement toutes les entrées qui ont un attribut ou qui a pour valeur users, mais aussi toutes les entrées dont le DN contient un attribut ou avec la valeur users.

L'autre possibilité offerte par les filtres étendus est de modifier la règle de comparaison sur un attribut. La syntaxe est la suivante :

 
Sélectionnez
attribut:oid-matching-rule:=value

Par exemple, si un attribut a une règle de comparaison par défaut qui est insensible à la case, mais que l'on veut faire une recherche avec une valeur précise, qui tienne compte de la case, il faut modifier la règle de comparaison par défaut.

III-B-4-a. Changement de règle de comparaison dans un filtre

Dans cet exemple, on rend l'opération d'égalité sensible à la case

 
Sélectionnez
(cn:2.5.13.5:=Mickey)

Les filtres étendus permettent aussi de spécifier une règle de comparaison, sans spécifier d'attribut. La recherche s'effectue alors sur tous les attributs qui acceptent cette règle. On peut aussi étendre cette recherche au DN. Les syntaxes sont les suivantes:

 
Sélectionnez
:oid-matching-rule:=value
:dn:oid-matching-rule:=value

Tous les filtres ne marchent qu'avec l'opérateur d'égalité, et celui-ci s'écrit :=, lieu de = dans le cas de filtres simples.

Il n'est pas permis non plus d'utiliser le caractère * pour faire des recherches sur des sous chaînes avec les filtres étendus.

III-C. Urls LDAP

III-C-1. Présentation

Les URL LDAP sont une notation pour identifier, localiser, des entrées d'un annuaire, résultat d'une recherche. Elles représentent un moyen simple pour pointer sur un annuaire, ou bien seulement une partie de l'annuaire, telle une branche ou des objets disséminés. Elles sont utilisées par des clients web, dans des fichiers de configuration, ou encore dans des entrées de l'annuaire. Elles ont l'avantage de ne nécessiter aucune notion de programmation.

La syntaxe URL de LDAP est décrite dans la [rfc2255] qui est une mise à jour de la [rfc1959], datée de 1996. La nouvelle RFC intègre la notion d'extension.

III-C-2. Syntaxe

La syntaxe d'une url est la suivante :

 
Sélectionnez
ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>?<extensions>

avec les paramètres suivants :

hostname Adresse du serveur. L'adresse peut être absente, le client est supposé connaître un serveur LDAP à contacter, en fonction du contexte.
port Port TCP de la connexion. Par défaut il s'agit du port 389. Il ne peut y avoir de port s'il n'y a pas d'adresse.
base_dn DN de l'entrée qui est le point de départ de la recherche.
attributes Les attributs que l'on veut récupérer, séparés par des virgules. Si la valeur n'est pas remplie, ou si elle est rempli avec une *, tous les attributs d'usage userApplication doivent être retournés.
scope La profondeur de la recherche dans l'arbre : base, one ou sub.
filter Le filtre de recherche, tel que nous venons de le définir. Le filtre par défaut est (objectClass=*).
extensions Les extensions sont un moyen pour pouvoir ajouter des fonctionnalités aux URLs LDAP tout en gardant la même syntaxe. On peut mettre inclure plusieurs extensions dans une URL, en les séparant par des virgules. Les extensions ont le format suivant : type=value. La partie =value est optionnelle. Elles peuvent être préfixées par un ! pour signaler une extension critique. Une extension critique signifie que le client et le serveur doivent supporter tous les deux l'extension, sinon une erreur sera levée.

La [rfc2255] définit une extension bindname, dont la valeur est le DN utilisé par le client pour se connecter au serveur. Le client a la charge de demander à l'utilisateur de rentrer le mot de passe associé si nécessaire.

Tous les caractères non autorisés ou spéciaux dans les urls (voir section 2.2 de [rfc1738]) ainsi que le caractère '?' lorsqu'il est présent dans un DN, un filtre ou une extension, doivent être échappé avec la méthode décrite dans la [rfc1738]. Cette méthode consiste à écrire le caractère avec '%' suivi des deux chiffres hexadécimaux, formant sa valeur hexadécimale.

III-C-3. Exemples

Lecture de toutes les personnes du service vente :

 
Sélectionnez
ldap://ldap.netscape.com/ou=Sales,o=Netscape,c=US?cn,tel,mail?scope=sub?(objetclass=person)

Lecture des objets personnes d'un annuaire :

 
Sélectionnez
ldap://localhost:389/??sub?objectclass=person

Recherche de Valery Febvre :

 
Sélectionnez
ldap://ldap.easter-eggs.fr/cn=Valery Febvre,ou=Moyens Informatiques,dc=easter-eggs,dc=fr

Recherche approximative d'une personne :

 
Sélectionnez
ldap://ldap.easter-eggs.fr/o=easter-eggs,dc=fr?mail,uid,sub?(sn=Febvre)

précédentsommairesuivant

Copyright (c) 2005, Michaël Parienti Maire. This work is licensed under the Creative Commons Attribution-Share Alike License. Modifications, reproductions, diffusions autorisées à condition de mentionner le nom de l'auteur original et de conserver les termes de cette licence Creative Commons.