Retourner en haut de la page Aller au bas de la page
Logo de mon site
Logo de mon site

Yasser Arafat

Item 1 Description

Yasser Arafat

Hugo Chávez

Item 1 Description

Hugo Chávez

Mikhaïl Gorbatchev

Item 1 Description

Mikhail Sergueievitch Gorbatchev

L'Abbé Pierre

Item 1 Description

Abbe Pierre

Salvadore Allende

Item 1 Description

Salvadore Allende

Angela Yvonne Davis

Item 1 Description

Angela Yvonne Davis

Jean Moulin

Item 1 Description

Jean Moulin

Nelson Mandela

Item 1 Description

Nelson Mandela

Martin Luther King

Item 1 Description

Martin Luther King

Gamal Abdel Nasser

Item 1 Description

Gamal Abdel Nasser

Richard Stallman

Item 1 Description

Richard Stallman

Simone Veil

Item 1 Description

Simone Veil

Hand Shake

Item 1 Description

Hand Shake

Wangari Muta Maathai

Item 1 Description

Wangari Muta Maathai

Michel Colucci

Item 1 Description

Coluche

Mère Teresa

Item 1 Description

Mère Térésa

Charles de Gaulle

Item 1 Description

Charles de Gaulle

Che Guevara

Item 1 Description

Ernesto Rafael Guevara

Mohandas Gandhi

Item 1 Description

Mohandas Karamchand Gandhi

Lech Walesa

Item 1 Description

Lech Walesa

Linus Benedict Torvalds

Item 1 Description

Linus Benedict Torvalds

Sous-commandant Marcos

Item 1 Description

Sous commandant Insurge Marcos

Ahmed Shah Massoud

Item 1 Description

Ahmed Shah Massoud

Luxpopuli / Internet / Postfix + Cyrus IMAP + SSL + LDAP / Cyrus IMAP : authentification LDAP





Right menu

OBLIGATOIRE

Un professeur témoigne

La brigade canine dans un collège du Gers.
Réaction d'une internaute Québécoise:
«quand on est rendu à accepter que (...) les autorité mettent leurs sales pattes dans les culottes de vos enfants (...) il est temps (...) de vous réveiller.»
OBLIGATOIRE

Les mensonges de R. Dati

La note de recadrage statistique du sociologue L. Mucchielli recadre également les mensonges de la propagande sécuritaire dont on nous rabat les oreilles depuis déjà trop longtemps et dont les mineurs de France sont à présents la cible.
Le rapport de L. Mucchielli
OBLIGATOIRE

L'aveu de Jean-Marc Sylvestre

«Le système financier s'effondre aujourd'hui comme un jeu de carte... parce que... il a été géré d'une part.... par les États-Unis sans règle... et il a été d'autre part géré... par une bande de voyous... qui se sont gouinfrés... au détriment des autres.»
VOIR LES VIDÉOS

OBLIGATOIRE

prev prev prev prev


Cyrus IMAP : authentification LDAP

Date de publication: le mardi 15 mai 2007 Ă  23h13
Dernière modification: par Pascal BOYER le dimanche 15 juillet 2007 à 08h11
« Article précédent: Cyrus IMAP : Plus encore...
» Article suivant: Postfix : le fichier main.cf

Avertissement

A tous ceux qui suivent cette série d’articles afin de mettre en place un serveur de mails, je recommande vivement, et dès à présent, de se reporter aux articles Postfix : le fichier main.cf , Postfix : le fichier master.cf et Postfix : le fichier smtpd.conf avant d’envisager la configuration d’un annuaire LDAP.

En effet, il me semble prudent de commencer par un fonctionnement simple de Postfix avant d'envisagé d’ajouter un annuaire LDAP pour faire de l’authentification et/ou du contrôle d’adresses mail.

Authentification ldap

Après avoir vu comment le serveur imapd Cyrus IMAP authentifie les utilisateurs avec la base de données sasldb2 , nous allons voir qu’il est possible d’authentifier les utilisateurs grâce au protocole LDAP.

Comme d’habitude, si, au cours de votre lecture, vous rencontriez des inexactitudes surtout prenez le temps de m’en informer par mail .

J’insiste sur le fait de partager vos compétences et savoirs en terme d’administration d’annuaire LDAP car, comme je le rappelle en conclusion, peu de documentation - surtout en français - est disponible sur le net. Particulièrement, une documentation détaillée sur l’authentification des comptes UNIX serait la bienvenue.

Le contexte

Si vous avez suivi la procédure d’installation du serveur imapd Cyrus IMAP décrite dans les 4 premiers articles, vous savez que l’authentification des utilisateurs auprès du seveur imapd se fait grâce au protocole SASL ( sans utiliser le serveur d’authentification saslauthd ) qui utilise la base de données /etc/sasldb2 , laquelle contient les couples login/passwd de chaque utilisateur ayant une BàL.

L’accès à la base de données /etc/sasldb2 se fait par l’intermédiaire d’un mécanisme , appelé sasldb , et défini par:

MECHANISMS="sasldb"

dans le fichier /etc/default/ saslauthd , fichier de configuration du serveur d’authentification du même nom.

Et c’est bien sûr ce couple login/passwd (demandé chaque fois que vous lancez votre logiciel de gestion de mails) qui est vérifié par le serveur d’authentification saslauthd .

  • Si le login et le passwd que vous spĂ©cifiez sont exacts, alors vous ĂŞtes authentifiĂ©s et vous pouvez donc utiliser le serveur imapd pour consulter et gĂ©rer (et non pas envoyer !) les mails que vous avez reçus et qui se trouvent dans votre BĂ L.
  • Si le login et le passwd que vous spĂ©cifiez ne sont pas exacts alors l’authentification Ă©choue et vous ĂŞtes invitĂ©s Ă  les retaper.

Pourquoi ldap

L’utilisation de la base de données /etc/sasldb2 impose de créer un couple login/passwd pour chaque création de BàL. Or l’accès aux commandes permettant la création de ce couple login/passwd est réservé à root (par défaut). Il n’est donc pas possible, à moins de redéfinir les droits sur ces commandes, de déléguer cette tâche.

De plus, ces couples login/passwd ne peuvent servir qu’au serveur de mail. Il n’est pas possible de faire de cette base de données un système centralisé d’authentification.

Par contre, la mise en place d’un annuaire LDAP, en plus d’offrir bien d’autres services, répond à ces deux limites du mécanisme sasldb .

Pré-requis

Avant de vouloir taper une quelconque commande, il est nécessaire d’installer "Openldap".

Voici les packages que j’ai installés:

dpkg -l '*ldap*'

Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé
|/ Err?=(aucune)/H=à garder/besoin Réinstallation/X=les deux (État,Err: majuscule=mauvais)
||/ Nom                              Version              Description
+++-==-=========================================================
ii  ldap-utils                       2.3.27-1            OpenLDAP utilities
ii  libldap-2.3-0                    2.3.27-1            OpenLDAP libraries
ii  libldap2                         2.1.30-13+b1        OpenLDAP libraries
ii  libldap2-dev                     2.1.30-13+b1        OpenLDAP development libraries
ii  php4-ldap                        4.4.4-1             LDAP module for php4
ii  postfix-ldap                     2.3.3-1             LDAP map support for Postfix

ii  libapache2-mod-ldap-userdir      1.1.8-1             Apache2 module that provides UserDir lookups
ii  libnet-ldap-perl                 0.33-2              A Client interface to LDAP servers
ii  libnss-ldap                      251-4               NSS module for using LDAP as a naming servic

1°/ Le fichier /etc/saslauthd.conf

Ce fichier est le fichier de configuration par défaut sous Debian du serveur d’authentification saslauthd (voir ~# man saslauthd ).

cd /etc

Puis on crée le fichier:

touch saslauthd.conf

Voici un exemple commenté de contenu de ce fichier:

# On indique le nom du serveur (ou son @IP)
LDAP_SERVERS: ldap://<@IP>/

# Ici on définit le domaine du serveur:
LDAP_DEFAULT_DOMAIN: foo.net

# Ici on indique le temps maxi que devra durer la requète/recherche avant d'abandonner.
# Exprimé en secondes.
LDAP_TIMEOUT: 10

# Ici on indique le temps maxi que peut prendre une recherche.
LDAP_TIME_LIMIT: 10

# Option à utiliser avec prudence (expérimentale)
LDAP_CACHE_TTL: 30

# Ici on spécifie la taille du cache (en octet)
LDAP_CACHE_MEM: 32768

# Ici on indique la version du protocole LDAP Ă  utiliser pour interroger le serveur LDAP.
LDAP_VERSION: 3

# Ici on indique qu'il ne faut pas utiliser le protocole SASL pour la connexion au serveur LDAP
LDAP_USE_SASL: no

# Ici on va indiquer la méthode de vérification du mot de passe.
# ATTENTION: Si cette règle n'est pas initialisée alors le filtre de recherche
#                   recherchera la valeur de l'attribut "userPassword".
# IMPORTANT: "bind" est la valeur par défaut si et seulement si LDAP_USE_SASL: no
# Valeurs possibles: bind|custom|fastbind
# (custom semble ĂŞtre 2 Ă  3fois plus rapide que bind)
LDAP_AUTH_METHOD: bind

# Ici on indique le nom de l'utilisateur qui se connecte.
# Si on commente cette règle (ainsi que la suivante) alors la connexion au serveur LDAP
# se fera anonymement.
LDAP_BIND_DN: cn=admin,dc=linuxorable,dc=net
# Puis on indique le mot de passe de cet utilisateur.
# Attention: le mot de passe transite en clair !!!
LDAP_BIND_PW: xxxx

# Ici on indique Ă  partir d'oĂą on commence la recherche
LDAP_SEARCH_BASE: ou=mail,dc=foo,dc=net

# On indique la profondeur de la recherche (ici on recherche dans les sous-répertoires)
# Valeurs possibles: sub, one, base
LDAP_SCOPE: sub

# IL N'EST PAS OBLIGATOIRE DE DÉFINIR UN FILTRE !!!
# EN EFFET, ET PAR DÉFAUT, UN uid VALANT LE LOGIN DE L'UTILISATEUR AINSI
# QUE LA VALEUR DE L'ATTRIBUT userPassword SONT RECHERCHÉS.
# Le filtre par défaut est donc:
#LDAP_FILTER: uid=%u
# Ici on cherche donc une entrée dont le "cn" sera égale au login entré dans le
# client mail (IMP, Thunderbird etc...).
LDAP_FILTER: cn=%u
#
# et ici on définit le nom de l'attribut qui contient le password tapé par l'utilisateur dans son client mail:
LDAP_PASSWORD_ATTR: userPassword

2°/ Le fichier /etc/default/saslauthd

Ce fichier est important car:

  • il est lu au dĂ©marrage du serveur d’authentification saslauthd
  • c’est lui qui indique qu’il faut lire le fichier de configuration que l’on vient de crĂ©er ( /etc/ saslauthd.conf )

Les options que peut contenir ce fichier sont accessibles par la page de man (voir ~# man saslauthd )

Voici un exemple de ce fichier:

######################################################################
#
#          Configuration pour authentification IMAP via LDAP
#
#   http://www.story.cz/doc/cyrus21-doc/README.Debian.simpleinstall.gz
######################################################################
#
#   Ce fichier est lu par le serveur d'authentification "saslauthd"
#   chaque fois qu'il est démarré.
#
######################################################################

# Pour que le serveur d'authentification démarre automatiquement (script de démarrage /etc/init.d/saslauthd) il faut
# que la ligne ci-dessous soit décommentée.
START=yes

# Ici on indique le mécanisme d'authentification qui sera utilisé par le serveur d'authentification saslauthd
# Pour obtenir la liste des mécanismes d'authentification supportés par ce serveur, utiliser la commande: saslauthd -v
# Cette règle accepte une liste de mécanismes séparés par un espace.
# Ici on choisit bien sûr le mécanisme "ldap".
MECHANISMS="ldap"
# Pour une authentification auprès de la base /etc/sasldb2
#MECHANISMS="sasldb"

# Ici on indique les paramètres de démarrage.
# C'est ici qu'on indique au serveur d'authentification saslauthd quel est son fichier de configuration.
PARAMS="-O /etc/saslauthd.conf"

3°/ Configuration de Cyrus IMAP

sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb

De plus, il est indiqué que celle-ci doit être commentée:

#sasl_pwcheck_method : saslauthd

Ainsi, cette configuration permettant de ne pas recourir au serveur d’authentification saslauthd .

Et bien nous allons tout simplement inverser ces trois règles afin de dire au serveur imapd Cyrus IMAP qu’il faut qu’il utilise maintenant le serveur d’authentification saslauthd qui, par l’intermédiaire de son fichier de configuration /etc/ saslauthd.conf , ira interroger l'annuaire LDAP.

Le fichier /etc/ imapd.conf devient donc ceci:

#sasl_pwcheck_method: auxprop
sasl_pwcheck_method : saslauthd
#sasl_auxprop_plugin: sasldb

Pour que le serveur imapd puisse communiquer avec le serveur LDAP il est sûrement nécessaire de définir, dans le fichier /etc/ imapd.conf , la règle sasl_mech_list: ainsi:

sasl_mech_list: plain
START=yes

A partir de maintenant, si le serveur LDAP est en service, l’authentification au serveur imapd se fera auprès du serveur LDAP et non plus auprès de la base de données sasldb2 .

4°/ Au niveau du serveur LDAP

Le but de cet article n’est pas de présenter l’installation du serveur LDAP.

Néanmoins, puisque nous allons l’utiliser pour assurer l’authentification des utilisateurs auprès du serveur imapd Cyrus-IMAP, je vous présente ci-dessous les deux fichiers important.

4.1°/ Le fichier /etc/ldap/slapd.conf

Ce fichier est le fichier de configuration du serveur slapd LDAP.

####################################
#  Section "globale" du fichier       #
####################################
#
# Les références des pages renvoient au livre "LDAP de O'REILLY"
#

# PARAMÊTRES LIÉS À LA SÉCURITÉ:
# ------------------------------

# On autorise les connexions au serveur LDAP avec le protocole v2 car certains clients ne supportent pas encore la version 3
# (p49)
allow bind_v2

# Ici on indique quel algorithme de hachage ou de chiffrement sera employé pour stocker la valeur (c-à-d le mot de passe)
# de l'attribut "userPassword" qui figure dans la section "Base de données". (p50)
password-hash {SSHA}

# Ici on définit les shémas qui doivent être inclus.
# "core.schema" est le schéma de base OBLIGATOIRE !(p66)
# ATTENTION !!!!  L'ordre d'inclusion est IMPORTANT !!!!
# --------------  (nis.schema ne peut ĂŞtre inclus avant cosine.schema. Sinon message d'erreur:
#                         /etc/ldap/schema/nis.schema: line 181: AttributeType not found: "manager")
include         /etc/ldap/schema/core.schema
# Les deux schémas ci-dessous sont nécessaires pour supporter l'objet "inetOrgPerson":(p66)
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/inetorgperson.schema
# Le schéma ci-dessous est nécessaire pour la création de comptes utilisateurs.
# Je vais sur http://ldap.akbkhome.com/index.php et je clique sur le lien "LDAP Objectclass" puis je clique sur "shadowAccount"
# et là je vois que "ID: nisSchema.2.1" donc j'en déduis que je dois inclure le schéma "nis.schema".
include         /etc/ldap/schema/nis.schema

# Cette directive indique si le serveur slapd devra vérifier si les objets de l'annuaire respectent ou pas le schéma,
# lors d'une insertion ou d'une modification.
# Si la directive « schemacheck off » est placée içi, on peut,par exemple, mettre un attribut mail
# alors qu'il n'est pas défini dans la structure de l'objet "person".
schemacheck     on

# Emplacement du fichier contenant le PID du démon "slapd" maitre en cours d'exécution. (p42)
pidfile         /var/run/slapd/slapd.pid

# Emplacement du fichier contenant les paramètres de ligne de commande du démon slapd en cours d'exécution.
# Ce paramètre n'est pas pris en compte si slapd est démarré avec l'option -debug (p42)
argsfile        /var/run/slapd.args

# Niveau des informations loguées par le démon syslogd
# Ajouter ceci Ă  la fin de /etc/syslog.conf:
#   local4.debug    -/var/log/slapd.log (p42)
# 8 =>   log des connexions
# 32 =>  log du traitement des filtres. Ce loglevel permet aussi de déterminer les index à configurer (p54).
# 256 => log des statistiques sur les connexions, les opérations et les résultats
#loglevel        296
# Mode HYPER-SUPRA verbeux:
loglevel        -1

# Emplacement des modules chargés dynamiquement:
modulepath  /usr/lib/ldap
moduleload  back_bdb

# Chiffrement TLS/SSL: (p45) Méthode à suivre: http://research.imb.uq.edu.au/~l.rathbone/ldap/tls.shtml (comme la mienne !!!)
# --------------------
#
# Ici on indique l'emplacement du certificat de mon AC: (http://www.openldap.org/faq/data/cache/185.html)
# ATTENTION: cette directive INDUIT la présentation de ce certificat lors d'une connexion au serveur LDAP.
# ---------- cette directive IMPLIQUE cette ligne dans /etc/ldap/ldap.conf:
#                   TLS_CACERT /usr/lib/ssl/mon_AC/private/mon_AC.crt
TLSCACertificateFile /usr/lib/ssl/mon_AC/private/mon_AC.crt
#
# Ici on indique si l'on souhaite authentifier ou non les clients:
# Valeurs possibles: demand ou never
TLSVerifyClient never
#
# Ici on indique l'emplacement du certificat signé du serveur.
TLSCertificateFile /usr/lib/ssl/mon_AC/certs/server_signed.pem
#
# Ici on indique l'emplacement de la clef privée du serveur.
# OpenLDAP ne supporte pas les clefs privées cryptées.
TLSCertificateKeyFile /usr/lib/ssl/mon_AC/private/server_tls.pem
#
# Ici on indique le ou les algorithmes de chiffrement que l'on souhaite utiliser.
# Pour tous les visualiser on utilise cette commande: openssl ciphers -v ALL
TLSCipherSuite 3DES:DES:HIGH

#########################################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#
# Un backend EST un MOTEUR de base de données.
backend     bdb

#######################################
#  SECTION BASE DE DONNÉES        #
#######################################
#
#
# Ici débute la section liée à une base de données.
# Cette section prend fin avec un nouvel attribut "database".
# Ici on indique quel "type" de base de données on va utiliser. Ici ce sera un gestionnaire de base de données BERKELEY DB4.
database        bdb

# Ici on définit le contexte/l'espace de nommage de cette partition (cette base) de l'annuaire. (p52)
# Ce contexte est unique.
# En accord avec la RFC 2247, l'espace de nommage = le nom de domaine du serveur.
# ON NE PEUX PAS METTRE CE QUE L'ON VEUT
# "suffix" détermine la racine de la base.
suffix "dc=foo,dc=net"

# Ici on définit un utilisateur "administrateur" de cette base. C'est l'équivalent de l'utilisateur "root".
# Il a donc tous les droits.
rootdn "cn=xxxxx,dc=foo,dc=net"
#
# Puis on définit le mot de passe de cet administrateur.
# ATTENTION: ne JAMAIS inscrire içi le mot de passe en clair.
# Utiliser la commande "slappasswd -h '{SSHA}' -v" pour obtenir l'empreinte cryptée et salée du mot de passe.
rootpw  {SSHA}BlT5B59z7cE0I31q9bb3YaJcVskiFbzn

# Ici on indique, au serveur LDAP, l'emplacement des bases de données.
# Ce répertoire doit avoir les droits suivants: 0700 pour root (p66) (droits par défaut: 0766)
# Valeur par défaut:
directory       "/var/lib/ldap/"

# Ici on indique les droits qui doivent être appliqués à la base de données. (p53)
mode        0600

# Save the time that the entry gets modified, for database #1
# Garder cette valeur par defaut !!! (p52)
lastmod     on

# Ici on permute le serveur en mode "readonly" mĂŞme pour l'administrateur.
# Ce mode doit être activé lorsqu'on a plus de mise à jour à faire. (p53)
readonly    off

# Ici on définit quels index devront être pris en compte/gérés pour quels attributs.
# ATTENTION: les performances du serveur sont étroitement liées à la configuration des index !!! (p54)
# Les index SONT les critères de recherche auquels on aura accès par la suite !!!! (p66)
#
# Celui-ci est défini pour des raisons de performances:
index       objectClass             eq
# "sub" permet de chercher "tous les prénoms,noms et mail commençant par B".
index       cn,sn,mail,uid              pres,eq,sub
index       departmentNumber        eq

# Ici on indique le nombre d'entrées qui seront mises en mémoire (cachées)(p55)
# Ce paramètre est important pour les performances du serveur car il évite les accès disques pour chaque requête.
cachesize 1000

# Les ACL (Access Control List/Liste de Contrôle d'Accès) (p 55-59)
# Les ACL définissent les accès aux données du serveur LDAP en répondant à ces trois questions et dans cet ordre:
# 1°/ A quoi ?
# 2°/ Quel niveau d'accès: write, read, search, compare, auth, none ?
# 3°/ Qui: *, self, anonymous, users ?
# IMPORTANT: Les ACL sont appliquées selon la règle: la première correspondance l'emporte !
# ------------------
# Il résulte de ceci que les ACL les plus restrictives doivent être placées avant toutes les autres.
#
access to attribute=userPassword
        by self write
        by anonymous  auth
        by * none


# Ici, l'administrateur (by dn="cn=xxxx,dc=foo,dc=net")  aura accès à tout (access to *) en écriture (write)
# puis tous les autres (by *) accèderont à tout (access to *) en lecture (read)
# The admin dn has full write access, everyone else
# can read everything.
access to *
        by dn="cn=xxxxx,dc=foo,dc=net" write
        by * read
allow bind_v2

Si vous n’autorisez pas la version 2 du protocole LDAP, vous pourrez envoyer mais pas recevoir de mail car Postfix (jusque dans sa version 2.3.3-2 au moins) utilise cette version du protocole. D’ailleurs voici les logs obtenus si vous commentez la ligne allow bind_v2 :

postfix/smtpd[19689]: dict_ldap_lookup: In dict_ldap_lookup
postfix/smtpd[19689]: dict_ldap_lookup: No existing connection for LDAP source /etc/postfix/ldap_local_recipient.cf, reopening
postfix/smtpd[19689]: dict_ldap_connect: Connecting to server ldap://82.67.66.131:389
postfix/smtpd[19689]: dict_ldap_connect: Actual Protocol version used is 2.  <============================== ICI !!!!!
postfix/smtpd[19689]: dict_ldap_connect: Binding to server ldap://82.67.66.131:389 as dn
postfix/smtpd[19689]: warning: dict_ldap_connect: Unable to bind to server ldap://82.67.66.131:389 as : 2 (Protocol error) <== ICI !!!!!
postfix/smtpd[19689]: maps_find: local_recipient_maps: pascal@linuxorable.fr: search aborted  <================== ICI !!!!!
postfix/smtpd[19689]: mail_addr_find: pascal@linuxorable.fr -> (try again)

Par ailleurs, vous recevrez des mails vous avertissant d’un problème et dont le contenu ressemblera à ceci:

Transcript of session follows.

 Out: 220 euphorie.linuxorable.fr ESMTP Postfix (Debian/GNU)
 In:  EHLO ug-out-1314.google.com
 Out: 250-euphorie.linuxorable.net
 Out: 250-PIPELINING
 Out: 250-SIZE 20480000
 Out: 250-ETRN
 Out: 250-STARTTLS
 Out: 250-AUTH LOGIN PLAIN
 Out: 250-AUTH=LOGIN PLAIN
 Out: 250-ENHANCEDSTATUSCODES
 Out: 250-8BITMIME
 Out: 250 DSN
 In:  MAIL FROM:<paul@gmail.com>
 Out: 250 2.1.0 Ok
 In:  RCPT TO:<pascal@linuxorable.fr>
 Out: 451 4.3.0 <pascal@linuxorable.fr>: Temporary lookup failure <== ICI !!!!!
 In:  QUIT
 Out: 221 2.0.0 Bye

4.2°/ Le fichier /etc/ldap/ldap.conf

#############################################################
#
#  CE FICHIER EST LE FICHIER DE CONFIGURATION DU CLIENT LDAP !!!
#
#############################################################

HOST linuxorable.fr

PORT 389

# Le client "ldapsearch" doit pouvoir accéder aux certificats de l'AC pour être en mesure de valider
# le certificat du serveur.
#
# Ici on indique:
# 1°/   que la base (pas la base de données !!!) de recherche est dc=foo,dc=fr,
# 2°/   qu'il faut se connecter sur le serveur linuxorable.net par connexion cryptée,
# 3°/   que le certificat de l'AC est disponible dans /etc/ldap/mon_AC/private/mon_AC.crt,
# 4°/   et qu'il est obligé de s'en servir.

BASE dc=foo,dc=fr
URI  ldap://foo.net:389/
#URI  ldaps://foo.net:636/
#URI  ldap://ldap.example.com ldap://ldap-master.example.com:666/
TLS_CACERT /usr/lib/ssl/mon_AC/private/mon_AC.crt
TLS_REQCERT demand

# La règle ci-dessous indique le répertoire où sont stockés les différents certificats nécessaires
#  Ă  la validation du certificat du serveur LDAP.
TLS_CACERTDIR /usr/lib/ssl/mon_AC/certs

# Si on ajoute les deux règles ci-dessous, alors la passphrase du certificat client sera demandée
#TLS_CERT      /usr/local/ssl/certs/client.pem
#TLS_KEY       /usr/local/ssl/private/client.key

#SIZELIMIT  12
#TIMELIMIT  15
#DEREF      never

5°/ Les fichiers .ldif

5.1°/ Exemple de fichier .ldif

Voici donc, ci-dessous, le contenu d’un fichier .ldif relatif à une utilisatrice nommée "Valérie BOYER". Oui, oui, c’est ma soeur. Et dire qu’elle ignore faire partie de MON annuaire LDAP. Quelle misère...!

Vous prendrez soin, bien sûr, de modifier les valeurs de ce fichier pour qu’elles soient en concordance avec votre annuaire LDAP.

# AJOUT D'UN UTILISATEUR DANS l'ANNUAIRE LDAP
dn: cn=Valerie BOYER,ou=mail,dc=linuxorable,dc=fr
cn: Valerie BOYER
cn: valerie 
sn: BOYER
mail: valerie@linuxorable.fr
userPassword: xxxxxx
objectClass: inetOrgPerson

ldapmodify -D "cn=admin,dc=linuxorable,dc=fr" -w "xxxxx" -x -a -f addvalerie.ldif

où xxxxx doit être remplacé par le mot de passe de l’administrateur de votre annuaire LDAP.

5.2°/ Autre exemple de fichier .ldif

Si dans le fichier /etc/ saslauthd.conf le filtre était ainsi défini:

LDAP_FILTER: uid=%u

...ce qui correspond au filtre par défaut, alors un fichier .ldif ressemblerait à ceci:

# AJOUT D'UN UTILISATEUR DANS l'ANNUAIRE LDAP
dn: uid=patrick,ou=mail,dc=linuxorable,dc=fr
uid: patrick
cn: Patrick CONTARDO
sn: CONTARDO
mail: patrick@linuxorable.fr
userPassword: {SSHA}rL2aA/N7wM2lso0h0ZsH/iFcm0rkiwEr
objectClass: inetOrgPerson

où la valeur de "uid" (troisième ligne) est égale au nom de la BàL !!!

5.3°/ A retenir

  • 1°/ L’accès au serveur LDAP par imapd requiert des mots de passe en clair
  • 2°/ La recherche est faite sur le dn des entrĂ©es de l’annuaire LDAP.
  • 3°/ Le filtre dĂ©termine la valeur du dn dans le fichier .ldif .

Si le filtre indique une recherche de l’ uid alors le dn du fichier .ldif est:

dn: uid=patrick,ou=mail accounts,dc=linuxorable,dc=fr

Si le filtre indique une recherche sur le cn alors le dn du fichier .ldif est:

dn: cn=patrick,ou=mail,dc=linuxorable,dc=fr
  • 4°/

En effet, et vous pouvez le contrôler en éditant la base de données /etc/sasldb2 avec un éditeur hexadécimal (e.g: khexedit), chaque fois que vous créerez une nouvelle entrée dans votre annuaire LDAP puis que l’utilisateur se loguera pour la première fois, alors le couple login/passwd sera inscrit dans la base de données.

Il découle de cela qu’il est important que le serveur imapd Cyrus IMAP puisse avoir accès à cette base de données. Et cela est rendu possible grâce à cette ligne du fichier de configuration /etc/ cyrus.conf :

# ICI J'ACTIVE IMAP UNIQUEMENT EN LOCAL (SUR 127.0.0.1, port 143) POUR POUVOIR CONTINUER À ADMINISTRER
# MA BASE DE DONNÉES /etc/sasldb2.
# VOIR MES COMMENTAIRES DANS 2/ Cyrus-IMAP : "cyrus.conf"

imaplocal cmd="imapd -C /etc/imapd-local.conf" listen="127.0.0.1 :imap" prefork=0

Cependant, en regardant les logs de /var/log/slapd.log , vous pouvez très facilement constater que l’authentification auprès du serveur imapd Cyrus IMAP se fait bien en utilisant LDAP.

Voici un exemple des logs que pour devez obtenir chaque fois que vous vous loguer (ici avec le webmail IMP et avec loglevel -1 ):

tail -f -n 50 /var/log/slapd.conf

[...]
# Voici ce que l'on a au début des logs
euphorie slapd[20913]: SRCH "ou=mail accounts,dc=linuxorable,dc=fr" 2 0
euphorie slapd[20913]:     1 10 0
euphorie slapd[20913]: begin get_filter
euphorie slapd[20913]: EQUALITY
euphorie slapd[20913]: end get_filter 0
euphorie slapd[20913]:     filter: (uid=pascal)
euphorie slapd[20913]:     attrs:
euphorie slapd[20913]:  dn
euphorie slapd[20913]:
euphorie slapd[20913]: conn=402 op=206 SRCH base="ou=mail accounts,dc=linuxorable,dc=fr" scope=2 filter="(uid=pascal)"
euphorie slapd[20913]: conn=402 op=206 SRCH attr=dn
[...]
# Puis en fin de log lorsque l'authentification résussi:
euphorie slapd[20210]: => access_allowed: auth access granted by read(=rscx)
euphorie slapd[20210]: ====> bdb_cache_return_entry_r( 30 ): returned (0)
euphorie slapd[20210]: conn=403 op=207 BIND dn="uid=pascal,ou=mail accounts,dc=linuxorable,dc=net" mech=SIMPLE ssf=0
euphorie slapd[20210]: do_bind: v3 bind: "uid=pascal,ou=mail accounts,dc=linuxorable,dc=fr" to 

En revanche, les logs produits par /var/log/mail.log ne produisent aucun message succeptibles de vous informer de l’utilisationde LDAP.

6°/ Configuration de Thunderbird

Pour que l’authentification LDAP fonctionne avec le client mail Thunderbird il faut impérativement désactiver l’option d’ authentification sécurisée ( Use secure authentication ).

Donc, sélectionnez les options de votre compte ainsi:

Fig 1: Sélection des options des comptes avec Thunderbird

Puis cochez les options Server Settings comme indiqué par la figure 2:

Fig 2: Configuration de Thunderbird pour LDAP

7°/ Conclusion

Et bien que dire de plus que si vous êtes "tombés" sur cet article vous avez beaucoup plus de chance que moi ;-) Pour arriver à faire fonctionner l’authentification LDAP il m’a fallu beaucoup de patience, de recherche sur internet et un peu d’aide.

L’administration d’un annuaire LDAP me semble assez ardue. Peu de docs (surtout en français) claires sont disponibles sur le net et peu de réponses sont obtenues en postant sur ldap-fr@cru.fr et encore moins sur debian-user-french@lists.debian.org .

Lien vers l'article précédent
Cyrus IMAP : Plus encore...
Postfix : le fichier main.cf
Lien vers l'article suivant

Commentaires