original in en Atif Ghaffar
en to frGeorges Tarbouriech
Atif est un caméléon. Il change de rôle, passant d'Administrateur système, à
programmeur, instructeur, chef de projet, ou à quoi que ce soit d'autre
permettant l'aboutissement d'un travail.
A l'occasion, il aime programmer sur son portable en regardant un film.
Atif pense qu'il doit beaucoup à Linux et à ce que lui ont enseigné la
communauté opensource et ses projets.
Pour en savoir plus, visitez sa homepage
Il existe beaucoup de littérature disponible sur LDAP, par conséquent je ne la ressortirai pas ici, pas plus que je n'aborderai les termes avancés de LDAP, les schémas, les différences entre les versions 2 et 3, etc. En fait je ne connais pas grand chose les concernant. Je vais essayer au contraire, d'expliquer avec des mots simples ce qu'est LDAP, quels sont ses avantages et comment l'utiliser.
Je ne suis pas un expert en LDAP. En fait, je suis un débutant. En gros, je vais décrire ici ce que je fais avec LDAP et comment. Je vais essayer de ne pas vous embrouiller comme je l'ai été pendant très longtemps.
Question: si vous êtes un débutant, pourquoi écrire un article sur le sujet?
Récemment, j'ai eu besoin de l'aide d'un collègue sur un projet. Le projet était
basé sur LDAP. Il pouvait m'aider pour Perl, les serveurs de courrier, etc,
mais n'avait aucune connaissance de LDAP, et chaque fois qu'il se penchait sur
LDAP, ça devenait de plus en plus confus.
Puisque le minimum requis pour le projet concernait la compréhension de
LDAP, je lui ai donné un cours accéléré d'une demi-heure et tout est devenu
clair. Les concepts étaient si évidents, tout était devant nos yeux et
demandait simplement d'approfondir quelques exemples un peu particuliers.
Je vais essayer de faire de même dans cet article.
Vous trouverez de nombreux liens dans le chapitre référence pour en apprendre plus sur LDAP.
LDAP signifie Lightweight Directory Access Protocol et c'est un service de répertoires, très semblable à celui du système de fichiers ou à un annuaire téléphonique auxquels nous sommes habitués, ou aux services de répertoires réseau tels que NIS (Network Information Service) de SUN, DNS (Domain Name Service), ou encore à l'arbre que vous voyez dans le jardin de votre voisin.
LDAP est une base de données spécialisée. Il est important de noter que LDAP n'est pas qu'une base de données de plus. LDAP est optimisé pour la recherche (lecture des données). Dans LDAP la lecture est beaucoup plus fréquente que l'écriture.
Qu'ont en commun tous ces services?
Ils renvoient tous une information lors d'une recherche selon un critère.
Exemples.
Répertoire du système de fichiers
ls /etc
Ceci renverra la liste des fichiers et sous-répertoires du répertoire /etc.
ls /etc/p*
Ceci renverra la liste des fichiers et sous-répertoires commençant par p.
find /usr/local/apache -name index.html
Ceci recherche un fichier/répertoire nommé index.html dans le système de
fichiers, à partir de "/usr/local/apache"
Répertoire NIS
ypcat passwd
Ceci renvoie le nom d'utilisateur, le mot de passe, le numéro d'utilisateur
contenus dans la base de données NIS
ypmatch atif passwd
Ceci retourne les entrées du fichier passwd pour l'utilisateur atif
Répertoire DNS
nslookup www.linuxfocus.org
Ceci renvoie l'adresse IP de l'entrée www.linuxfocus.org depuis la base de
données DNS
nslookup -type MX linuxfocus.org
Ceci renvoie l'information MX de la base de données DNS dans laquelle le nom
d'hôte correspond à linuxfocus.org
Répertoire LDAP
(nous verrons cela plus en détail ci-dessous)
ldapsearch uid=aghaffar
Ceci renvoie toutes les informations publiques concernant l'utilisateur
aghaffar
Similaire à la commande unix find / -uid aghaffar
ldapsearch uid=aghaffar mail
Ceci ne retourne que l'identification de courrier de l'utilisateur aghaffar
Dans chaque service d'annuaire mentionné ci-dessus, il y a toujours un
point de départ à partir duquel vous pouvez démarrer la navigation ou la
recherche. Ce point de départ est souvent nommé "racine".
Il est similaire à la racine de l'arbre.
Chaque arbre a une racine, des branches, d'autres branches, des
feuilles, des fleurs, etc.
drwxr-xr-x 29 root root 749 Jun 17 23:45 /usr
Maintenant le diagramme d'un répertoire LDAP
Nous en reparlerons plus tard.
A la différence de l'arbre végétal, chaque branche d'un répertoire de système de fichiers/LDAP/Annuaire a au moins un attribut unique, ce qui nous permet de les différencier.
Dans les systèmes de fichiers, cet attribut unique n'est autre que le
nom du fichier et son chemin. Par exemple
/etc/passwd
Ici, le nom de fichier passwd doit être unique dans ce chemin. Bien sûr,
nous pouvons avoir /usr/passwd, /opt/passwd qui sont uniques en raison
de leur nom complet.
De manière équivalente, le système DNS possède son FQDN (Fully Qualified
Domain Name) qui est une entrée unique (bien sûr, vous pouvez attribuer
différentes adresses IP à ce FQDN!).
Dans LDAP le nom complet d'une entrée est appelé "dn" ou Distinguished
name (nom distinct). Ce nom est toujours unique dans un répertoire.
Par exemple mon dn est "uid=aghaffar, ou=People, o=developer.ch"
Il n'est pas possible d'avoir une autre entrée portant le même dn, mais
nous pouvons bien sûr avoir un dn tel que "uid=aghaffar, ou=Administrators, o=developer.ch"
Ceci est l'équivalent des entrées des systèmes de fichiers
/etc/passwd et /usr/passwd
Nous avons un attribut unique nommé uid dans l'arbre "ou=Administrators,
o=developer.ch" et un autre dans l'arbre "ou=People, o=developer.ch".
Ils ne sont donc pas en conflit.
De nombreux serveurs LDAP sont disponibles sur le marché aujourd'hui et
ils fonctionneront quasiment tous sous Linux.
Pour cet article nous utiliserons openLDAP.
Pourquoi j'ai choisi openLDAP? Pourquoi devriez-vous choisir openLDAP?
Dans ce chapitre nous allons installer un serveur LDAP pas à pas.
Etapes à suivre:
Comme mentionné précédemment, téléchargez le source depuis www.openldap.com et installez selon la documentation ou installez un paquet précompilé (l'installation de paquets ou un Howto sur la compilation d'applications n'entrent pas dans le cadre de cet article)
Pour cet exemple, je vais créer un répertoire LDAP pour linuxfocus.org.
Vous pouvez modifier les noms pour les faire correspondre à votre site.
Pour installer le serveur principal, vous devez éditer les fichiers
slapd.conf et ldap.conf avec votre éditeur favori.
Sur mes serveurs, ce fichier se trouve dans /etc/openldap. Le votre
pourrait se trouver dans /usr/local/etc/openldap ou ailleurs selon votre
distribution Linux ou les options de configuration données avant
compilation.
######### /etc/openldap/slapd.conf ################################### # ce qui suit est défini par défaut dans ma distribution suse 6.4 # Nous en reparlerons dans les parties II et III de cet article # A ce moment-là, je saurai peut-être ce que ça signifie:) include /etc/openldap/slapd.at.conf include /etc/openldap/slapd.oc.conf schemacheck off pidfile /var/run/slapd.pid argsfile /var/run/slapd.args ####################################################################### # ldbm database definitions ####################################################################### # ceci détermine le type de base de données à utiliser. Conserver ldbm database ldbm # suffixe ou répertoire racine. C'est le noeud supérieur de votre répertoire LDAP suffix "o=linuxfocus.org" # l'endroit où seront conservées les bases ldap directory /var/lib/ldap # le nom distinct du gestionnaire de répertoire rootdn "cn=Manager, o=linuxfocus.org" # c'est une mauvaise idée de conserver le mot de passe en texte clair mais # nous l'utiliserons ainsi au début pour nous familiariser à LDAP rootpw secret # C'est tout pour l'instant.Editer /etc/openldap/ldap.conf
##########/etc/openldap/ldap.conf######### # # LDAP Defaults # # Voir ldap.conf(5) pour plus de détails # Ce fichier doit être lisible par tout le monde. # ceci définit le serveur ldap; vous pouvez utiliser un nom d'hôte ou une adresse IP host 127.0.0.1 # ceci représente le répertoire racine à partir duquel nous voulons commencer la recherche. # nous utiliserons le noeud supérieur dans notre configuration # il n'est pas nécessaire d'utiliser le noeud supérieur du répertoire, par exemple # nous pouvons choisir comme base = ou=users, o=linuxfocus.ch # si nous faisons ce choix toutes nos recherches commenceront à partir de cette branche de l'arbre base o=linuxfocus.org # c'est toutDémarrons maintenant le serveur ldap.
Vous avez maintenant un serveur ldap en service prêt à recevoir des
informations.
La méthode standard pour fournir des informations au serveur ldap consiste à
créer un fichier LDIF (LDAP Directory Interchange Format)*.
Lisez la page de manuel ldif pour en savoir plus.
Pour simplifier, ldif est la représentation au format texte des entrées ldap.
Ces entrées sont directement lisibles et sont interchangeables entre des
serveurs LDAP de différents concepteurs, utilisant différents gestionnaires de base de
données ou fonctionnant sous des systèmes d'exploitation différents.
* Oui, encore un autre format. Je ne comprends pas pourquoi XML n'est pas
utilisé à la place de LDIF
Créons donc simplement ce fichier ldif.
Quelques points à noter.
dn: o=linuxfocus.org o: linuxfocus.org objectclass: top objectclass: organization dn: ou=editors, o=linuxfocus.org ou: editors objectclass: organizationalUnit dn: uid=aghaffar, ou=editors, o=linuxfocus.org uid: aghafar cn: Atif Ghaffar sn: Ghaffar givenname: Atif objectclass: person userpassword: {CRYPT}yIvSBWSuLs2N2 mailacceptinggeneralid: aghaffar@linuxfocus.org ou: editors dn: uid=mkempe, ou=editors, o=linuxfocus.org uid: mkempe cn: Magnus Kempe sn: Kempe givenname: Magnus objectclass: person userpassword: clearpass mailacceptinggeneralid: mkempe@linuxfocus.org maildrop: mkempe@developer.ch preferredlanguage: fr ou: editorsNous devons maintenant ajouter ces informations dans le répertoire ldap. Utilisez la commande nommée ldapadd
ldapadd -D "cn=Manager, o=linuxfocus.org" -w secret < linuxfocus.org.ldif
Cette commande utilise "cn=Manager, o=linuxfocus.org" en tant que gestionnaire
de dn (nom distinct) et secret en tant que mot de passe, lit les informations
du fichier linuxfocus.org.ldif et les intègre dans le répertoire ldap.
Si tout s'est bien passé, vous pouvez maintenant lancer des requêtes sur votre
répertoire ldap, dans le cas contraire, vous vous sentez l'envie de
"bomber" ma boîte aux lettres ;)
Pour la "santé" de mon serveur de
courrier, j'espère que tout a bien fonctionné.
Avant de continuer, examinons ce fichier ldif ligne par ligne.
Cherchons toutes les données concernant l'utilisateur mkempe
ldapsearch uid=mkempe
Cherchons le dn de tous les éditeurs
ldapsearch '(&(objectclass=person)(ou=editors))' dn
Pour d'autres exemples, consultez les pages de manuel de ldapsearch
LDAP est un standard ouvert. Presque toutes les nouvelles applications seront
capables de rechercher des informations dans la base LDAP.
Même Windows 2000 utilise LDAP pour ses services de répertoire.
Centraliser toutes les informations dans un endroit donné offre des avantages
considérables: un seul point d'administration, moins de risques d'erreurs, moins
de données redondantes dans tous les coins et le souci de les sauvegarder.
Je pourrais être un "neuneu" de chez Compaq et essayer de vous vendre LDAP en vous disant que vous pouvez l'utiliser comme "gestionnaire de contacts". Mais je ne travaille pas pour Compaq. Je vais donc essayer de vous proposer des applications plus intéressantes de LDAP.
SOURCE UNIQUE D'AUTHENTIFICATION
Comptes utilisateurs centralisés.
Vous pouvez choisir une arborescence ldap pour gérer vos utilisateurs, leur
mot de passe et bien plus d'informations que vous ne pourriez en mettre dans un
simple fichier /etc/passwd. Cette information peut s'appliquer à des
utilisateurs de Microsoft Windows / Unix /Mac.
Suggestion Vous pouvez éventuellement modifier /etc/pam.d/login de
manière à ce que l'authentification se fasse à partir des informations LDAP et
non d'un fichier shadow ou de nis.
Suggestion Vous pouvez créer une petite interface web pour permettre aux
utilisateurs de modifier leur mot de passe sans avoir à se loger puisque
l'information se trouve dans LDAP et non sur le système. Pour cela vous devrez
utiliser pam_ldap. Voir le chapitre ressources pour l'url de pam_ldap.
NOTE
Source unique d'authentification !=
Authentification unique.
De nombreux
concepteurs de LDAP essaient de le vendre en disant que si vous choisissez LDAP
vous pourrez bénéficier de l'authentification unique.
Ce n'est qu'à moitié vrai. L'authentification unique est un autre genre
d'animal et un mot très à la mode aujourd'hui chez les Responsables informatique.
Un exemple d'authentification unique:
Suggestion Vous voulez fournir des comptes courrier à vos utilisateurs sur vos serveurs mais vous ne voulez pas créer de comptes unix. Pas de problèmes. Je me sers d'une combinaison de LDAP+Postfix MailServer+ serveur Cyrus IMAP/POP pour gérer des milliers d'utilisateurs et aucun d'entre eux n'a un compte système.
Suggestion Vous voulez centraliser les préférences de différentes applications. Par exemple, les préférences de Netscape, les bookmarks peuvent être enregistrés dans LDAP, et l'utilisateur peut passer d'une machine à une autre, il reçoit toujours ses préférences du serveur LDAP. L'utilisateur peut passer de Netscape sous Windows NT à Netscape sous Linux/Solaris/Macintosh il bénéficie toujours de la même information. (Désolé Microsoft... Je sais que ce n'est pas une bonne chose pour vous)
Scénario
Je déteste remplir des formulaires encore et encore que ce soit sur le web ou
sur papier. Je ne comprends pas pourquoi les gens veulent toujours et encore
savoir mon âge, ma date de naissance, mon adresse dans les bureaux de
l'administration alors que je les leur ai déjà donnés une fois. Chez mon dernier
employeur nous avons du préparer des formulaires énormes qui étaient équivalents
à 75%. (Prénom, Nom, Titre, Boîte postale, Etage, Nom du responsable, Service).
Au lieu d'em...bêter vos utilisateurs et risquer d'être attaqué une nuit noire
par des étrangers qui vous paraissent familiers, contentez-vous de demander à
vos utilisateurs les informations strictement nécessaires. Par exemple, demandez
leur id d'utilisateur et récupérez le reste des informations par LDAP, ensuite,
ne leur réclamez que ce qui manque.
Suggestion
Si par exemple mon téléphone ne fonctionne pas, la seule nouvelle information
que je puisse vous donner, c'est "mon téléphone ne fonctionne pas".
Un utilisateur sera moins bien embêté par l'Intranet si:
J'espère qu'avec cet article j'ai pu vous aider d'une manière ou d'une autre, ou
que j'ai pu nourrir votre cerveau affamé de 10011001001001.
Vous voyez, il n'est pas nécessaire d'être un expert pour faire partager vos
connaissances à la communauté. Vous n'avez pas non plus besoin d'être professeur
pour écrire des tutoriels. Toute information, aussi minime soit-elle, peut aider
les utilisateurs.
Personnellement, je trouve facile d'apprendre lorsque j'essaie d'enseigner à
quelqu'un ce que je sais déjà. Vous pourriez essayer cette méthode.
Heureusement, aujourd'hui beaucoup de monde parle de Linux; je vois de
nombreuses personnes l'essayer, quelques uns laissent tomber très vite, d'autres
sont plus tenaces. Ces utilisateurs peuvent n'avoir aucune expérience de la
ligne de commande d'unix et de son concept, et quelques uns peuvent rester
coincés sur un problème pendant un bon moment.
Si vous avez rencontré ce type de problème récemment, alors vous pouvez devenir
le meilleur professeur qui soit.
Si vous pensez que vous n'avez pas de sujet sur lequel écrire et que vous
souhaitiez malgré tout aider la communauté Linux, vous pouvez vous proposer
pour traduire ces articles dans votre propre langue.