Current oav website
This commit is contained in:
970
mirrors/comment_installer_un_serveur_multidomaine_avec_ldap.html
Normal file
970
mirrors/comment_installer_un_serveur_multidomaine_avec_ldap.html
Normal file
@ -0,0 +1,970 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Howto pour installer un serveur de mail multidomaine utilisant un annuaire LDAP.</title>
|
||||
</head>
|
||||
<body bgcolor="#ffffff">
|
||||
<center><h1><strong>Guide pour installer un serveur de mails multidomaine utilisant un annuaire LDAP.</strong></h1></center>
|
||||
<br>
|
||||
<center><h3>Auteur: Luc Saillard <luc.saillard at free.fr></h3></center>
|
||||
<center><h4>Date: 16 mai 2001, Version: 0.1.2</h4></center>
|
||||
<center><h4>Licence: <a href="http://www.gnu.org/copyleft/fdl.html">GNU Free Documentation License</a></h4></center>
|
||||
<h4>
|
||||
Copyright (c) 2000-2001 Luc Saillard<br>
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.1 or any later
|
||||
version published by the Free Software Foundation; with no Invariant Sections,
|
||||
with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license
|
||||
is included in the section entitled "GNU Free Documentation License".
|
||||
</h4>
|
||||
<br>
|
||||
|
||||
<h1>Introduction</h1>
|
||||
|
||||
Ce mini guide d<>crit l'installation d'un serveur de mails pour un grand nombre
|
||||
d'utilisateurs et ne voulant pas utiliser de comptes Unix pour g<>rer les bo<62>tes
|
||||
aux lettres. Cette solution permet aussi de rendre le syst<73>me scalable, et
|
||||
facilement redondant.<br>
|
||||
L'utilisation d'un annuaire LDAP n'est pas obligatoire, puisque l'on peut
|
||||
faire la m<>me chose avec des bases de donn<6E>es. LDAP <20>tant plus ouvert que le
|
||||
support des bases de donn<6E>es avec le monde Windows. LDAP servira pour
|
||||
l'authentification des utilisateurs et la conservation des profils de chaque
|
||||
utilisateur. L'utilisation d'un annuaire est tout indiqu<71> puisqu'il permet une
|
||||
plus grande souplesse d'administration tout en conservant une vitesse de
|
||||
recherche plus importante qu'une base de donn<6E>es.<br>
|
||||
L'avantage d'utiliser LDAP permet de d<>centraliser les services plus
|
||||
facilement, si on d<>sire faire fonctionner le syst<73>me sur plusieurs machines. Plusieurs machines
|
||||
pour les serveurs de mails et Imap, un serveur faisant fonctionner LDAP, et un
|
||||
autre pour partager les fichiers.<br>
|
||||
Un annuaire peut <20>tre administr<74> depuis une autre machine. Il existe de
|
||||
nombreux outils pour administrer une base, la plupart des langages (C, Perl,
|
||||
Php, Python) poss<73>de une API pour dialoguer avec un serveur LDAP donc rien
|
||||
n'emp<6D>che d'<27>crire son propre outil adapt<70> <20> la situation.
|
||||
La base des utilisateurs pourra servir comme carnet d'adresses pour les
|
||||
clients mails. Le protocole permet de g<>rer la r<>plication des donn<6E>es de fa<66>on
|
||||
efficace, ce qui permet de faire simplement de la haute disponibilit<69>.
|
||||
|
||||
<h1>Logiciels n<>cessaires</h1>
|
||||
|
||||
<ul>
|
||||
<li><b>un serveur LDAP</b>. Il y a plusieurs serveurs LDAP sur le march<63>. Dans le libre,
|
||||
il y a <a href="http://www.openldap.org/">Openldap</a>, et une version plus ancienne qui est
|
||||
<a href="">UmichLdap</a>. Dans les solutions propri<72>taires, nous retrouvons <a
|
||||
href="http://www.iplanet.com/products/infrastructure/dir_security/dir_srvr/">iPlanet
|
||||
Directory Server</a> anciennement Netscape LDAP, Microsoft poss<73>de aussi une
|
||||
version avec son <a href="http://www.microsoft.com/windows2000/guide/server/features/dirlist.asp">Active Directory</a>,
|
||||
Novell avec Novel Directory Service.</li>
|
||||
<li><b>un serveur de courrier sortant</b>. Il existe de nombreux serveur POP ou Imap dans le monde des
|
||||
logiciels libres. Cependant, il faut choisir celui qui est le plus adapt<70> en fonction des besoins.
|
||||
Dans ce guide nous allons utiliser la suite <a
|
||||
href="http://www.courier-mta.org/">courier-imap</a> et <a
|
||||
href="http://www.courier-mta.org/">courier-pop</a>.</li>
|
||||
<li><b>un serveur de courrier entrant</b>. Les principaux MTA sont Sendmail, Qmail, Exim, Postfix.
|
||||
Ils ont tous un support LDAP, sauf pour Qmail qui a ce support sous forme de patch.</li>
|
||||
</ul>
|
||||
Optionnels:<br>
|
||||
<ul>
|
||||
<li><b>un serveur Webmail</b>. Le serveur Webmail comprend, un serveur web et
|
||||
une application permettant d'afficher le courrier. Ils sont nombreux dans les logiciels
|
||||
libres. On peut citer notamment: <a href="http://www.horde.org/imp/">Imp</a> et
|
||||
<a href="http://www.inter7.com/sqwebmail/">SqWebmail</a>.
|
||||
<li><b>une couche SSL</b>. On peut rajouter une couche s<>curis<69> au syst<73>me pour transmettre
|
||||
le courrier en crypt<70> en utilisant le m<>me protocole que le http. La s<>curit<69> s'applique <20> tous
|
||||
les services (Pop, Imap, Web). Pour le smtp, il faut utiliser SMTP Auth.
|
||||
</ul>
|
||||
|
||||
<h1>Pr<EFBFBD>-requis</h1>
|
||||
|
||||
<h2>LDAP</h2>
|
||||
LDAP va servir d'annuaire pour sauvegarder les profils des utilisateurs. Ce guide n'expliquera pas
|
||||
le fonctionnement d'un annuaire, ou de la norme pour importer des donn<6E>es. Les outils tels que
|
||||
ldapsearch, ldapdelete, ... sont ceux de la version Openldap. Les utilisateurs de Netscape Ldap
|
||||
auront une syntaxe presque identique.
|
||||
|
||||
<h2>Le serveur de mail</h2>
|
||||
Je considererai par la suite que le serveur de mails est d<>j<EFBFBD> fonctionnel (il peut envoyer et recevoir des emails).
|
||||
Seuls Exim et Postfix seront d<>taill<6C>s. Sendmail et Qmail ne le sont pas car
|
||||
je ne connais pas la syntaxe a employer. Pour les autres serveurs de mails, je
|
||||
vous renvoie <20> la documentation du programme.
|
||||
|
||||
<h2>Le serveur Pop, Imap</h2>
|
||||
La solution pr<70>sent<6E>e dans ce document se base sur Courier-Imap et Courier-Pop.
|
||||
Bien s<>r, on pourra utiliser d'autres serveurs Pop ou Imap qui supportent le
|
||||
protocole LDAP, ou <20> travers PAM-Ldap. Je d<>conseille la 2<>me m<>thode
|
||||
ralentissant le serveur.<br>
|
||||
On trouvera <20> cette adresse <a href="http://luc.saillard.free.fr/patches/qpopper/">
|
||||
http://luc.saillard.free.fr/patches/qpopper/</a>,
|
||||
un patch pour <a href="http://www.eudora.com/qpopper/">Qpopper</a> version
|
||||
3.0.x supportant en mode natif le protocole LDAP. Malheureusement, il n'y a pas
|
||||
de documentation pour l'utiliser.<br>
|
||||
Le principal avantage de la suite <a
|
||||
href="http://www.courier-mta.org/">Courier</a>, est le support des modules
|
||||
d'authentification en mode daemon et sous forme de plugins. Son interface
|
||||
permet de d<>velopper rapidement de nouveaux drivers pour g<>rer de nouveaux
|
||||
modules d'authentification.<br>
|
||||
Courier-Imap peut-<2D>tre t<>l<EFBFBD>charg<72> <20> cette adresse:
|
||||
<a href="http://www.inter7.com/courier-imap/">http://www.inter7.com/courier-imap/</a>.<br>
|
||||
Il existe un patch pour le support Ldap pour le v<>n<EFBFBD>rable serveur Pop, Imap de l'
|
||||
Universit<EFBFBD> de Washington (les auteurs de <a
|
||||
href="http://www.washington.edu/pine/">Pine</a>), mais je n'arrive plus <20>
|
||||
remettre la main dessus. Le plus gros d<>faut d'<a
|
||||
href="http://www.washington.edu/imap/">UW-Imap</a>, est la m<>moire utilis<69>e pour
|
||||
chaque connection. Il est oblig<69> de fonctionner avec inetd, le rendant
|
||||
inad<EFBFBD>quate pour les gros serveurs de mails. De plus, il est tr<74>s difficile
|
||||
d'inclure de nouveaux drivers, la licence et le design du programme rendent
|
||||
l'ajout tr<74>s difficile.<br>
|
||||
|
||||
<h1>Installation et configuration des logiciels</h1>
|
||||
<h2>Openldap</h2>
|
||||
Pour les utilisateurs de Netscape LDAP, je vous renvoie <20> la documentation
|
||||
fournie avec le logiciel, de toute fa<66>on, on ne peut pas compiler Netscape
|
||||
LDAP.
|
||||
<h3>Compilation</h3>
|
||||
Apr<70>s quelques tests effectu<74>s avec Openldap v2.0, il semblerait que la
|
||||
librairie dbm a utilis<69> soit la berkeley 2.x, d<>velopp<70>e par la soci<63>t<EFBFBD>
|
||||
SleepyCat (<a href="http://www.sleepycat.com/">http://www.sleepycat.com</a>). La
|
||||
version 3.x apporte une meilleure gestion mais semblerait plus lente en
|
||||
d<EFBFBD>finitive pour des tailles d'annuaires inf<6E>rieures <20> 100.000 entr<74>es. La version
|
||||
GNU libgdbm est plus lente que la version 2.x. J'ai fait les tests de
|
||||
compilation de la librairie <20> partir d'un ordinateur Pentium II Intel sous
|
||||
Linux. Pour ceux que <20>a int<6E>resse, j'ai mis en annexe les temps et les
|
||||
proc<EFBFBD>dures de tests. <br>
|
||||
Voici les directives que j'utilise pour compiler Openldap sur une machine
|
||||
Linux Intel. Note je n'utilise pas slurpd.
|
||||
<ul>
|
||||
<li>Pour Openldap 1.2.x:<br>
|
||||
<ul>
|
||||
<li>Compilation de la librairie Berkeley 2.x:
|
||||
<pre>
|
||||
CFLAGS="-O2 -pipe -mpentiumpro \
|
||||
-fexpensive-optimizations \
|
||||
-fomit-frame-pointer" \
|
||||
../dist/configure \
|
||||
--disable-shared \
|
||||
--prefix=/home/luc/srcs/openldap/build/db2
|
||||
make
|
||||
make install
|
||||
</pre></li>
|
||||
<li>Compilation d'Openldap 1.2.x:
|
||||
<pre>
|
||||
CPPFLAGS="-I/home/luc/srcs/openldap/build/db2/BerkeleyDB/include/" \
|
||||
LDFLAGS="-L/home/luc/srcs/openldap/build/db2/BerkeleyDB/lib" \
|
||||
CFLAGS="-O2 -pipe -mpentiumpro -fexpensive-optimizations -fomit-frame-pointer" \
|
||||
./configure \
|
||||
--with-threads \
|
||||
--disable-debug \
|
||||
--enable-aclgroups \
|
||||
--disable-wrappers \
|
||||
--disable-rlookups \
|
||||
--enable-ldbm \
|
||||
--enable-ldbm-api=db2 \
|
||||
--disable-slurpd \
|
||||
--prefix=/home/luc/srcs/openldap/build/openldap1 \
|
||||
--libexecdir=/home/luc/srcs/openldap/build/openldap1/sbin
|
||||
make depend
|
||||
make
|
||||
make install sysconfdir=/home/luc/srcs/openldap/build/openldap1/etc
|
||||
</pre>
|
||||
Voici ce que j'ai utilis<69> pour Solaris8
|
||||
<pre>
|
||||
% LIBS="-lresolv -lgen -lnsl -lsocket -lrt" \
|
||||
LDFLAGS="-L/usr/local/BerkeleyDB/lib" \
|
||||
CFLAGS="-O2 -pipe -I/usr/local/BerkeleyDB/include" \
|
||||
./configure \
|
||||
--prefix=/usr/local/openldap --enable-shared \
|
||||
--with-threads=lwp --with-ldbm-api=db2 \
|
||||
--sysconfdir=/usr/local/openldap/etc
|
||||
% make
|
||||
% make install sysconfdir=/usr/local/openldap/etc
|
||||
</pre>
|
||||
</li>
|
||||
</ul>
|
||||
<li>Pour Openldap 2.0.x<br>
|
||||
<ul>
|
||||
<li>Compilation de la librairie Berkeley 2.x:<br>
|
||||
<pre>
|
||||
CFLAGS="-O2 -pipe -mpentiumpro \
|
||||
-fexpensive-optimizations \
|
||||
-fomit-frame-pointer" \
|
||||
../dist/configure \
|
||||
--disable-shared \
|
||||
--prefix=/home/luc/srcs/openldap/build/db2
|
||||
make
|
||||
make install
|
||||
</pre></li>
|
||||
<li>Compilation d'Openldap 2.0.7:<br>
|
||||
<pre>
|
||||
CPPFLAGS="-I/home/luc/srcs/openldap/build/db2/BerkeleyDB/include/" \
|
||||
LDFLAGS="-L/home/luc/srcs/openldap/build/db2/BerkeleyDB/lib" \
|
||||
CFLAGS="-O2 -pipe -mpentiumpro -fexpensive-optimizations -fomit-frame-pointer" \
|
||||
./configure \
|
||||
--with-threads \
|
||||
--with-readline \
|
||||
--enable-syslog \
|
||||
--enable-aci \
|
||||
--with-ldbm-api=berkeley \
|
||||
--disable-slurpd \
|
||||
--prefix=/home/luc/srcs/openldap/build/openldap2 \
|
||||
--libexecdir=/home/luc/srcs/openldap/build/openldap2/sbin
|
||||
make depend
|
||||
make
|
||||
make install sysconfdir=/home/luc/srcs/openldap/build/openldap2/etc
|
||||
</pre></li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3>Cr<EFBFBD>ation des fichiers Ldif</h3>
|
||||
Plusieurs fichiers LDIF devront <20>tre cr<63><72>s pour permettre plus tard, une plus
|
||||
grande souplesse en cas d'upgrade ou de migration vers d'autres serveurs.
|
||||
Il y aura un fichier pour cr<63>er l'arborescence de l'annuaire, et un fichier
|
||||
pour quelques utilisateurs de test, ainsi que l'administrateur.
|
||||
<h4>D<EFBFBD>finition du profil des utilisateurs</h4>
|
||||
Nous avons 2 solutions pour cr<63>er un profil d'utilisateur. Prendre un
|
||||
mod<EFBFBD>le existant d<>j<EFBFBD> dans les Rfcs tel que le profil InetOrgPerson, ou construire
|
||||
son propre profil. Chacun a ses avantages et ses inconv<6E>nients. Personnellement, j'utilise
|
||||
plus souvent le 2<>me cas (cr<63>ation du profil personnalis<69>), car l'on peut adapter plus
|
||||
facilement certains probl<62>mes (quota, autorisation de recevoir des emails, ...)<br>
|
||||
Voici un profil d'utilisateur pour une entreprise nomm<6D>e Toto. J'ai sp<73>cifi<66> uniquement les
|
||||
attributs qui me sont n<>cessaires:<br>
|
||||
<b>Fichier toto_com.oc.conf</b>
|
||||
<pre>
|
||||
objectclass personToto
|
||||
requires
|
||||
objectclass,
|
||||
cn,
|
||||
uid,
|
||||
mail,
|
||||
maildrop,
|
||||
userPassword
|
||||
allows
|
||||
allowedServices
|
||||
</pre>
|
||||
<b>Fichier toto_com.at.conf</b>
|
||||
<pre>
|
||||
attribute allowedServices ces
|
||||
attribute maildrop ces
|
||||
</pre>
|
||||
Seul l'attribut <b>allowedServices</b> n'est pas obligatoire. Il servira pour montrer
|
||||
comment on peut restreindre l'acc<63>s au serveur FTP, au serveur de mails, ou <20> d'autres
|
||||
services.<br>
|
||||
|
||||
<b>cn</b>: (abr<62>viation de Common Name) donne le nom complet de la personne. Ce nom
|
||||
sera utilis<69> par les applications pour afficher le nom complet de la personne.<br>
|
||||
|
||||
<b>uid</b>: La valeur permettra d'identifier une personne de fa<66>on unique dans
|
||||
l'annuaire. La plupart du temps, <b>uid</b> correspondra <20> la partie gauche
|
||||
d'une adresse email. ($local_part sous Exim)<br>
|
||||
|
||||
<b>mail</b>: Cet attribut contiendra les diff<66>rentes adresses qu'il pourra recevoir. Je
|
||||
le repr<70>ciserai plus tard, mais les valeurs d'un attribut Ldap peuvent <20>tre multiples,
|
||||
c'est une des possibilit<69>s pour l'utilisateur de recevoir du courrier provenant de plusieurs
|
||||
adresses emails. G<>n<EFBFBD>ralement, on sp<73>cifie l'adresse email en entier de la personne.<br>
|
||||
|
||||
<b>maildrop</b>: Cet attribut contiendra les diff<66>rentes adresses de livraison du mail pour
|
||||
cette personne. En fonction du serveur de mails, les adresses de livraison peuvent-<2D>tre une
|
||||
adresse email, un r<>pertoire, un fichier, un programme externe. Ainsi, on retrouve
|
||||
la notion d'<i>alias</i> et de <i>.forward</i>.<br>
|
||||
|
||||
<b>userPassword</b>: Cet attribut contient le mot de passe de l'utilisateur. Il peut-<2D>tre
|
||||
crypt<EFBFBD> par le serveur LDAP auquel cas, il faudra configurer les serveurs Pop et Imap
|
||||
sp<EFBFBD>cifiquement. Ainsi il est impossible d'utiliser le mode CRAM-MD5 (option
|
||||
permettant d'<27>viter la transmission du mot de passe en clair sur le r<>seau Internet.<br>
|
||||
|
||||
<b>allowedServices</b>: Certains administrateurs veulent pouvoir limiter les acc<63>s
|
||||
Mails, les acc<63>s FTP pour certaines personnes. On va utiliser cet attribut pour
|
||||
autoriser uniquement les utilisateurs qui peuvent recevoir du mail, et disposent d'un
|
||||
acc<EFBFBD>s FTP. On pourra facilement cr<63>er d'autres attributs pour d'autres situations.
|
||||
L'exemple devrait suffire pour comprendre la m<>thode.<br>
|
||||
|
||||
|
||||
<h4>D<EFBFBD>finition de l'arbre LDAP</h4>
|
||||
|
||||
Dans le cas d'un serveur de mails multidomaines, il est bon de cr<63>er un branche
|
||||
par sous-domaine. Il sera plus facile apr<70>s de le g<>rer. La cr<63>ation de multiples
|
||||
branches ne p<>nalise pas les recherches, puisque les recherches ne se font pas sur les
|
||||
branches mais sur les attributs.<br>
|
||||
Voici un exemple d'arbre LDAP pour un serveur multi-domaines. Pour un serveur ne g<>rant qu'un
|
||||
seul domaine, on appliquera la m<>me m<>thode sauf que l'on se retrouvera qu'avec une seul branche
|
||||
organisation.<br>
|
||||
<pre>
|
||||
+ dc=toto, dc=com
|
||||
|-+ o=groupFR, dc=toto, dc=com
|
||||
| |-+ ou=Peoples, o=groupFR, dc=toto, dc=com
|
||||
| | |-- uid=user1, ou=Peoples, o=groupFR, dc=toto, dc=com
|
||||
| | |-- uid=user2, ou=Peoples, o=groupFR, dc=toto, dc=com
|
||||
| | |-- uid=user3, ou=Peoples, o=groupFR, dc=toto, dc=com
|
||||
| | |...
|
||||
| |-+ ou=Administrators,dc=toto,dc=com
|
||||
| | |-- uid=admin1, ou=Administrators, o=groupFR, dc=toto, dc=com
|
||||
| | |-- uid=admin2, ou=Administrators, o=groupFR, dc=toto, dc=com
|
||||
| | |...
|
||||
| |...
|
||||
| ...
|
||||
|-+ o=groupUK,dc=toto,dc=com
|
||||
| |-+ ou=Peoples, o=groupUK, dc=toto, dc=com
|
||||
| | |-- uid=user1, ou=Peoples, o=groupUK, dc=toto, dc=com
|
||||
| | |-- uid=user2, ou=Peoples, o=groupUK, dc=toto, dc=com
|
||||
| | |-- uid=user3, ou=Peoples, o=groupUK, dc=toto, dc=com
|
||||
| | |...
|
||||
| |-+ ou=Administrators,dc=toto,dc=com
|
||||
| | |-- uid=admin1, ou=Administrators, o=groupUK, dc=toto, dc=com
|
||||
| | |-- uid=admin2, ou=Administrators, o=groupUK, dc=toto, dc=com
|
||||
| | |...
|
||||
| |...
|
||||
| ...
|
||||
|-+ o=Administrators,dc=toto,dc=com
|
||||
| |-- cn=admin,o=Administrators,dc=toto,dc=com
|
||||
| |-- cn=mail,o=Administrators,dc=toto,dc=com
|
||||
| |-- cn=imap,o=Administrators,dc=toto,dc=com
|
||||
| |...
|
||||
|...
|
||||
</pre>
|
||||
|
||||
Explication:<br>
|
||||
Dans cet exemple, j'ai pris le cas d'une entreprise multinationale, qui voudrait
|
||||
centraliser <20> un seul endroit les informations des ses collaborateurs.<br>
|
||||
L'entreprise s'appelle toto, et dispose du nom de domaine toto.com. Les adresses
|
||||
emails sont hi<68>archis<69>es par pays (toto@uk.toto.com, toto@fr.toto.com, ...),
|
||||
donc on voudrait aussi que l'annuaire poss<73>de cette m<>me hi<68>rarchie. J'ai donc
|
||||
cr<EFBFBD><EFBFBD> des organisations pour chaque pays (o=groupFR et o=groupUK).<br>
|
||||
Dans chaque organisation, on peut classer (m<>me si je n'aime pas ce mot) les personnes
|
||||
suivant leur fonction ou leur place dans la soci<63>t<EFBFBD>. Ici, j'ai d<>cid<69> que l'on classerait
|
||||
les informaticiens (ou=Administrators) et les non-informaticiens (ou=Peoples). J'ai donc cr<63><72>
|
||||
2 sous-organisations.<br>
|
||||
Juste en dessous viennent les profils des utilisateurs. Mais nous pouvons tr<74>s
|
||||
bien avoir d'autres sous-organisations. Pour regrouper tous les services qui
|
||||
ont besoin d'acc<63>der, j'ai cr<63><72> un organisation Administrators <20> la racine du
|
||||
site. Il y aura un utilisateur root, qui aura le droit de tout modifier, un
|
||||
utilisateur mail, un utilisateur imap.<br>
|
||||
|
||||
|
||||
<h4>Cr<EFBFBD>ation des fichiers</h4>
|
||||
|
||||
Maintenant, que les profils et la structure sont d<>finis, voici les fichiers LDIF
|
||||
correspondant <20> l'exemple enonc<6E>.
|
||||
<b>Fichier toto_com-tree.ldif</b>
|
||||
<pre>
|
||||
dn: dc=toto, dc=com
|
||||
objectclass: dcobject
|
||||
dc: toto
|
||||
|
||||
dn: o=Administrators, dc=toto, dc=com
|
||||
objectclass: organization
|
||||
o: Administrators
|
||||
|
||||
dn: o=groupFR, dc=toto, dc=com
|
||||
objectclass: organization
|
||||
o: groupFR
|
||||
|
||||
dn: o=groupUK, dc=toto, dc=com
|
||||
objectclass: organization
|
||||
o: groupUK
|
||||
|
||||
dn: ou=Peoples, o=groupFR, dc=toto, dc=com
|
||||
objectclass: organizationalUnit
|
||||
ou: Peoples
|
||||
|
||||
dn: ou=Administrators, o=groupFR, dc=toto, dc=com
|
||||
objectclass: organizationalUnit
|
||||
ou: Administrators
|
||||
|
||||
dn: ou=Peoples, o=groupUK, dc=toto, dc=com
|
||||
objectclass: organizationalUnit
|
||||
ou: Peoples
|
||||
|
||||
dn: ou=Administrators, o=groupUK, dc=toto, dc=com
|
||||
objectclass: organizationalUnit
|
||||
ou: Administrators
|
||||
</pre>
|
||||
|
||||
<b>Fichier toto_com-admins.ldif</b>
|
||||
<pre>
|
||||
dn: cn=admin, o=Administrators, dc=toto, dc=com
|
||||
objectclass: person
|
||||
cn: admin
|
||||
sn: admin
|
||||
userPassword: 3bLtqp4wTXp35dRR
|
||||
|
||||
dn: cn=mail, o=Administrators, dc=toto, dc=com
|
||||
objectclass: person
|
||||
cn: mail
|
||||
sn: mail
|
||||
userPassword: 3bLtqp4wTXp35dRR
|
||||
|
||||
dn: cn=imap, o=Administrators, dc=toto, dc=com
|
||||
objectclass: person
|
||||
cn: mail
|
||||
sn: mail
|
||||
userPassword: 3bLtqp4wTXp35dRR
|
||||
</pre>
|
||||
|
||||
<b>Fichier toto_com-users.ldif</b>
|
||||
<pre>
|
||||
dn: uid=Fayre.Nickerson, ou=Peoples, o=groupFR, dc=toto, dc=com
|
||||
objectclass: personToto
|
||||
uid: Fayre.Nickerson
|
||||
cn: Fayre Nickerson
|
||||
maildrop: /import/mail/Fayre.Nickerson/
|
||||
userPassword: toto
|
||||
mail: fnickerson@fr.toto.com
|
||||
mail: Nayre.Nickerson@fr.toto.com
|
||||
|
||||
dn: uid=Felice.Risher, ou=Peoples, o=groupUK, dc=toto, dc=com
|
||||
objectclass: personToto
|
||||
uid: Felice.Risher
|
||||
cn: Felice Risher
|
||||
allowedServices: FTP
|
||||
allowedServices: SMTP
|
||||
maildrop: /import/mail/Felice.Risher/
|
||||
userPassword: fff
|
||||
mail: FRisher@uk.toto.com
|
||||
mail: felice.risher@uk.toto.com
|
||||
|
||||
dn: uid=Kollen.Beshai, ou=Administrators, o=groupFR, dc=toto, dc=com
|
||||
objectclass: personToto
|
||||
uid: Kollen.Beshai
|
||||
cn: Kollen Beshai
|
||||
allowedServices: SMTP
|
||||
maildrop: /import/mail/Kollen.Beshai/
|
||||
userPassword: mmm
|
||||
mail: KBeshai@fr.toto.com
|
||||
mail: Kollen.Beshai@fr.toto.com
|
||||
</pre>
|
||||
|
||||
<h3>Configuration du serveur</h3>
|
||||
|
||||
<h4>Cr<EFBFBD>ation du fichier slapd.conf</h4>
|
||||
|
||||
Il n'y a pas grand chose <20> dire au sujet du fichier de configuration, sauf pour la partie
|
||||
droits d'acc<63>s qui sera d<>taill<6C>e ci-dessous. Il faut toujours activer l'option <b>schemacheck</b>.
|
||||
<pre>
|
||||
schemacheck on
|
||||
</pre>
|
||||
Pour optimiser les performances, on peut rajouter ceci dans la section de notre backend.
|
||||
<pre>
|
||||
lastmod off
|
||||
|
||||
cachesize 10000
|
||||
dbcachesize 5000000
|
||||
</pre>
|
||||
Ensuite, il faut lui indiquer, quels sont les attributs <20> indexer. Dans la
|
||||
version 2.0 d'Openldap, il faut lui pr<70>ciser objectclass. Les attributs o<> l'on
|
||||
ne fait jamais de recherche doivent <20>tre index<65>s.
|
||||
<pre>
|
||||
index cn
|
||||
index mail,uid eq,sub
|
||||
index default none
|
||||
</pre>
|
||||
Pour encore plus optimiser, on peut rajouter ces 2 options dans la version 2.0 d'Openldap.
|
||||
<pre>
|
||||
dbnosync
|
||||
dbnolocking
|
||||
</pre>
|
||||
|
||||
S<EFBFBD>curit<EFBFBD>, d<>finition des droits d'acc<63>s aux attributs.<br>
|
||||
Il faut d<>finir, quels sont les personnes qui ont le droit de lire ou modifier les attributs.
|
||||
Prenons le cas du serveur de mail, il faut qu'il puisse lire le contenu de la variable
|
||||
maildrop, et mail. En revanche, le serveur IMAP doit avoir le droit de lire le contenu de la
|
||||
variable userPassword, cn, maildrop. En aucun cas, les 2 programmes ne devront avoir le droit
|
||||
de modifier les valeurs.<br>
|
||||
Voici donc les Access Control List que j'utilise dans notre exemple ci-dessus.
|
||||
<pre>
|
||||
access to attribute=userPassword
|
||||
by dn="cn=admin, o=Administrators, dc=toto, dc=com" write
|
||||
by dn="cn=imap, o=Administrators, dc=toto, dc=com" read
|
||||
by self write
|
||||
by * none
|
||||
|
||||
access to attribute=maildrop
|
||||
by dn="cn=admin, o=Administrators, dc=toto, dc=com" write
|
||||
by dn="cn=mail, o=Administrators, dc=toto, dc=com" read
|
||||
by dn="cn=imap, o=Administrators, dc=toto, dc=com" read
|
||||
by * none
|
||||
|
||||
access to attribute=*
|
||||
by dn="cn=admin, o=Administrators, dc=toto, dc=com" write
|
||||
by * read
|
||||
</pre>
|
||||
|
||||
Le fichier de configuration d'Openldap:
|
||||
<pre>
|
||||
#
|
||||
# See slapd.conf(5) for details on configuration options.
|
||||
# This file should NOT be world readable.
|
||||
#
|
||||
include /home/luc/srcs/openldap/build/openldap1/etc/slapd.at.conf
|
||||
include /home/luc/srcs/openldap/build/openldap1/etc/slapd.oc.conf
|
||||
include /home/luc/srcs/openldap/build/openldap1/etc/toto_com.at.conf
|
||||
include /home/luc/srcs/openldap/build/openldap1/etc/toto_com.oc.conf
|
||||
|
||||
schemacheck on
|
||||
|
||||
pidfile /home/luc/srcs/openldap/build/openldap1/var/slapd.pid
|
||||
argsfile /home/luc/srcs/openldap/build/openldap1/var/slapd.args
|
||||
|
||||
#######################################################################
|
||||
# ldbm database definitions
|
||||
#######################################################################
|
||||
|
||||
database ldbm
|
||||
suffix "dc=toto, dc=com"
|
||||
directory /home/luc/srcs/openldap/build/openldap1/var/openldap-ldbm
|
||||
defaultaccess none
|
||||
|
||||
#rootdn "cn=root, dc=toto, dc=com"
|
||||
#rootpw secret
|
||||
|
||||
# Pas d'attribut indiquant la derni<6E>re modification.
|
||||
lastmod off
|
||||
|
||||
# Les indexs
|
||||
index cn
|
||||
index mail,uid eq,sub
|
||||
index default none
|
||||
|
||||
# La m<>moire utilis<69>e
|
||||
cachesize 10000
|
||||
dbcachesize 5000000
|
||||
|
||||
# Attention a ne pas mettre d'espace lors de l'utilisation des dn
|
||||
access to attribute=userPassword
|
||||
by dn="cn=admin,o=Administrators,dc=toto,dc=com" write
|
||||
by dn="cn=imap,o=Administrators,dc=toto,dc=com" read
|
||||
by self write
|
||||
by * none
|
||||
|
||||
access to attribute=maildrop
|
||||
by dn="cn=admin,o=Administrators, dc=toto,dc=com" write
|
||||
by dn="cn=mail,o=Administrators, dc=toto,dc=com" read
|
||||
by dn="cn=imap,o=Administrators, dc=toto,dc=com" read
|
||||
by * none
|
||||
|
||||
access to attribute=*
|
||||
by dn="cn=admin,o=Administrators,dc=toto,dc=com" write
|
||||
by * read
|
||||
|
||||
</pre>
|
||||
|
||||
<h4>Importation des donn<6E>es LDIF</h4>
|
||||
|
||||
Pour cr<63>er notre base, nous avons 2 solutions. La premi<6D>re est tr<74>s rapide
|
||||
et permet d'importer tr<74>s rapidement plusieurs milliers d'enregistrements. La 2<>me
|
||||
n<EFBFBD>cessite que le serveur LDAP soit actif, mais peut se faire <20> distance.<br>
|
||||
<ul>
|
||||
<li>M<EFBFBD>thode utilisant ldif2ldm:<br>
|
||||
Concatener tous les fichiers <i>.ldif</i> dans le fichier <i>all.ldif</i><br>
|
||||
Lancer la commande suivante avec le serveur ldap arr<72>t<EFBFBD>.<br>
|
||||
<pre>
|
||||
ldif2ldbm -i all.ldif
|
||||
</pre>
|
||||
</li>
|
||||
<li>M<EFBFBD>thode utilisant ldapadd:<br>
|
||||
Pour utiliser cette m<>thode, il faut qu'il existe un utilisateur ayant le droit
|
||||
d'<27>crire dans la base LDAP. La m<>thode la plus simple est de d<>commenter les
|
||||
lignes dans le fichier de configuration <i>slapd.conf</i>: <b>rootdn</b> et
|
||||
<b>rootpw</b>.<br>
|
||||
D<EFBFBD>marrer le serveur Ldap.<br>
|
||||
Pour chaque fichier en commen<65>ant par le fichier <i>-tree.ldif</i>,
|
||||
lancer la commande suivante:<br>
|
||||
<pre>
|
||||
ldapadd -h localhost -p 389 \
|
||||
-D "cn=root,dc=toto,dc=com" \
|
||||
-w secret \
|
||||
-f all.ldif
|
||||
</pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test du bon fonctionnement du serveur</h3>
|
||||
|
||||
<h4>Lancement du serveur</h4>
|
||||
<pre>
|
||||
slapd -f /home/luc/srcs/openldap/build/openldap1/etc/slapd.toto_com.conf \
|
||||
-p 389
|
||||
</pre>
|
||||
|
||||
<h4>test de recherche</h4>
|
||||
La commande suivante doit afficher tous les objets contenus dans la base sous la
|
||||
m<EFBFBD>me forme que les fichiers <i>.ldif</i>.
|
||||
<pre>
|
||||
ldapsearch -L -h localhost -p 389 -b "dc=toto,dc=com" "(objectclass=*)"
|
||||
</pre>
|
||||
|
||||
<h4>test d'ajout</h4>
|
||||
<pre>
|
||||
ldapadd -h localhost -p 389 \
|
||||
-D cn=admin,o=Administrators,dc=toto,dc=com -w 3bLtqp4wTXp35dRR
|
||||
dn: uid=test, ou=Peoples, o=groupFR, dc=toto, dc=com
|
||||
objectclass: personToto
|
||||
uid: test
|
||||
cn: utilisateur test
|
||||
maildrop: /var/spool/mail/test
|
||||
userPassword: bingo
|
||||
mail: test@fr.toto.com
|
||||
|
||||
</pre>
|
||||
|
||||
<h4>test de suppression</h4>
|
||||
<pre>
|
||||
ldapdelete \
|
||||
-h localhost -p 389 \
|
||||
-D cn=admin,o=Administrators,dc=toto,dc=com -w 3bLtqp4wTXp35dRR \
|
||||
uid=test,ou=Peoples,o=groupFR,dc=toto,dc=com
|
||||
</pre>
|
||||
|
||||
<h4>Utilisation du programme GQ.</h4>
|
||||
On peut utiliser un programme graphique tel que <a href="http://biot.com/gq/">GQ</a>.
|
||||
|
||||
<h3>Optionnel: Migration d'une liste d'utilisateurs existante</h3>
|
||||
|
||||
|
||||
<h2>Exim</h2>
|
||||
<h3>Compilation</h3>
|
||||
|
||||
Copier le fichier <i>src/EDITME</i> <20> la place de <i>Local/Makefile</i>.
|
||||
Configurer les options qui correspondent <20> votre syst<73>me et activer les options
|
||||
suivantes pour avoir le support LDAP.<br>
|
||||
<pre>
|
||||
LOOKUP_LDAP=yes
|
||||
LOOKUP_LIBS=-lldap -llber
|
||||
LDAP_LIB_TYPE=UMICHIGAN
|
||||
</pre>
|
||||
Si vous utilisez la version 2 d'Openldap, ou la version Netscape, remplacer
|
||||
<b>LDAP_LIB_TYPE=UMICHIGAN</b> par <b>LDAP_LIB_TYPE=NETSCAPE</b>.<br>
|
||||
|
||||
La distribution Debian/GNU Linux utilise comme serveur de mail par d<>faut, le
|
||||
programme Exim. Il est compil<69> avec toutes les options n<>cessaires pour un
|
||||
serveur et dispose donc du support LDAP.<br>
|
||||
|
||||
Voici le fichier Local/Makefile. Ce n'est qu'un exemple. Je vous recommande de
|
||||
lire le fichier de configuration en d<>tail pour personnaliser au mieux le serveur
|
||||
de mails.<br>
|
||||
<pre>
|
||||
COMPRESS_COMMAND=gzip
|
||||
COMPRESS_SUFFIX=gz
|
||||
ZCAT_COMMAND=zcat
|
||||
CONFIGURE_FILE=/etc/exim.conf
|
||||
DIRECTOR_ALIASFILE=yes
|
||||
DIRECTOR_FORWARDFILE=yes
|
||||
DIRECTOR_LOCALUSER=yes
|
||||
DIRECTOR_SMARTUSER=yes
|
||||
EXICYCLOG_MAX=10
|
||||
EXIM_UID=1000
|
||||
EXIM_GID=1000
|
||||
EXIM_MONITOR=eximon.bin
|
||||
LOOKUP_DBM=yes
|
||||
LOOKUP_LSEARCH=yes
|
||||
LOOKUP_LDAP=yes
|
||||
LOOKUP_INCLUDE=-I/home/luc/srcs/openldap/build/openldap1/include
|
||||
LOOKUP_LIBS=-L/home/luc/srcs/openldap/build/openldap1/lib -lldap -llber
|
||||
LDAP_LIB_TYPE=UMICHIGAN
|
||||
ROUTER_DOMAINLIST=yes
|
||||
ROUTER_IPLITERAL=yes
|
||||
ROUTER_LOOKUPHOST=yes
|
||||
SPOOL_DIRECTORY=/var/spool/exim
|
||||
SUPPORT_MAILDIR=yes
|
||||
TRANSPORT_APPENDFILE=yes
|
||||
TRANSPORT_PIPE=yes
|
||||
TRANSPORT_SMTP=yes
|
||||
</pre>
|
||||
Il ne reste plus qu'<27> le compiler avec la commande <b>make</b>.
|
||||
|
||||
<h3>Configuration</h3>
|
||||
Pour d<>livrer les mails en utilisant le support LDAP, j'ai besoin d'un
|
||||
transport et d'un director. Je vais donc cr<63>er un <b>Director</b> que je
|
||||
placerai apr<70>s la gestion des alias syst<73>mes.<br>
|
||||
Voici donc le <b>Director</b> qu'il faut utiliser dans notre exemple.
|
||||
<pre>
|
||||
ldap_user:
|
||||
driver = aliasfile
|
||||
search_type = ldapm
|
||||
query = user="cn=mail,o=Administrators,dc=toto,dc=com" \
|
||||
pass="secret" \
|
||||
"ldap://localhost:389/dc=toto,dc=com?maildrop?sub? \
|
||||
(&(mail=${local_part}@${domain})(allowedServices=SMTP))"
|
||||
expand errors_to = admin
|
||||
user = vmail
|
||||
group = vmail
|
||||
directory_transport = address_directory_ldap
|
||||
forbid_pipe = true
|
||||
</pre>
|
||||
|
||||
<h2>Postfix</h2>
|
||||
<h3>Compilation</h3>
|
||||
|
||||
<pre>
|
||||
% make makefiles \
|
||||
CCARGS="-pipe
|
||||
-I/usr/local/BerkeleyDB/include/ \
|
||||
-L/usr/local/BerkeleyDB/lib -DHAS_LDAP \
|
||||
-I/usr/local/openldap/include" \
|
||||
AUXLIBS="-L/usr/local/openldap/lib/ -lldap -llber" \
|
||||
OPT="-O2" DEBUG=""
|
||||
% make clean
|
||||
% make
|
||||
</pre>
|
||||
<h3>Configuration</h3>
|
||||
|
||||
<h2>Sendmail</h2>
|
||||
<h3>Compilation</h3>
|
||||
Ajouter le support LDAP <20> sendmail.
|
||||
<!-- mkdir -p /home/luc/srcs/sendmail/build/usr/lib/sm.bin /home/luc/srcs/sendmail/build/usr/bin /home/luc/srcs/sendmail/build/usr/sbin /home/luc/srcs/sendmail/build/etc/mail -->
|
||||
Voici le fichier site.local.m4 qui permet de compiler Sendmail avec le support LDAP.
|
||||
<pre>
|
||||
define(`confMAPDEF', `-DMAP_REGEX -DNEWDB')
|
||||
define(`confINCDIRS', `-I/home/luc/srcs/openldap/build/openldap1/include
|
||||
-I/home/luc/srcs/openldap/build/db2/BerkeleyDB/include')
|
||||
define(`confLIBDIRS', `-L/home/luc/srcs/openldap/build/openldap1/lib
|
||||
-L/home/luc/srcs/openldap/build/db2/BerkeleyDB/lib')
|
||||
APPENDDEF(`conf_sendmail_ENVDEF', `-DLDAPMAP')
|
||||
APPENDDEF(`conf_sendmail_LIBS', `-ldb -lldap -llber')
|
||||
dnl define(`confENVDEF', `-DUSE_VENDOR_CF_PATH=/home/luc/srcs/sendmail/build/etc/mail/sendmail.cf')
|
||||
define(`confLIBS', `')
|
||||
|
||||
define(`confCC', `gcc')
|
||||
define(`confOPTIMIZE', `-O2 -Wall -pipe')
|
||||
|
||||
dnl define(`confEBINDIR', `/home/luc/srcs/sendmail/build/usr/lib/sm.bin')
|
||||
dnl define(`confHDIR', `/home/luc/srcs/sendmail/build/usr/lib')
|
||||
dnl define(`confHFDIR', `/home/luc/srcs/sendmail/build/etc/mail')
|
||||
dnl define(`confHFFILE', `helpfile')
|
||||
dnl define(`confMANROOT', `/home/luc/srcs/sendmail/build/usr/man/man')
|
||||
dnl define(`confMANOWN', `luc')
|
||||
dnl define(`confMANGRP', `luc')
|
||||
dnl define(`confMBINDIR', `/home/luc/srcs/sendmail/build/usr/sbin')
|
||||
dnl define(`confSBINDIR', `/home/luc/srcs/sendmail/build/usr/sbin')
|
||||
dnl define(`confSBINOWN', `luc')
|
||||
dnl define(`confSBINGRP', `luc')
|
||||
dnl define(`confSBINMODE', `0755')
|
||||
dnl define(`confSTDIR', `/home/luc/srcs/sendmail/build/var/lib/sendmail')
|
||||
dnl define(`confSTFILE', `statistics')
|
||||
dnl define(`confUBINDIR', `/home/luc/srcs/sendmail/build/usr/bin')
|
||||
dnl define(`confUBINOWN', `luc')
|
||||
dnl define(`confUBINGRP', `luc')
|
||||
dnl define(`confUBINMODE', `0755')
|
||||
dnl
|
||||
dnl define(`confNO_MAN_BUILD', `true')
|
||||
dnl define(`confNO_MAN_INSTALL', `true')
|
||||
dnl define(`confNO_STATISTICS_INSTALL', `true')
|
||||
</pre>
|
||||
Lancer la compilation de sendmail avec la commande suivante:
|
||||
<pre>
|
||||
sh Build -f site.local.m4
|
||||
</pre>
|
||||
<h3>Configuration</h3>
|
||||
Voici le contenu de mon fichier local.mc. Dixit, les docs que j'ai trouv<75> sur
|
||||
Internet. La meilleure documentation, ce sont les sources. Le code n'est pas
|
||||
beaucoup document<6E>, donc pour trouver les options, allez voir le fichier
|
||||
<i>sendmail/map.c</i> et chercher la fonction <i>ldapmap_parseargs</i>. Sinon
|
||||
il y a une documentation qui explique un peu plus en d<>tail mes propos.
|
||||
(<a href="http://www.stanford.edu/~bbense/Inst.html">www.stanford.edu/~bbense/Inst.html</a>)
|
||||
|
||||
Les options principales:
|
||||
<ul>
|
||||
<li>-b"ldap search base":<br>
|
||||
The is the "directory" in your ldap "tree" that you are going to search in.
|
||||
</li>
|
||||
<li>-h"ldap servers":<br>
|
||||
This is a space separated string of servers that support ldap at your site. The ldap libraries
|
||||
will attempt to connect to these machines in the order that they are listed.
|
||||
</li>
|
||||
<li>-k"ldap search string":<br>
|
||||
This is a "sprintf" style string that defines how the map takes it's input value and constructs
|
||||
an ldap search. It MUST be of the form "attribute=%s". It and the base used above should define a
|
||||
search that returns AT MOST ONE ENTRY. The ldap map will only use the first entry it recieves.
|
||||
</li>
|
||||
<li>-v"ldap attribute":<br>
|
||||
The value that replaces the origin string in the map. In most cases this will be your rfc822
|
||||
email address.
|
||||
</li>
|
||||
<li>-d"ldap bind dn":<br>
|
||||
</li>
|
||||
<li>-P"ldap bind passwd":<br>
|
||||
|
||||
</li></ul>
|
||||
Le fichier de configuration fourni ne concerne qu'un seul domaine pour
|
||||
plusieurs raisons. Avec Sendmail, je ne sais pas comment g<>rer les sites
|
||||
multidomaines pour permettre de faire plusieurs r<>gles (une par domaine).
|
||||
Sendmail ne permet pas d'avoir d'autres informations que la clef unique qui
|
||||
identifie le mail. Je pense quand faisant 2 requ<71>tes LDAP, on devrait y
|
||||
arriver. Voici donc le fichier <i>local.mc</i> permettant de g<>n<EFBFBD>rer le fichier
|
||||
<i>sendmail.cf</i>.
|
||||
|
||||
<pre>
|
||||
VERSIONID(`$Id: comment_installer_un_serveur_multidomaine_avec_ldap.html,v 1.1 2003/06/04 12:41:10 kiwi Exp $')
|
||||
OSTYPE(linux)dnl
|
||||
DOMAIN(generic)dnl
|
||||
MAILER(local)dnl
|
||||
MAILER(smtp)dnl
|
||||
define(`confLDAP_DEFAULT_SPEC', `-h localhost -p 389 -b dc=toto,dc=com')
|
||||
APPENDDEF(`confLDAP_DEFAULT_SPEC', `-dcn=mail,o=Administrators,dc=toto,dc=com -P/etc/mail/secret')
|
||||
define(`ldap_query', `ldap -1 -v maildrop -k"(&(objectClass=personToto)(uid=%0))"')
|
||||
FEATURE(`ldap_routing',`',ldap_query)
|
||||
</pre>
|
||||
|
||||
<h2>Courier-Imap & Courier-Pop</h2>
|
||||
<h3>Compilation</h3>
|
||||
|
||||
Voici la ligne de commande que j'utilise pour compiler courier-imap (et donc
|
||||
courier-pop):
|
||||
<pre>
|
||||
CPPFLAGS="-I/usr/local/openldap/include/" \
|
||||
LDFLAGS="-L/usr/local/openldap/lib" \
|
||||
LIBS="-lresolv" \
|
||||
./configure --prefix=/usr/local/courier
|
||||
</pre>
|
||||
|
||||
Sur une machine solaris 8
|
||||
<pre>
|
||||
% LIBS="-lsocket" LDFLAGS="-L/usr/local/BerkeleyDB/lib \
|
||||
-L/usr/local/openldap/lib" CXXFLAGS="-pipe -O2 \
|
||||
-I/usr/local/BerkeleyDB/include \
|
||||
-I/usr/local/openldap/include" CFLAGS="-pipe -O2 \
|
||||
-I/usr/local/BerkeleyDB/include \
|
||||
-I/usr/local/openldap/include" ./configure \
|
||||
--prefix=/usr/local/courier-imap --with-waitfunc=wait3
|
||||
% make
|
||||
% make install
|
||||
</pre>
|
||||
|
||||
|
||||
La librairie <i>resolv</i> n'est pas n<>cessaire pour Openldap 1.x.
|
||||
|
||||
<h3>Configuration</h3>
|
||||
|
||||
Courier-Imap utilise plusieurs fichiers de configuration correspondants <20> chacun
|
||||
de ses modules.<br><br>
|
||||
|
||||
<b>imapd.conf</b> ou <b>imapd</b>: Sert pour la configuration du serveur IMAP. La configuration
|
||||
par d<>faut est correcte mais pensez <20> changer la variable IMAPDSTART par
|
||||
YES.<br>
|
||||
<b>authdaemonrc</b>: Ce fichier permet de configurer le daemon
|
||||
d'authentification. Il contient plusieurs param<61>tres permettant de configurer
|
||||
le nombre de daemon lanc<6E> (<i>daemons</i>), l'ordre des modules pour
|
||||
authentifier une personne (<i>authmodulelist</i>). Voici une courte explication
|
||||
des diff<66>rents modules:
|
||||
<ul>
|
||||
<li>authuserdb: utilise une base au format dbm pour faire l'authentification.
|
||||
<li>authcram: permet de r<>aliser le cryptage des mots de passe au format
|
||||
CRAM-MD5 utilisable ensuite dans les autres modules.
|
||||
<li>authcustom: est juste un template permettant d'impl<70>menter votre propre module
|
||||
d'authentification.
|
||||
<li>authldap: permet de r<>aliser l'authentification au format LDAP. Le fichier
|
||||
de configuration se nomme <i>authldaprc</i>
|
||||
<li>authmysql: r<>alise l'authentification en utilisant une base Mysql. A quand
|
||||
un module pour Postgresql ?
|
||||
<li>authpam: r<>alise l'authentification en utilisant PAM.
|
||||
<li>authpwd et doauthshadow: r<>alisent l'authentification en utilisant les
|
||||
fonctions standards d'Unix pour lire les fichiers <i>/etc/passwd</i> ou
|
||||
<i>/etc/shadow</i>.
|
||||
<li>authvchkpw: r<>alise l'authentification en utilisant les m<>me modules que
|
||||
vpopmail (voir <a href="http://www.qmail.org">Qmail</a>). Note je ne connais
|
||||
pas ce module.
|
||||
</ul>
|
||||
Dans notre cas, cette variable ne contiendra que "authcram authldap".<br><br>
|
||||
|
||||
<b>authldaprc</b>: Ce fichier configure le module d'authentification pour
|
||||
LDAP.<br>
|
||||
<pre>
|
||||
LDAP_SERVER localhost
|
||||
LDAP_PORT 389
|
||||
LDAP_BASEDN dc=toto.com
|
||||
LDAP_BINDDN cn=mail,o=Administrators,dc=toto.com
|
||||
LDAP_BINDPW 34GREGEop#'
|
||||
LDAP_TIMEOUT 5
|
||||
LDAP_MAIL mail
|
||||
LDAP_DOMAIN toto.com
|
||||
LDAP_GLOB_UID vmail
|
||||
LDAP_GLOB_GID vmail
|
||||
LDAP_HOMEDIR maildrop
|
||||
LDAP_MAILDIR maildrop
|
||||
LDAP_FULLNAME cn
|
||||
LDAP_CLEARPW userPassword
|
||||
</pre>
|
||||
<b>LDAP_DOMAIN</b> ne servira uniquement si l'utilisateur ne rentrera pas de nom de
|
||||
domaine lors de son login. Ainsi la gestion est transparente comme pour les
|
||||
serveurs de mail, lorsqu'il rajoute le nom de domaine. L'utilisateur <b>LDAP_BINDDN</b>
|
||||
devra pouvoir lire les entr<74>es des champs password et faire des recherches sur
|
||||
l'adresse email.<br>
|
||||
|
||||
<i>TODO</i>
|
||||
|
||||
|
||||
|
||||
<h1>Programmes additionnels</h1>
|
||||
<h2>Installation du webmail: IMP</h2>
|
||||
|
||||
Pour installer IMP, il faut la librairie Horde, que l'on trouvera au m<>me endroit que IMP.
|
||||
D<EFBFBD>compressez les sources de horde, puis dans le r<>pertoire horde, d<>compressez les sources de IMP.
|
||||
Lisez la documentation se trouvant dans horde/doc/INSTALL et horde/imp/doc/INSTALL.
|
||||
Doit-on parler de la base de donn<6E>es g<>rant les sessions.
|
||||
|
||||
Une fois les 2 programmes install<6C>s et configur<75>s, on va passer <20> la configuration du Webmail.
|
||||
Editez le fichier de configuration de IMP config/servers.php3.
|
||||
Ce fichier permet d'afficher la liste des serveurs IMAP auquel l'utilisateur pourra se connecter.
|
||||
Pour le moment, on en a configur<75> un seul.
|
||||
<pre>
|
||||
<?php
|
||||
$IMAPServers = array();
|
||||
$IMAPServers['localhost'] = new IMAPServer('Webmail',
|
||||
'localhost',
|
||||
143,
|
||||
'',
|
||||
'toto.com');
|
||||
?>
|
||||
</pre>
|
||||
|
||||
Editer le fichier <i>imp/config/ldap.php3</i>, qui contiendra la liste des serveurs LDAP auquel
|
||||
IMP pourra se connecter pour faire des recherches.
|
||||
<pre>
|
||||
<?php
|
||||
$LDAPServers = array();
|
||||
$LDAPServers['localhost'] = new LDAPServer('Annuaire',
|
||||
'Annuaire de Toto.com',
|
||||
'localhost',
|
||||
'dc=toto,dc=com',
|
||||
'sn',
|
||||
'cn,mail,sn,givenname',
|
||||
'contains,begins,ends');
|
||||
|
||||
?>
|
||||
</pre>
|
||||
Dans le fichier <i>imp/config/defaults.php3</i>, activez cette variable <20> TRUE, pour que IMP utilise la liste
|
||||
des serveurs IMAP configur<75>s dans le fichier <i>imp/config/servers.php3</i>
|
||||
<pre>$default->use_server_list = TRUE;</pre>
|
||||
On utilise Courier-Imap, alors il faut modifier la valeur de la variable personal_folders.
|
||||
<pre>$default->personal_folders = 'INBOX.'</pre>
|
||||
|
||||
|
||||
<h1>FAQ</h1>
|
||||
|
||||
<ol>
|
||||
<li><b>Comment une personne peut avoir plusieurs adresses emails ?</b><br>
|
||||
Il suffit de mettre plusieurs valeurs dans l'attribut mails, les clients LDAP
|
||||
devraient tous savoir g<>rer les valeurs multi-<2D>valu<6C>es.
|
||||
<li><b>Comment envoyer un mail <20> un groupe de personnes ?</b><br>
|
||||
Il suffit de cr<63>er un profil, contenant plusieurs adresses emails dans
|
||||
l'attribut maildrop. Une seconde m<>thode serait de rajouter pour chaque
|
||||
personne, dans son attribut mail, le nom du groupe <20> rajouter.
|
||||
<li><b>Comment d<>finir que tous les domaines soient <20>quivalents ?</b><br>
|
||||
Il suffit de d<>finir LDAP_DOMAIN <20> la valeur *
|
||||
</ol>
|
||||
<h1>Annexe</h1>
|
||||
|
||||
<h2>Remerciements</h2>
|
||||
Je tiens remercier la soci<63>t<EFBFBD> <a href="http://www.alcove.com/">Alc<EFBFBD>ve</a> pour
|
||||
son effort en faveur de l'Open Source, et qui m'a permis de me former sur les
|
||||
outils utilis<69>s ci-dessus.<br>
|
||||
Et les auteurs des programmes cit<69>s sans lesquels ce guide n'existerait pas.<br>
|
||||
Et aussi fr<66>d<EFBFBD>ric massot pour ses commentaires :-).<br>
|
||||
<h2>R<EFBFBD>f<EFBFBD>rences</h2>
|
||||
|
||||
Un Tutorial LDAP en fran<61>ais:
|
||||
<a href="http://www-sop.inria.fr/semir/personnel/Laurent.Mirtain/LDAP.html">http://www-sop.inria.fr/semir/personnel/Laurent.Mirtain/LDAP.html</a><br>
|
||||
Installation d'un serveur LDAP (de type stand-alone) sous Linux.
|
||||
<a href="http://www.chez.com/frafart/documents/LDAP.html">http://www.chez.com/frafart/documents/LDAP.html</a><br>
|
||||
|
||||
|
||||
<i>Je ne donne aucune garantie sur le contenu de ce document, <20> vos risques et p<>rils.</i>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user