Retourner au contenu. Retourner à la navigation

 

Module 3

by civ @ 13/09/2006

Chapitre 03 - OpenLDAP

Mise en place d'un annuaire OpenLDAP

1. Présentation

1.1 Qu'est-ce qu'un annuaire ?

Dans la vie de tous les jours vous avez sûrement déjà été confrontés à un annuaire. On peut par exemple citer les bottins téléphoniques (Relation Nom/N° de téléphone) et le célèbre annuaire "les pages jaunes" qui contient les Noms, les N° de téléphone, les adresses et des informations complémentaires.

Dans touts les cas le principe reste le même, permettre l'accès facile et rapide à un certain nombre de données et ce, à partir de multiples critères de recherche.

Les annuaires électroniques ne sont pratiquement pas différents des annuaires papier, mise à part des fonctionnalités de sécurité (unité et intégrité des données) et de réplication (possibilité de faire une copie parfaite d'une partie de l'annuaire vers un autre).

1.2 L'annuaire X.500

1.2.1 Les concepts d'un annuaire électronique

En 1988 des opérateurs télécom décident de mettre en place le premier annuaire électronique :X.500.

Le but était :

  • Uniformiser l'accès aux services

  • Centraliser les utilisateurs et les ressources

  • Renforcement de l'authentification et protection des ressources

Le principe d'utilisation était très simple, un ou plusieurs clients peuvent se connecter à un ou plusieurs annuaires électroniques afin d'obtenir de plus amples informations sur une entité dont on ne connait qu'un attribut (nom, prénom, titre, n° de téléphone ...).

Schema1

Avant d'aller plus loin il est nécessaire de définir un peu de vocabulaire relatif à l'utilisation d'annuaires électroniques.

1.2.2 Un peu de vocabulaire

Le client qui se connecte à un annuaire est appelé AUA (Agent Utilisateur d'Annuaire).

Le serveur est appelé ASA (Agent Système d'annuaire).

Le protocole d'interaction entre les AUA et les ASA est appelé PSA.

Le contrôle des communications entre AUA et ASA est appelé DAP (Directory Access Protocol).

1.2.3 Différences entre Bases de données et annuaires

Un ASA est une base de donnée dans laquelle sont stockés les renseignements de l'annuaire. Ce qui différencie principalement un annuaire d'une base de donnée comme mySQL ou Postgre est que le PSA optimise la vitesse d'accès aux informations au détriment de la vitesse d'écriture.

En effet les données stockées dans un annuaires sont beaucoup plus souvent lues qu'écrites contrairement à une base de donnée dynamique installée sur un site web dont les articles vendus peuvent par exemple changer touts les jours.

Le PSA permet également à l'utilisateur de retrouver des renseignements dans un annuaire sans connaître l'emplacement exacte de ceux-ci.

Malheureusement la mise en place d'un annuaire de type X.500 était loin d'être simple, car basé sur les protocoles ISO et non TCP.

C'est dans une optique de simplification que l'université du Michigan à élaborée une version plus simple du DAP, basée sur TCP/IP : LDAP (Lightweight DAP)

1.3 LDAP un protocole d'accès aux annuaires simplifié et fonctionnel

Au départ LDAP n'était qu'un simple sous-composant des annuaires X.500 qui permettait un accès au données limité mais simplifié. Aujourd'hui LDAP est devenu un véritable annuaire (ASA et AUA) utilisable en environnement de production et bien plus simple à mettre en oeuvre qu'un annuaire X.500.

Un annuaire LDAP se conforme à quatre modèles de base :

  • Un modèle d'information : Définition du type de l'information stockée.

  • Un modèle de nommage : Comment l'information est-elle stockée et nommée au sein de l'annuaire?

  • Un modèle fonctionnel : Que peut on faire sur l'annuaire ? (recherche, ajout ..)

  • Un modèle de sécurité : Définition de l'accès aux ressources

Une autre fonctionnalité intéressante des annuaires LDAP est le format LDIF. Il s'agit d'un format d'échange de données qui permet d'importer et d'exporter des informations entre différents annuaires grâce à un simple fichier texte.

Nous verrons que ce fichier nous servira également lors du déploiement de notre annuaire.

Nous allons présenter dans le prochain chapitre un peu plus en détail les modèles d'information et de nommage sur lesquels reposent LDAP avant de nous pencher sur la mise en place d'OpenLDAP, l'implémentation libre du protocole LDAP.

2. Le modèle d'information

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

2.1 Elément de base d'un annuaire

L'élément de base d'un annuaire est appelé entry, il est composé d'un ensemble d'attributs qui identifient un objet, lui même référencé par un DN (Distinguished Name).

Schema2

Un attribut est composé d'une paire clé/valeur (type : valeur). L'ensemble des définitions des objets et des attributs qu'un serveur LDAP peut gérer est défini dans ce que l'on appelle le Directory Schema ( pour la suite de l'article nous appellerons le Directory Schéma tout simplement schéma).

Grâce au schéma en cours d'utilisation un annuaire LDAP peut vérifier et garantir de façon autonome la validité des enregistrements ainsi que leur syntaxe (Schema checking).

2.2 Les attributs d'un objet

Les attributs d'un objet peuvent être classés selon deux catégories :

User attribute : définit ce qui va être manipulé par les utilisateurs (nom, prénom etc ..)

System attributes : représente les données manipulées de manière interne par le serveur LDAP ( règles de comparaison, classes d'objets etc ..).

Note : En plus d'un jeu d'attributs prédéfinis au niveau du logiciel il est possible de définir vos propres attributs. L'ensemble des syntaxes possibles sont définies par la RFC du protocole LDAP v3 dans la section <4.3.2> :

http://www.faqs.org/rfcs/rfc2252.html

L'ensemble des attributs sont regroupés dans des classes d'objets. Une classe correspond à un modèle spécifiant l'ensemble des attributs que comportera tout objet de l'annuaire.

Comme nous l'avons mentionné plus haut il existe un certain nombre de classes d'objets et de schémas prédéfinis dans les annuaires LDAP. Parmi les attributs prédéfinis vous trouverez :


Un tableau

AttributDescription
cCode du pays en deux lettres (respectant le standard ISO 3166)
cnNom commun de l'objet
descriptionDescription de l'objet
distinguishedNameNom distinct (utilisé par d'autres attributs par héritage)
givenNamePrénom de la personne
nameNom relatif de l'objet
oNom de l'organisation
objectClassClasse d'objets
ouUnité organisationnelle (branche de l'organisation)
postalAddressAdresse postale (sans le code postal)
postalCodeCode postal
snNom de famille de la personne (surname)
titleTitre de la personne (différent de fonction)
uidIdentifiant unique de l'objet
userPasswordMot de passe de l'utilisateur

Veuillez vous reporter aux sections 5 à 8 de la RFC de LDAP pour une liste exhaustive des attributs prédéfinis.

2.3 Classes d'objets et héritage

Une classe d'objet LDAP hérite des attributs de ses parents, examinons par exemple le schéma suivant qui propose des classes d'objets standards:

Schema3

Nous pouvons voir que toute classe d'objet LDAP hérite de la classe Top. Ensuite nous avons 3 classes, respectivement country, person et organization. Tout en bas de l'arborescence on trouve deux autres classes ornizationalPerson et residentialPeron toute deux héritant de la classe person.

Ainsi un objet de la classe résidential person disposera, en plus de ses propres attributs, des attributs de la classe person et de la classe top

2.4 Accès à l'information

Afin d'accéder aux différentes informations stockées dans l'annuaire le protocole LDAP fourni neuf méthodes de base, 9 types de requêtes différentes que le client peut exécuter sur le serveur.

Celles-ci peuvent être classées en trois catégories :

Fonctions d'interrogation (recherche et comparaison dans l'annuaire) Fonctions de mise à jour (modification des entrées de l'annuaire) Fonctions de sessions (ouverture/fermeture de sessions)

Voici un tableau décrivant les différents types de requêtes disponibles :
Un tableau

OpérationDescription
AbandonAbandonne l'opération précédemment envoyées au serveur
AddAjoute une entrée au répertoire
BindInitie une nouvelle session sur le serveur LDAP
CompareCompare les entrées d'un répertoire selon des critères
DeleteSupprime une entrée d'un répertoire
ExtendedEffectue des opérations étendues
RenameModifie le nom d'une entrée
SearchRecherche des entrées d'un répertoire
UnbindTermine une session sur le serveur LDAP

A présent que nous savons comment l'information est stockée et manipulée dans les annuaires LDAP nous allons nous intéresser à la manière dont l'information est nommée est classée, il s'agit du modèle de nommage.


3. Le modèle de nommage

Le modèle d'information vous permet de définir un schéma, c'est-à-dire l'arbre d'héritage des différentes classes d'objets que vous allez utiliser dans votre annuaire.

Lors de la création de l'annuaire il va falloir définir l'organisation de vos objets. A cet effet vous allez créer un arbre DIT (Directory Information Tree) dont chaque noeud pourra être une instance de n'importe quelle classe d'objet définie dans votre schéma. Il s'agit donc de l'organisation des éléments entre eux au sein de l'arbre.

Prenons un exemple simple, imaginons le schéma (Directory Schéma) suivant :

Schema4

Expliquons brièvement le Directory schéma spécifié en partant du haut. Nous avons en premier l'objet TOP (père de toutes les classes de notre arborescence).

Puis nous avons défini une classe Company qui contiendra par exemple le nom de l'entreprise ainsi que son adresse.

Suivent deux classes OrgUnit et Person nous permettrons respectivement d'indexer différents secteur de l'entreprise ainsi que l'ensemble des contacts de l'entreprise (personnes extérieure à l'entreprise, par exemple des clients).

Pour finir nous avons la classe computer qui permet de référencer des ordinateur et OrgPerson qui nous permettra de référencer les membres de l'entreprise.

Utilisons à présent ce schéma pour créer un DIT simple :

Schema5

Note : Il est intéressant de remarquer que la hiérarchie du DIT respecte la hiérarchie des classes définies dans le schéma.

Ainsi les classes OrgUnit et person descendent directement de la classe company, il en est de même pour les objets Develop, Comm et contacts qui descendent tous de l'objet Labo-linux.

Les objets d'un DIT peuvent être désignés de deux manières différentes : DN : Distinguish Name RDN : Relative Distinguished Name

Le DN est composé de la suite des noms des entrées en partant de l'objet concerné vers la racine de l'arbre, en utilisant « , » comme séparateur. Par exemple le DN de l'objet C_comp est : Cp=C_comp,ou=Comm,Cy=Labo-linux.

Chaque composant de ce DN est appelé RDN ( ex : Cp=C_comp).

A noter également la possibilité de créer des alias. Il s'agit d'une référence sur un objet appartenant à une autre branche de l'annuaire mais stocké sur le même serveur. On crée un alias avec l'attribut aliasObjectName de l'objet alias.

L'intérêt principal des alias est de permettre d'utiliser plusieurs fois un objet au sein de l'annuaire tout en l'instanciant qu'une seule fois. De plus si l'instance d'origine est modifiée, tous les alias sont mis à jour. En bref un alias agit un peu comme un lien symbolique au sein d'un système de fichier.

Voici un exemple d'alias :

Schema6

Dans ce cas par exemple nous pourrons accéder en une seule et même requête aux informations concernant un utilisateur donné et l'imprimante dont il peut être l'administrateur. L'attribut aliasObjectName doit contenir le DN de l'objet sur lequel on veut pointer.

4. Installation d'OpenLDAP

Nous allons voir dans cette partie l'installation de OpenLDAP suivant différentes distributions. Si vous possédez une distribution telle que Debian ou Gentoo, vous pouvez directement vous rendre au dernier paragraphe de cette rubrique qui explique l'installation de OpenLDAP en utilisant les gestionnaires de paquets intégrés dans ces distributions.

4.1 Prérequis

OpenLDAP se base sur plusieurs autres programmes pour pouvoir fonctionner. Le nombre des programmes prérequis est variable suivant les fonctionnalités que vous souhaitez activer pour votre serveur LDAP. Les deux premiers sont usuellement présents par défaut sur les distributions standard.

4.1.1 TLS (Transport Layer Security)

Vous aurez besoin de ce paquet pour pouvoir utiliser les fonctionnalités SSL (Secure Socket Layer) d'OpenLDAP. Pour les systèmes GNU/Linux cette fonctionnalité est gérée avec la librairie OpenSSL.

La dernière version d'OpenSSL est disponible sur le site : http://www.openssl.org

De plus amples informations sur la mise en place d'OpenSSL sont disponibles dans l'essentiel consacré à OpenSSL.

4.1.2 Services d'authentification Kerberos

OpenLDAP supporte l'authentification Kerberos SASL/GSSAPI aussi bien avec l'implémentation Heimdal ou bien MIT Kerberos, les deux étant des implémentations de la version V de Kerberos. Si vous voulez utiliser cette méthode d'authentification forte, ce qui est fortement conseillé, vous pouvez installer l'un ou l'autre de ces paquets. Vous pourrez les retrouver : 1.Heimdal : http://www.pdc.kth.se/heimdal/ 2.MIT Kerberos : http://web.mit.edu/kerberos/www/

4.1.3 SASL (Simple Authentification and Security Layer)

OpenLDAP utilise cyrus SASL pour authentifier les clients et les serveurs. SASL est une couche qui va permettre l'utilisation d'OpenSSL ou bien de l'authentification Kerberos s'ils sont présents.

Vous pourrez télécharger Cyrus SASL sur : http://asg.web.cmu.edu/sasl/sasl-library.html

Comme pour la librairie OpenSSL, votre serveur ne sera pas entièrement compatible avec la norme OpenLDAPv3 si vous l'installez sans cette fonctionnalité.

4.1.4 L'interaction avec la base de données

Votre annuaire a besoin d'une base de données pour enregistrer ses informations. Le daemon slapd qui gère l'enregistrement des information dans une base nécessite Sleepycat Software Berkley DB que vous pouvez télécharger à l'adresse suivante : http://www.sleepycat.com/

4.2 Récupération des sources ou des binaires

Vous pouvez trouver une liste des différents miroirs qui proposent les sources d'OpenLDAP sur la page : http://www.openldap.org/software/download/Si vous préférez ne pas compiler les sources mais utiliser directement un paquet de type binaire au format RPM, vous pouvez aller sur : http://fr.rpmfind.net/linux/rpm2html/search.php?query=openldapVous trouverez sur cette page une liste de tous les paquets binaires disponibles pour OpenLDAP, aussi bien pour RedHat (au format RPM) que pour Mandrake (au format MDK) ainsi que pour diverses architectures.

4.3 Compilation et installation des sources

Si vous avez choisi le mode d'installation à partir des sources, il vous faut donc suivre ces étapes : Décompression de l'archive, en remplaçant xxx, yyyy et zzzz par les bonnes valeurs pour l'archive que vous avez téléchargée :

$ tar xvzf openldap-xxx-yyyy.tgz
$ cd openldap-zzzz

Configuration de l'installation :

$ ./configure

il ne reste plus qu'à compiler les sources : $ make depend $ make

lancer les tests pour vérifier la bonne compilation du programme :

$ make tests

ensuite il faut lancer l'installation en root :

$ su -c "make install"

4.4 Installation à partir des gestionnaires de paquets

Pour Gentoo il suffit de taper :

# emerge openldap

La liste des USE Flags disponibles pour cet ebuild sont :


USE Flags

sslSupport des Secure Sockets Layer et donc pouvoir accéder à votre annuaire de manière sécurisée
tcpdSupport des wrappers TCP
readlineSupport pour la GNU libreadline
ipv6Support pour l'adressage IPv6
berkdbSupport pour la base de données de Berkeley
gdbmSupport pour laGNU Database Management
kerberosSupport de kerberos (une méthode d'authentification sécurisée)
odbc Support odbc (Open DataBase Connectivity)

Pour Debian, il suffit de taper :

# apt-get install slapd

Note : La distribution Debian est fournie avec un assistant mode texte qui va vous aider à mettre en place votre annuaire.

Par civ Dernière modification 22/03/2007 15:53
Navigation
Actualités
03/12/2008 Songbird 1.0
20/10/2008 Société Générale se met au vert
15/09/2008 Sortie de la version VLC 0.9.2
23/06/2008 Opération du libre à Nantes !
23/06/2008 OpenSuse 11
Plus d'actualités...
Articles
22/05/2008 Première approche de Qmail
19/05/2008 Test de la distribution Elive 1.0 Gem
14/05/2008 GNUPG introduction à la cryptographie et utilisation de GnuPG
21/02/2008 GNU / Screen
03/09/2007 The Linux File System Encryption API
More articles
Tips
28/04/2008 Mozilla Firefox : Google Talk et Facebook Chat
22/04/2008 Sed : Rechercher du texte entre deux chaines de caractères
04/04/2008 Gérer son(ses) écran(s) avec xrandr
26/03/2008 Tips sur l'historique de vos commandes
13/02/2008 Linux-Unix Cheat Sheets
More tips
Codes
09/04/2008 Chapitre 13 - Administration DNS et DHCP
09/04/2008 Chapitre 06 - Service web avec Apache
04/04/2008 Chapitre 09 - PureFTPd
04/04/2008 Chapitre 06 - Scripting Bash
01/04/2008 Chapitre 20 - Haute Disponibilité
More codes
Courses
13/09/2006 Module 3
23/02/2006 Module 2
23/02/2006 Module 1
More courses
Formation Linux

Supinfo Training Center has the first Linux Certification. The training is 13 days and allow you to pass the LPI 101 and 102.

more info
 
 
Vous êtes ici :
Cours Module 3 Chapitre 03 - OpenLDAP