Gentoo Logo

Avertissement : Ce document n'est plus valide ou plus maintenu.


L'authentification avec OpenLDAP et Gentoo

Table des matières :

1.  Bien démarrer avec OpenLDAP

Qu'est-ce que LDAP ?

LDAP signifie Lightweight Directory Access Protocol (protocole léger pour l'accès à un annuaire). Il est basé sur X.500 et il offre la plupart de ses fonctions, mais il lui manque les fonctions plus exotiques de X.500. Qu'est-ce donc que X.500 et pourquoi y a-t-il un LDAP ?

X.500 est un modèle de service d'annuaire conforme au concept OSI. Il définit un espace de noms et contient des protocoles pour interroger l'annuaire et le mettre à jour. Cependant, X.500 s'est révélé trop lourd dans de nombreuses situations. Ainsi fut créé LDAP. Comme X.500, il fournit un modèle d'espace de noms et de données pour une gestion d'annuaire. Toutefois, LDAP a été conçu pour s'appuyer sur la couche TCP/IP. On peut considérer LDAP comme une version allégée de X.500.

Je ne comprends pas. Qu'est-ce qu'un annuaire ?

Un annuaire est une base de données spécialisée conçue pour des lectures fréquentes, mais avec peu de mises à jour. Contrairement aux bases de données classiques, elles ne connaissent pas les transactions. Les annuaires sont faciles à répliquer pour augmenter la disponibilité et la fiabilité. Quand des annuaires sont répliqués, les incohérences temporaires sont tolérées pour autant qu'elles soient finalement synchronisées.

Comment l'information est-elle structurée ?

Un annuaire est organisé de façon hiérarchique. Pour ajouter une information dans un annuaire, il doit savoir comment stocker cette information dans sa hiérarchie. Regardez cet exemple d'une société fictive :

Exemple de code 1.1 : Organigramme de GenFic, une société imaginaire

dc:         com
             |
dc:        genfic         (Organisation)
          /      \
ou:   people   servers    (Unités organisationelles)
      /    \     ..    
uid: ..   jhon            (Données)

Évidemment, vous ne devez pas entrer l'information avec du texte comme ci-dessus. Chaque nœud doit être défini. LDAP utilise des conventions de définition des noms. La plupart des systèmes LDAP (y compris OpenLDAP) contiennent un certain nombre de conventions, généralement approuvées, telles que la convention "inetorgperson", souvent utilisées pour définir des utilisateurs.

Les lecteurs intéressés sont invités à lire le Guide d'administration de OpenLDAP.

Bon alors, à quoi ça sert ?

LDAP peut être utilisé pour de nombreuses tâches. Ce document s'intéresse plus particulièrement à la gestion des utilisateurs, mais d'autres buts peuvent être atteints grâce à LDAP. À l'aide de LDAP, les comptes utilisateurs seront centralisés sur un unique serveur LDAP (ce qui ne signifie pas pour autant que l'hébergement se fait sur un serveur unique puisque LDAP supporte la haute disponibilité et la redondance). Parmi les applications courantes pour LDAP :

  • Infrastructure de gestion de clefs publiques ;
  • Calendrier distribué ;
  • Carnet d'adresse distribué ;
  • Stockage pour le DHCP, le DNS, etc.
  • Directives de configuration de systèmes (garder une trace des configurations sur plusieurs serveurs) ;
  • ...

2.  Configurer OpenLDAP

Configuration de départ

Note : Dans ce document, nous utilisons l'adresse genfic.com comme exemple. Vous devez bien sûr utiliser la vôtre. L'adresse que vous allez utiliser comme noeud racine doit être un nom de domaine officiel (net, com, cc, be, ...)

Commençons par installer les composants sur le serveur :

Exemple de code 2.1 : Installer OpenLDAP

# emerge openldap pam_ldap nss_ldap migrationtools
# chown ldap:ldap /var/lib/openldap-ldbm /var/lib/openldap-data /var/lib/openldap-slurp

Ensuite, modifiez /etc/openldap/slapd.conf et ajoutez les lignes suivantes juste après core.schema :

Exemple de code 2.2 : /etc/openldap/slapd.conf

# Include the needed data schemes
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema

# Use md5 to hash the passwords
password-hash {md5}

# Define SSL and TLS properties (optional)
TLSCertificateFile /etc/ssl/ldap.pem
TLSCertificateKeyFile /etc/openldap/ssl/ldap.pem
TLSCACertificateFile /etc/ssl/ldap.pem

Et plus bas...

database        ldbm
suffix          "dc=genfic,dc=com"
rootdn          "cn=Manager,dc=genfic,dc=com"
rootpw          {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
directory       /var/lib/openldap-ldbm
index           objectClass     eq

Le mot de passe ci-dessus est obtenu en faisant slappasswd -h {Md5}

Ensuite, modifions le fichier de configuration de LDAP :

Exemple de code 2.3 : /etc/openldap/ldap.conf

# nano -w /etc/openldap/ldap.conf
Ajoutez ceci :

BASE         dc=genfic, dc=com
URI          ldaps://auth.genfic.com:636/
TLS_REQCERT  allow

Maintenant, générez le certificat SSL qui protègera votre annuaire. Répondez aux questions posées du mieux possible. Quand le système vous demande un Common Name, indiquez le nom que les clients utiliseront pour contacter le serveur. Généralement, c'est le nom complet de la machine, par exemple auth.genfic.com.

Exemple de code 2.4 : Générer le certificat SSL

# cd /etc/ssl
# openssl req -config /etc/ssl/openssl.cnf -new -x509 -nodes -out \
ldap.pem -keyout /etc/openldap/ssl/ldap.pem -days 999999
# chown ldap:ldap /etc/openldap/ssl/ldap.pem

Ensuite, ajoutez la ligne qui suit dans le fichier /etc/conf.d/slapd et mettez la ligne existante en commentaire.

Exemple de code 2.5 : /etc/conf.d/slapd

OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

Démarrez SLAPd :

Exemple de code 2.6 : Démarrer SLAPd

# /etc/init.d/slapd start

Faites le test suivant :

Exemple de code 2.7 : Tester le démon SLAPd

# ldapsearch -D "cn=Manager,dc=genfic,dc=com" -W

Si une erreur survient, essayez d'ajouter -d 255 pour faire afficher plus de messages d'information et essayer de comprendre le problème.

3.  Migrer les données existantes

Migrer les comptes des utilisateurs

Ensuite, nous migrons les comptes des utilisateurs. Ouvrez le fichier /usr/share/migrationtools/migrate_common.ph et modifiez-le comme suit :

Exemple de code 3.1 : /usr/share/migrationtools/migrate_common.ph

$DEFAULT_BASE = "dc=genfic,dc=com";
$EXTENDED_SCHEMA = 1;
# Commentez ces lignes, sauf si avez un schéma de courrier actif
#$DEFAULT_MAIL_DOMAIN = "genfic.com";
#$DEFAULT_MAIL_HOST = "mail.genfic.com";

Maintenant, exécutez les scripts de migration :

Exemple de code 3.2 : Exécuter les scripts de migration

# export ETC_SHADOW=/etc/shadow
# cd /usr/share/migrationtools
# ./migrate_base.pl > /tmp/base.ldif
# ./migrate_group.pl /etc/group /tmp/group.ldif
# ./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
# ./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif

Cette étape a copié les fichiers ci-dessus en fichiers ldif utilisés par LDAP. Ajoutons-les à notre annuaire :

Exemple de code 3.3 : Importer les données dans notre annuaire

# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/base.ldif
# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/group.ldif
# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/passwd.ldif
# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/hosts.ldif

Si vous rencontrez une erreur dans vos fichiers ldif, vous pouvez reprendre là où vous en étiez en utilisant ldapadd -c.

4.  Configuration du client

Configurer PAM

Nous allons tout d'abord configurer PAM pour permettre une authentification LDAP. Installez sys-auth/pam_ldap afin que PAM dispose du support LDAP et sys-auth/nss_ldap pour que le système puisse utiliser des serveurs LDAP pour obtenir des informations supplémentaires (utilisé par le fichier nsswitch.conf).

Exemple de code 4.1 : Installation de pam_ldap et nss_ldap

# emerge pam_ldap nss_ldap

Maintenant, éditez le fichier /etc/pam.d/system-auth pour qu'il ressemble à ceci :

Exemple de code 4.2 : /etc/pam.d/system-auth

auth    required    pam_env.so
auth    sufficient  pam_unix.so likeauth nullok shadow
auth    sufficient  pam_ldap.so use_first_pass
auth    required    pam_deny.so

account requisite  pam_unix.so
account sufficient pam_localuser.so
account required   pam_ldap.so

password    required pam_cracklib.so retry=3
password    sufficient pam_unix.so nullok use_authtok shadow md5
password    sufficient pam_ldap.so use_authtok use_first_pass
password    required pam_deny.so

session required    pam_limits.so
session required    pam_unix.so
session required    pam_mkhomedir.so skel=/etc/skel/ umask=0066
session optional    pam_ldap.so

Puis, modifiez /etc/ldap.conf comme ceci :

Exemple de code 4.3 : /etc/ldap.conf

#host 127.0.0.1
#base dc=padl,dc=com

ssl start_tls
ssl on
suffix          "dc=genfic,dc=com"
#rootbinddn uid=root,ou=People,dc=genfic,dc=com

uri ldaps://auth.genfic.com/
pam_password exop

ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
nss_base_passwd ou=People,dc=genfic,dc=com
nss_base_shadow ou=People,dc=genfic,dc=com
nss_base_group  ou=Group,dc=genfic,dc=com
nss_base_hosts  ou=Hosts,dc=genfic,dc=com

scope one

Ensuite, copiez le fichier ldap.conf du server vers les clients pour que ces derniers puissent utiliser LDAP.

Exemple de code 4.4 : Copier le fichier ldap.conf

(Remplacez serveur-ldap par le nom de votre serveur LDAP.)
# scp serveur-ldap:/etc/openldap/ldap.conf /etc/openldap

Enfin, configurez vos clients pour qu'ils valident les comptes des utilisateurs via le système LDAP :

Exemple de code 4.5 : /etc/nsswitch.conf

passwd:         files ldap
group:          files ldap
shadow:         files ldap

Faites le test suivant :

Exemple de code 4.6 : Tester l'authentification LDAP

# getent passwd|grep 0:0

(Vous devriez voir ces deux lignes :)
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash

Vous avez peut-être remarqué qu'une des lignes que vous avez recopiées dans le fichier /etc/ldap.conf était en commentaire (la ligne avec rootbinddn). Vous n'en avez besoin que si vous voulez changer le mot de passe d'un utilisateur en tant que superutilisateur. Dans ce cas, vous devriez copier le mot de passe de root en clair dans /etc/ldap.secret. Ceci est DANGEREUX et le fichier doit absolument avoir les permissions 600 (cf. chmod). Dans la pratique, ce fichier est laissé vide et, quand le mot de passe d'un utilisateur doit être modifié dans LDAP et dans /etc/passwd, on y copie le mot de passe root juste le temps d'effectuer l'opération. Il ne faut évidemment pas oublier de l'enlever sitôt l'opération terminée.

5.  Configuration de la sécurité du serveur LDAP

Permissions OpenLDAP

Si vous lisez le fichier /etc/openldap/slapd.conf, vous constaterez que vous pouvez placer des permissions de type ACL (Access Control List) sur les fichiers :

Exemple de code 5.1 : /etc/openldap/slapd.conf

access to *
  by dn="uid=root,ou=people,dc=genfic,dc=com" write
  by users read
  by anonymous auth
  access to attrs=userPassword,gecos,description,loginShell
   by self write

Cela attribue les accès appropriés pour un utilisateur normal. De plus, les utilisateurs ont accès en écriture sur leurs données et en lecture sur celles des autres. Les utilisateurs anonymes peuvent envoyer un nom d'utilisateur et un mot de passe pour s'identifier. Les quatre niveaux possibles sont (du plus bas au plus haut) : auth search read write.

L'exemple suivant est un peu plus sécurisé puis qu'il empêche les utilisateurs normaux de lire les mots de passe cryptés des autres.

Exemple de code 5.2 : /etc/openldap/slapd.conf

access to attrs="userPassword"
  by dn="uid=root,ou=people,dc=genfic,dc=com" write
  by dn="uid=John,ou=People,dc=genfic,dc=com" write
  by anonymous auth
  by self write
  by * none
 
access to *
  by dn="uid=root,ou=People,dc=genfic,dc=com" write
  by * search

Dans cet exemple, on a donné accès en lecture/écriture/recherche à root et à John dans l'arbre sous dc=genfic,dc=com. On a aussi autorisé les utilisateurs à modifier leur propre mot de passe (userPassword). La dernière instruction permet à chacun de lancer une recherche, c'est-à-dire qu'un utilisateur peut définir un filtre de recherche, mais qu'il ne peut pas lire les résultats. Vous pouvez avoir plusieurs ACL successifs et la règle de base est de procéder de bas en haut en plaçant le plus restrictif en premier.

6.  Utiliser OpenLDAP

Gérer l'annuaire

Vous pouvez utiliser votre annuaire pour authentifier des utilisateurs dans apache/proftpd/qmail/samba. Vous pouvez le gérer via Webmin qui dispose d'une interface très facile à utiliser. Vous pouvez aussi utiliser gq ou le directory_administrator.

7.  Remerciements

Nous voudrions remercier Matt Heler qui nous a prêté sa machine pour nos tests lors de la rédaction de ce guide. Merci aussi à tous ceux qui nous ont aidé sur #ldap @ irc.freenode.net.



Imprimer

Dernière mise à jour le 21 octobre 2005

Une version originale plus récente datée du 12 septembre 2008 existe.

Résumé : Ce guide vous présente les bases de LDAP et vous montre comment installer OpenLDAP pour authentifier des utilisateurs d'un groupe de machines sous Gentoo.

Benjamin Coles
Auteur

Sven Vermeulen
Correcteur

Brandon Hale
Correcteur

Benny Chuang
Correcteur

Xavier Neys
Traducteur

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.