• 2 heures
  • Moyenne

Mis à jour le 08/01/2019

Modèle fonctionnel

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

La base

La base est le DN à partir duquel une recherche est faite. Par exemple "dc=cogip,dc=fr" effectuerait une recherche sur tout l'arbre, puisqu'il s'agit de la racine.

La portée

Le scope est le nombre de niveaux sur lesquels l'action va être effectuée. Il existe 3 niveaux différents :

 sub

 l'action est effectuée récursivement à partir de la base spécifiée sur la totalité de l'arborescence.

 one

 l'action est effectuée sur les fils directs, c'est-à-dire un seul niveau inférieur par rapport à la base spécifiée. Pour notre arbre de la COGIP, au niveau le plus haut "dc=cogip,dc=fr", on aurait pour la portée ONE "ou=users,dc=cogip,dc=fr" et "ou=groups,dc=cogip,dc=fr".

base

 l'action est effectuée uniquement sur la base spécifiée. Une recherche sur "dc=cogip,dc=fr" avec la portée BASE renverrait cette entrée uniquement.

Les filtres

Un filtre va permettre d'avoir des critères de la recherche. Il est constitué d'un ensemble d'opérations, portant sur des attributs, combinées avec les opérateurs booléens classiques: ET, OU et NON.  Sa syntaxe est donc : attribut OPERATEUR valeur La forme générale d'un filtre est une combinaison : (operator(search operation)(search operation)...)). Les opérateurs de recherche peuvent ensuite être combinés

 Égalité

 : =

 Approximation

 ~=

 Supérieur ou égal

 >=

 Inférieur ou égal

 <=

Un test d'inférioté : (&(X>=Y)(!(X=Y)))

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 :

Il faut utiliser les parenthèses ( ) pour <, > et les tests plus complexes. Pour ces tests, on utilisera les opérateurs suivants :

 L'intersection (et)

  L'union (ou)

 |

 La négation (non)

 !

  • Combiner plusieurs éléments

(&(objectClass=person)(|(givenName=Jean-Christian)(mail=jranu*)))
  • Toutes les personnes ayant leur numéro de téléphone renseigné dans la base

&(&(objectclass=person)(telephoneNumber=*))
  • Toutes les personnes dont le nom commence par 'A' et n'habitant pas Paris

&(&(objectclass=person)(cn=A*)(!(l=Paris)))
  • Toutes les personnes dont le nom ressemble à Febvre (Faivre, Fèvre, Lefebvre, ...)

&(&(objectclass=person)(cn~=febre))
(&(objectclass=person)(cn=*f*vre))

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.

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.

attributid-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.

Les opérations

Le client donne à chaque requête un identifiant (Message ID). Le serveur y répond avec le même identifiant, en incluant un code indiquant l'état (succès, échec, …). La réponse inclut également les données éventuelles qui peuvent résulter d'une recherche. Il inclut aussi un code ID.

LDAP fournit des fonctions pour interagir avec les données :

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

Modify

Modifie une entrée

Modify DN

Déplace ou renomme une entrée

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

Bind

L'opération bind authentifie le client au sein du serveur. Il vérifie le mot de passe en le comparant avec l'attribut userPassword de l'entrée correspondante. La valeur de l'attribut contenant le mot de passe commence avec le nom entre accolades de l'algorithme utilisé pour coder le mot de passe (par exemple : userPassword: {md5}aGZh5…).

Le bind anonyme, c'est-à-dire sans fournir d'identifiant ni de mot de passe, met la connexion dans un état anonyme. Le client ne pourra pas faire certaines opérations sur tout ou une partie de l'annuaire, en fonction des droits mis en place.

Le SASL bind permet d'utiliser d'autres mécanismes d'authentification : Kerberos, certificat client, etc. Le simple bind envoie le DN de l'utilisateur et son mot de passe en clair, c'est pourquoi la connexion doit être sécurisée.

StartTLS

L'opération StartTLS établit une connexion sécurisée entre le client et le serveur. A la connexion, le client et le serveur établissent une connexion sécurisée avant toute autre commande.

Search et Compare

Search est utilisée pour faire une recherche et rapatrier des entrées.

Paramètres

Description

 baseObject

 le DN (Distinguished Name) de l'entrée à partir de laquelle effectuer la recherche

scope

 cf. "La portée"

filter

 cf.  "Les filtres"

derefAliases

indique si la recherche doit suivre les alias dans les entrées (entrée qui font référence à d'autres entrées)

attributes

liste des attributs à ramener à l'issue de la recherche

sizeLimit

limitation du nombre d'entrées ramenées à l'issue de la recherche

timeLimit

limitation du délai de recherche, exprimé en secondes

typesOnly

ne renvoie que les types d'attribut et non les valeurs

Le serveur renvoie les entrées qui correspondent, suivies par le code retour de la commande (code de retour).

Compare prend en argument un DN, un nom d'attribut et une valeur d'attribut, puis vérifie si l'entrée correspondante contient bien un attribut ayant cette valeur.

Mise à jour : Add, Delete, Modify

Les opérations de mise à jour prennent en argument le DN de l'entrée à mettre à jour et la liste des attributs à modifier ainsi que la modification à apporter.

add

L'ajout d'une entrée peut également contenir une liste d'attributs et de valeurs à associer avec l'entrée.

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

La modification de DN (déplacement/renommage) prend en argument le RDN de l'entrée et le DN du nouveau parent, ainsi qu'un indicateur de suppression de l'ancien RDN.

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.

delete

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.

Ajout de valeurs à un attribut

dn: <distinguished name>
changetype: modify
add: <attribut>
<attribut>: <attrvalue>
<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.

Suppression de valeurs à un attribut

Si l'on souhaite effacer uniquement certaines valeurs, il faut passer en paramètres ces valeurs.

dn: <distinguished name>
changetype: modify
delete: attribut
<attribut>: <1ere valeur à effacer>
<attribut>: <2eme 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 :

dn: <distinguished name>
changetype: modify
delete: attribut

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.

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

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.

dn: <distinguished name>
changetype: moddn
newrdn: <nouveau RDN>
deleteoldrdn: <1 ou 0>
newsuperior: <nouveau parent>

deleteoldrdn indique si l'on souhaite ou non conserver l'ancienne entrée.

Pour modifier un RDN, on ne mettra pas l'attribut newsuperior.

Abandon

L'opération Abandon envoie une requête au serveur pour lui dire d'abandonner une opération en lui fournissant son identifiant.  Tous les serveurs ne la prennent pas en charge.

Unbind

L'opération Unbind ferme la connexion. Il n'y a aucune réponse. Il est plus propre d'utiliser Unbind, même si ça n'est pas obligatoire.

Les URL LDAP

C'est une méthode simple pour interroger un annuaire LDAP, qui ne nécessite aucune notion de programmation (seulement de la logique ;)).

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

 Paramètres

 Description

 hostname

 Adresse du serveur (optionnelle)

port

Port TCP de la connexion (optionnelle)

base_dn

DN  du point de départ de la recherche

attributes

Les attributs que l'on veut récupérer, séparés par des virgules (facultatif)

scope

cf. La portée

filter

Le filtre de recherche (cf. Les filtres). 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.

Exemples

  • Par  tous les uid de la branche users de la COGIP :

ldap://localhost:389/ou=users,dc=cogip,dc=fr?uid?sub
  •   Lecture de toutes les personnes du service vente :

ldap://localhost:389/ou=vente,dc=cogip,dc=fr?cn,tel,mail?scope=sub?(objetclass=person">ldap://localhost:389/ou=ventes,o=Netscape,c=US?cn,tel,mail?scope=sub?(objetclass=person)
  • Lecture des objets personnes d'un annuaire :

ldap://localhost:389/??sub?objectclass=person
  • Recherche de Jean-Christian Ranu:

ldap://localhost:389/uid=Jean-Christian Ranu
  • Recherche approximative d'une personne :

ldap://localhost:389/o=users,dc=fr?mail,uid,sub?(sn=Ranu)

Exemple de certificat de réussite
Exemple de certificat de réussite