First commit
This commit is contained in:
commit
5c269302ed
59 changed files with 5613 additions and 0 deletions
BIN
content/installations/1-LDAP/files/CoursLinux.pdf
Normal file
BIN
content/installations/1-LDAP/files/CoursLinux.pdf
Normal file
Binary file not shown.
BIN
content/installations/1-LDAP/files/RZO LDAP.pdf
Normal file
BIN
content/installations/1-LDAP/files/RZO LDAP.pdf
Normal file
Binary file not shown.
BIN
content/installations/1-LDAP/files/RZO Messagerie cours.pdf
Normal file
BIN
content/installations/1-LDAP/files/RZO Messagerie cours.pdf
Normal file
Binary file not shown.
263
content/installations/1-LDAP/index.md
Normal file
263
content/installations/1-LDAP/index.md
Normal file
|
@ -0,0 +1,263 @@
|
|||
---
|
||||
title: Les annuaires LDAP
|
||||
date: 2018-09-06
|
||||
tags: ["annuaire", "LDAP", "LDIG"]
|
||||
categories: ["Installations", "Cours"]
|
||||
---
|
||||
|
||||
**LDAP** pour *Lightweight Directory Access Protocol* est à l'origine un
|
||||
protocole utilisé pour la modification et la consultation de services
|
||||
d'annuaire. Il a évolué pour devenir une norme pour les services d'annuaire
|
||||
incluant un modèle de données, un modèle de nommage, un modèle fonctionnel, un
|
||||
modèle de sécurité et un modèle de réplication.
|
||||
|
||||
Dérivé du protocole x500, réputé "usine à gaz" complexe à mettre en place et
|
||||
peu performant, LDAP se veux, comme son nom l'indique plus léger, il est
|
||||
standardisé par l'IETF. La version actuelle est la LDAPv3 définie dans plusieurs
|
||||
RFC en commençant par la RFC 4510
|
||||
|
||||
# Les modèles du LDAPv3
|
||||
|
||||
Ils sont au nombre de 4 :
|
||||
|
||||
- **le modèle d'information** qui reprend entres autres le schéma, les OID, les
|
||||
attributs, les classes d'objets
|
||||
- **le modèle de désignation** qui s'attache au nommage des entrées, à la
|
||||
hiérarchisation des données, au lien LDAP - DNS
|
||||
- **le modèle de services** qui décrit les services offerts par le service
|
||||
d'annuaire
|
||||
- **le modèle de sécurité** qui défini l'authentification, la confidentialité,
|
||||
l'intégrité et la gestion des habilitations.
|
||||
|
||||
# Le modèle d'information
|
||||
|
||||
Il décrit principalement le schéma de l'annuaire : les *attributs*, les
|
||||
*syntaxes*, les *classes d'objets* et les *règles de recherches*.
|
||||
|
||||
## les attributs
|
||||
|
||||
Se sont les éléments de base du schéma décrit comme suit :
|
||||
|
||||
```
|
||||
attributetype (
|
||||
<OID> # identifiant OID unique
|
||||
NAME <nom> # nom de l'attribut
|
||||
DESC <desc> # description de l'attribut
|
||||
OBSOLETE # indique aue l'attribut est obsolète
|
||||
SUP <classe> # classe parente de l'attribut
|
||||
EQUALITY <règle> # nom de la règle de recherche
|
||||
ORDERING <règle> # nom de la règle d'ordenancement
|
||||
SUBSTR <règle> # nom de la règle de recherche dabs une sous-chaine
|
||||
# de caractère
|
||||
SYNTAX <syntax> # syntaxe de l'attribut
|
||||
SINGLE-VALUE # indique d'une seule valeur est attendue
|
||||
COLLECTIVE # indique que le schéma est collectif
|
||||
NO-USER-MODIFICATION # indique aue l'utilisateur ne peut modifier l'attribut
|
||||
USAGE # usage de l'attribut.
|
||||
)
|
||||
```
|
||||
|
||||
Voici un exemple concret :
|
||||
|
||||
```
|
||||
attributetype (
|
||||
2.5.4.16
|
||||
NAME 'postalAddress'
|
||||
DESC 'RFC2256: postal address'
|
||||
EQUALITY caseIgnoreListMatch
|
||||
SUBSTR caseIgnoreListSubstringsMatch
|
||||
SYNTAX 1.3.6.1.4.1.1466.115.121.1.41
|
||||
)
|
||||
```
|
||||
|
||||
## Les attributs
|
||||
|
||||
On distingue les **attributs utilisateurs** qui caractérisent l'objet manipulé
|
||||
par les utilisateurs des **attributs opérationnels** manipulés seulement par le
|
||||
serveur afin de modifier les données.
|
||||
|
||||
### Les OID - Object IDentifiers
|
||||
|
||||
Ce sont des identifiants universels, représentés par une suite d'entiers séparés
|
||||
par des points. Il sont organisés sous forme hiérarchique ainsi seul l'organisme
|
||||
1.2.3 peur donner la signification de 1.2.3.4.
|
||||
|
||||
Leur objectif est d'assurer l'interopérabilité entre différents logiciels et son
|
||||
utilisés dans le LDAP, mais aussi le SNMP.
|
||||
|
||||
Voir la [liste des OID](https://ldap.com/ldap-oid-reference-guide/)(en). Il est
|
||||
possible d'utiliser [ce site](http://oid-info.com/get/)(en) pour faire une
|
||||
recherche par OID.
|
||||
|
||||
## Les syntaxes
|
||||
|
||||
Elles permettent d'indiquer la règle à suivre pour enseigner l'attribut. Si, par
|
||||
exemple, l'attribut suit une syntaxe dn et l'utilisateur saisit une chaîne de
|
||||
caractère lambda, l'attribut ne pourra être renseigné.
|
||||
|
||||
## Les classes d'objets
|
||||
|
||||
Ils représentent une collection d'attributs . On peut y définir, par exemple, ce
|
||||
qui est obligatoire ou facultatif. Voici une description du format :
|
||||
|
||||
```
|
||||
ObjectClassDescription (
|
||||
<OID> # OID de la classe
|
||||
NAME <nom> # nom de la classe
|
||||
DESC <desc> # description de la classe
|
||||
OBSOLETE # indique que la classe est obsolete
|
||||
SUP <classe> # indique la classe parente
|
||||
ABSTRACT # Les 3 éléments suivant sont au choix ( voir l'explication
|
||||
STUCTURAL # ci-dessous
|
||||
AUXILIARY
|
||||
MUST () # Liste des attributs obligatoires
|
||||
MAY () # liste des attributs facultatifs
|
||||
)
|
||||
```
|
||||
|
||||
Voici un exemple concret avec les classes `person` et `organisationnalPerson`:
|
||||
|
||||
```
|
||||
( 2.5.6.6
|
||||
NAME 'person'
|
||||
SUP top
|
||||
STRUCTURAL
|
||||
MUST ( sn $ cn )
|
||||
MAY ( userPassword $ telephoneNumber $ seeAlso $
|
||||
description )
|
||||
)
|
||||
( 2.5.6.7
|
||||
NAME 'organizationalPerson'
|
||||
SUP person
|
||||
STRUCTURAL
|
||||
MAY ( title $ x121Address $ registeredAddress $
|
||||
destinationIndicator $ preferredDeliveryMethod $
|
||||
telexNumber $ teletexTerminalIdentifier $
|
||||
telephoneNumber $ internationaliSDNNumber $
|
||||
facsimileTelephoneNumber $ street $ postOfficeBox $
|
||||
postalCode $ postalAddress $
|
||||
physicalDeliveryOfficeName $ ou $ st $ l )
|
||||
)
|
||||
```
|
||||
|
||||
### Les types de classes d`objets
|
||||
|
||||
Il en existe trois :
|
||||
|
||||
- **abstraites** : ce sont des classe de plus haut niveau non instanciable mais
|
||||
pouvant être dérivées. la classe d'objets la plus haute étant `top` dont
|
||||
toute classe dérive
|
||||
- **structurelles** : sont des classes instanciables.
|
||||
- **auxiliaires** : sont des classes permettant d'ajouter des attributs
|
||||
facultatifs à des classes structurelles
|
||||
|
||||
Voir diaporama du cours page 41.
|
||||
|
||||
## Les règles de recherche
|
||||
|
||||
Elles permettent aux serveur de comparer les valeurs des attributs avec celles
|
||||
demandées dans les requêtes.
|
||||
|
||||
L'exemple ci-dessous présente une règle de recherche sur un entier :
|
||||
|
||||
```
|
||||
(
|
||||
2.5.13.14
|
||||
NAME
|
||||
'integerMatch'
|
||||
1.3.6.1.4.1.1466.115.121.1.27 )
|
||||
```
|
||||
|
||||
# Le modèle de désignation
|
||||
|
||||
Afin de pouvoir identifier tous les objets dans l'annuaire, il est important de
|
||||
définir des règles de nommage communes a tous le service d'annuaire. deux
|
||||
notions importante apparaissent :
|
||||
|
||||
- le **RDN** pour *Relative Distinguished Name* est un nom unique seulement
|
||||
dans le niveau considéré.
|
||||
- le **DN** pour *Distinguished Name** est un nom unique identifiant un objets
|
||||
dans l'arbre. Il est la somme de tous les RDN
|
||||
|
||||
Pour un nommage cohérent, il est important de définir des règle commune de
|
||||
nommage pour s'assurer de la cohérence des RND. Ceci permet de résoudre les
|
||||
problèmes d'homonymie.
|
||||
|
||||
Exemple :
|
||||
|
||||
```
|
||||
RDN = CN=DURAND Yves
|
||||
CN=DURAND Yves,L=Paris,L=Ile de France,C=fr
|
||||
```
|
||||
|
||||
# L'organisation hiérarchique
|
||||
|
||||
Un annuaire se présente sous la forme d'un arbre (DIT pour *Directory
|
||||
information Tree*).
|
||||
|
||||
Il peut refléter l'organisation hiérarchique de la
|
||||
structure ou son implantation géographique, voir même mixer les deux.
|
||||
|
||||
Il peut aussi représenter l'organisation de l'entreprise sous forme sémantique
|
||||
en groupant les informations qui ont un même sens (personnes, groupes,
|
||||
applications et.). Cette configuration facilite l'administration des droits
|
||||
d'accès. Par exemple en affectant les droits d'écriture au DRH seulement sur
|
||||
`ou=Personnes`
|
||||
|
||||
# Le modèle de services
|
||||
|
||||
LDAP est basé sur un modèle **Client <> Serveur**. Le client transmet une
|
||||
requête décrivant une ou plusieurs actions à réaliser sur l'annuaire. Le serveur
|
||||
est lui responsable de sa réalisation. Le serveur renvoi alors le résultat ou
|
||||
une ou plusieurs références à d'autres serveurs susceptibles d'accéder à la
|
||||
demande du client.
|
||||
|
||||
Toutes les opération sont encapsulées dans une envelope commune : **le message
|
||||
LDAP** *(LDAPMEssage)*
|
||||
|
||||
Chaque requête possède son propre identifiant Il est possible de réutiliser cet
|
||||
identifiant si :
|
||||
|
||||
- la requête n'a pas été abandonnée
|
||||
- elle n'ai pas eu de réponse à l'instant donné.
|
||||
|
||||
Quelle que soit la requête, la réponse sera donné sous la forme d'un message
|
||||
*LDAPResult*
|
||||
|
||||
# Le modèle de sécurité
|
||||
|
||||
L'accès à l'annuaire LDAP peut se faire :
|
||||
|
||||
- en accès anonyme
|
||||
- par authentification via un mot de passe
|
||||
- par authentification par mot de passe via une liaison chiffrée TLS
|
||||
- par authentification forte via certificats
|
||||
- par authentification forte via certificats et liaison chiffrée TLS
|
||||
|
||||
# Le format LDIF
|
||||
|
||||
Le **LDIF** *LDAP Data Interchange Format* est un format de fichier de type
|
||||
texte (ASCII) utilisé pour la représentation des données issues d'un annuaire
|
||||
LDAP ou d'opération sur les données (mais pas les deux à la fois).
|
||||
|
||||
Il est donc utilisé pour faciliter les opérations d'importation et/ou
|
||||
d'exportation massive d'informations. Il contient une série d'enregistrements
|
||||
séparés par des séparateur de lignes. Un enregistrement décrit un enregistrement
|
||||
ou une modification.
|
||||
|
||||
Exemple :
|
||||
|
||||
```ldif
|
||||
dn: dmdName=Devices,ou=iut_mont-de-marsan,dc=universite, dc=education,dc=gouv,dc=fr
|
||||
dmdName: Devices
|
||||
objectClass: dmd
|
||||
objectClass: top
|
||||
dn: dmdName=Applications,ou=iut_mont-de-marsan,dc=universite,dc=education,dc=gouv,dc=fr
|
||||
dmdName: Applications
|
||||
objectClass: dmd
|
||||
objectClass: top
|
||||
```
|
||||
|
||||
Voir le format
|
||||
[LDIF](https://fr.wikipedia.org/wiki/LDAP_Data_Interchange_Format) sur
|
||||
Wikipedia.
|
Loading…
Add table
Add a link
Reference in a new issue