29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / Internet / Installer Cyrus IMAP + SSL + LDAP / Cyrus IMAP : installer cyrus imap





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

Installer Cyrus IMAP + SSL + LDAP

Table des matières

  1. Installer Cyrus IMAP + SSL + LDAP
  2. Installer Cyrus IMAP
  3. Le fichier cyrus.conf
  4. Le fichier imapd.conf
  5. Le fichier imapd-local.conf
  6. Création d'une Autorité de certification et de certificats
  7. Boîte à lettres partagée
  8. Cyrus IMAP : authentification auprès d'un annuaire LDAP

Cyrus IMAP : installer cyrus imap

Date de publication: le dimanche 13 mars 2011 à 20h01
Dernière modification: par Pascal BOYER le mercredi 4 mai 2011 à 23h18

Tant que tu ne peux pardonner à autrui d'être différend de toi, tu es encore loin du chemin de la sagesse.

Proverbe

Avant propos

Il n’est pas facile de déterminer par quoi commencer: Postfix/Cyrus-IMAP ou Cyrus-IMAP/Postfix ?

Et puis sur quels critères fonder son choix? L’un comme l’autre, seul, ne sert à rien (sauf Postfix en tant que relais/passerelle) !

Alors aléa jacta est: va pour Cyrus.

Mais, comme en définitive, rien n’est dû au hasard, voici pourquoi ce serveur est ainsi nommé:

Cyrus (~580-528) était un roi intelligent, qui ne gouverna pas son gigantesque empire par la cruauté comme le firent les Assyriens. Bien au contraire, tout son règne se caractérisa par une politique de tolérance et d’intégration envers les divers peuples qui composèrent son nouvel empire.

Ce, qui retranscrit en termes informatiques, peut donner ceci:

Cyrus-IMAP se caractérise par sa capacité d’intégration et de tolérance envers la multitude de composants qui peuvent former l’ensemble du serveur de mail ;-)

En tout cas, j’aime à penser que ce sont là les raisons qui ont prévalu au choix d’un tel nom par les créateurs de ce logiciel.

Et pour ceux qui souhaitent en savoir plus long sur Cyrus-ROI voici un lien fort intéressant: Cyrus-ROI

Contexte de l’installation

Cette série d’articles consacrée à Postfix présente la mise en œuvre d’un serveur de mail dans le cadre d’une utilisation personnelle de celui-ci. Ceci sous-entend qu’il n’y a aucune configuration particulière en terme de réseaux, sous-réseaux, passerelle etc... qui soit présentée ici. La seule particularité de ma configuration concerne l’envoi de mail à destination des adresses AOL. En effet, AOL ayant une politique très agressive en terme de lutte anti-spam, mes mails sont systématiquement rejetés par leurs serveurs. Cependant, une solution existe qui est présentée dans l’article 8 - Postfix: "main.cf"

Pour autant, et quand bien même votre environnement réseau serait plus complexe que le mien, je pense que vous devriez trouver dans ces différents articles suffisamment d’explications concernant les règles des fichiers /etc/postfix/main.cf, /etc/postfix/master.cf, /etc/cyrus.conf et /etc/imapd.conf pour adapter vos fichiers de configuration à vos besoins.

Je tiens tout de même à préciser que mon serveur de mail gère sans aucune difficulté les 500 mails (minimum) que je reçois quotidiennement de la dizaine de mailing-list auxquelles je suis abonné, mais surtout, qu’avec la configuration du fichier /etc/postfix/main.cf présentée ici et sans aucun autre logiciel anti-spam, je ne reçois pas plus de 3-4 spams par jour.

Cela dit, comme vous pourrez vous en rendre compte, je n’ai fait aucune concession lors de la configuration des règles prévues pour que Postfix se montre permissif à l’égard des produits M$ et autres logiciels mal écrits ou ne respectant pas les standards.

Enfin, j’ai une règle de rejet des fichiers attachés qui refuse quasiment tous les formats de fichier. Je pense que je dois à cette règle agressive le peu de spam que je reçois.

Étant très loin de l’exhaustivité dans ma présentation d’une configuration d’un serveur de mail, je vous enjoins de vous reporter à l’excellent site de Xavier Guimard qui n’est rien d’autre que la traduction française du site officiel de Postfix.

Cyrus-IMAP

Ce premier article présente donc la marche à suivre pour installer le serveur imapd Cyrus-IMAP sur une Debian/Sid.
Cette installation comprend la mise en place:

  • du serveur imapd/ imaps Cyrus-IMAP,
  • de la bibliothèque SASL pour l’authentification des utilisateurs,
  • de la bibliothèque OpenSSL pour la création de l’AC et des certificats.

:
J’ai cherché, à travers la rédaction de ce document, à être le plus complet et le plus clair possible, afin que quiconque puisse, au final, obtenir un serveur Cyrus-IMAP en état de fonctionnement et sécurisé. Ceci explique la longueur de cet article, mais je pense que cela permettra à tous ceux qui ne sont pas des "gourous" de Linux, de mieux comprendre ce qui se passe à chacune des étapes décrites.
Si, au cours de votre lecture, vous rencontriez des inexactitudes surtout prenez le temps de m’en informer par mail .

Pourquoi choisir le protocol IMAP:

  • IMAP est l’acronyme d’Internet Message Access Protocol.
  • Un serveur IMAP écoute sur le port 143 ou 993 lorsque son accès est sécurisé avec TLS.
  • Le logiciel serveur qui tourne s’appelle imapd ou imaps et c’est ainsi qu’ils sont désignés par la suite.
  • IMAP permet de stocker les mails, sur le serveur, de façon hiérarchique, de les classer, de les trier et d’en voir les fichiers attachés sans devoir les rapatrier en local.
  • IMAP permet donc de consulter ses mails de n’importe où même après les avoir déjà lus.
  • IMAP permet de créer, supprimer, ajouter des BàL.
  • IMAP permet de définir des flags qui spécifient l’état d’un mail: lu, non lu, important, répondu, non répondu, etc...
  • IMAP permet de faire des recherches avancées dans les BàL à partir de nombreux critères de recherche.
  • IMAP supporte le mode "online" et "offline".
  • IMAP permet un accès simultané à une boite aux lettres (BàL) partagée.
  • IMAP est indépendant du format de stockage des messages ( MailDir, Mailbox, binaire ou base de données).
  • IMAP est un protocole en mode connecté .

Cyrus-IMAP:

Cyrus-IMAP est un MDA: Mail Delivery Agent/ Agent de Livraison de Mail.

Cyrus-IMAP est donc une implémentation du protocole IMAP.

Mais Cyrus-IMAP implémente également ces deux protocoles: POP (Post Office Protocol) et NNTP (Network News Transfert Protocol).

D’autre part, il apporte, par rapport au protocole IMAP standard, la possibilité d’authentifier des utilisateurs n’ayant pas de compte UNIX sur le serveur. Ces comptes sont appelés: Comptes virtuels.

C’est Cyrus-IMAP qui va recevoir les mails locaux, gérer les BàL des utilisateurs et servir à ces derniers leurs messages via le protocole IMAP (ou POP3 mais il ne nous intéresse pas ici).

  • Cyrus-IMAP, pour authentifier les clients, s’appuie sur SASL (que je décris plus loin) évitant ainsi la création de comptes UNIX sur le serveur.
  • Cyrus-IMAP supporte donc tous les mécanismes d’authentification proposés par le protocole d’authentification SASL, à savoir:
    • sasldb, getpwent, kerberos4, kerberos5, pam, rimap, shadow, ldap
  • Cyrus-IMAP utilise le format Maildir, plus souple et plus sûr que Mailbox.
  • Cyrus-IMAP permet de gérer une arborescence de BàL multi-niveaux.
  • Cyrus-IMAP permet, depuis la version 2.x, de gérer des noms d’utilisateurs et de répertoires contenant des points "." en remplaçant le séparateur de hiérarchie d’origine (le point, justement) par le séparateur standard d’UNIX (le "slash" /).
  • Cyrus-IMAP permet la création de filtres qui rejetteront les messages jugés indésirables.
  • Cyrus-IMAP permet l’accès aux BàL de façon très souple, lorsqu’il y a plusieurs serveurs dans le même domaine.
  • Cyrus-IMAP est aussi capable de proposer une structure permettant d’exposer des groupes usenet (nntp).
  • Cyrus-IMAP sait gérer les dossiers partagés

Installer cyrus-imap

1°/ Définir le nom de la machine

La première chose à faire est de définir un FQDN (Fully Qualified Domain Name ou Nom de Domaine Complètement Qualifié) pour la machine qui hébergera le serveur imapd Cyrus-IMAP. (reportez-vous à la règle relayhost = dans l’article Postfix: "main.cf" pour configurer tout de même votre serveur Postfix si vous n’avez pas de nom de domaine).

Bien évidemment, pour réaliser ceci, il est nécessaire de disposer d’un nom de domaine. Dans toute la suite du document, le nom de domaine est: linuxorable.fr

Il existe de nombreuses sociétés sur internet auprès desquelles on peut acheter un nom de domaine. Il est prudent de faire quelques recherches et comparaisons de prix et services proposés par ces sociétés. En effet, les prix semblent être tout à fait aléatoires !

Sous Debian, le nom pleinement qualifié de ma machine est défini dans deux fichiers: /etc/hosts et /etc/hostname
Voici donc à quoi ressemblent ces deux fichiers:

cat /etc/hosts

### etherconf DEBCONF AREA. DO NOT EDIT THIS AREA OR INSERT TEXT BEFORE IT.
 
127.0.0.1       localhost
::1             ip6-localhost ip6-loopback
fe00::0         ip6-localnet
ff00::0         ip6-mcastprefix
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
ff02::3         ip6-allhosts
 
### END OF DEBCONF AREA.  PLACE YOUR EDITS BELOW; THEY WILL BE PRESERVED.
 
82.67.66.131    euphorie  euphorie.linuxorable.fr

et:

cat /etc/hostname

euphorie.linuxorable.fr

2°/ Installer SASL et Cyrus-IMAP

Voici la liste des packages relatifs à Cyrus-IMAP que j’installe (la version 2.4 correspond aux packages testing - le 2011-05-03):

cyrus-admin-2.4
cyrus-clients-2.4
cyrus-common
cyrus-common-2.4
cyrus-imapd-2.4
cyrus-pop3d-2.4 <======== UNIQUEMENT SI ON SOUHAITE LE SUPPORT DU PROTOCOLE POP3
libauthen-sasl-cyrus-perl
libcyrus-imap-perl24

Et voici celle des packages relatifs à SASL que j’installe également:

sasl2-bin
libsasl2-2
libsasl2-modules
libauthen-sasl-perl

Ces packages (qui sont ceux de la version stable/testing - Squeeze/Wheezy de debian) s’installent bien évidemment avec la commande:

apt-get install

ou avec le l'interface graphique Synaptic.

Donc, pour ne pas avoir de message d’erreur à propos de dépendances non résolues, la première commande à lancer est celle-ci (ces 3 packages sont probablement déjà installés):

apt-get install libsasl2-2 libsasl2-modules libauthen-sasl-perl

puis on poursuit avec les packages suivants:

apt-get install cyrus-admin-2.4 libcyrus-imap-perl24 cyrus-clients-2.4 cyrus-common cyrus-common-2.4 cyrus-imapd-2.4 libauthen-sasl-cyrus-perl

et on finit avec:

apt-get install sasl2-bin postfix

Donc, au final, on doit avoir ces packages d’installés:

dpkg -l '*cyrus*' '*sasl*' '*postfix*' |grep "^ii"

ii  cyrus-admin-2.4                   2.4.8-1              Cyrus mail system - administration tools
ii  cyrus-clients-2.4                 2.4.8-1              Cyrus mail system - test clients
ii  cyrus-common                      2.4.8-1              Cyrus mail system - common files
ii  cyrus-common-2.4                  2.4.8-1              Cyrus mail system - common files
ii  cyrus-imapd-2.4                   2.4.8-1              Cyrus mail system - IMAP support
ii  libcyrus-imap-perl24              2.4.8-1              Interface to Cyrus imap client imclient library
ii  libauthen-sasl-cyrus-perl         0.13-server-8        Perl extension for Cyrus SASL library
ii  libauthen-sasl-perl               2.1500-1             Authen::SASL - SASL Authentication framework
ii  libsasl2-2                        2.1.23.dfsg1-8       Cyrus SASL - authentication abstraction library
ii  libsasl2-modules                  2.1.23.dfsg1-8       Cyrus SASL - pluggable authentication modules
ii  sasl2-bin                         2.1.23.dfsg1-8       Cyrus SASL - administration programs for SASL users database
ii  postfix                           2.8.2-1+b1           High-performance mail transport agent

... et on arrête Postfix et Cyrus-IMAP:

/etc/init.d/postfix stop

Stopping Postfix Mail Transport Agent: postfix.

/etc/init.d/cyrus-imapd stop

Stopping Cyrus IMAPd: cyrmaster.
 

:
Le démon du serveur Cyrus-IMAP se nomme donc cyrusmaster
Ce que montre également la commande ci-dessous lorsque le serveur est en fonctionnement:

ps aux|grep cyrus

root       564  0.0  0.0   7544   836 pts/4    D+   23:01   0:00 grep cyrus
cyrus    29929  0.0  0.0  47968  2432 ?        Ss   18:34   0:00 /usr/sbin/cyrmaster -d
cyrus    29940  0.0  0.0  83196  2156 ?        S    18:34   0:00 notifyd

3°/ Ce qui est installé

Le package cyrus-admin-2.4 installe LE fichier (binaire) qui permet la gestion des comptes IMAP:

dpkg -L cyrus-admin-2.4

...
/usr/bin/cyradm
...

Le package cyrus-imapd-2.4 installe ces 3 fichiers importants:

dpkg -L cyrus-imapd-2.4

...
/usr/sbin/squatter        <=== L'indexeur de mails de Cyrus pour réduire le temps de recherche.
/usr/lib/cyrus/bin/imapd  <=== le "daemon" imapd géré par le "super daemon" (inetd ou xinetd)
/etc/pam.d/imap           <=== Un fichier de configuration pour l'authentification par PAM
...

Le package sasl2-bin installe ces fichiers importants:

dpkg -L sasl2-bin

[...]
/usr/sbin/saslauthd         <==== c'est le daemon lancé par /etc/init.d/saslauthd en fin de liste
 
/usr/sbin/saslpasswd2             |
/usr/sbin/sasldblistusers2        |
/usr/sbin/saslpluginviewer        |
/usr/sbin/sasldbconverter2        |======> commandes de gestion des utilisateurs qui auront accès au serveur de mail
/usr/sbin/testsaslauthd           |
/usr/sbin/sasl-sample-server      |
 
/etc/default/saslauthd      <==== c'est le fichier de configuration du serveur d'authentification "saslauthd"
/etc/init.d/saslauthd       <==== c'est le script de démarrage de sasl2 (se lance au démarrage de Linux)
[...]
 

:
L’installation de sasl2-bin crée la base de données /etc/sasldb2. Voir plus bas la commande saslpasswd2

Mais qu’est-ce donc que sasl2 ?

Et bien c’est comme le port-salut, c’est écrit dessus:

dpkg -s sasl2-bin

[...]
Description: Cyrus SASL - administration programs for SASL users database
 This is the Cyrus SASL API implementation, version 2.1. See package
 libsasl2-2 and RFC 2222 for more information.
 .
 This package contains administration programs for the SASL users
 database and common binary files for plugin modules.
Homepage: http://cyrusimap.web.cmu.edu/
 
Pour ceux qui ne parlent pas la langue de Shakespear:
 
Description: Cyrus SASL - Programmes d'administration des bases de données d'utilisateurs SASL
 Ce programme est une implémentation de l'API SASL pour Cyrus version 2.1. Voir le package:
 libsasl2 et la RFC 2222 pour plus d'information.
 .
 Ce package contient les programmes d'administration des bases de données d'utilisateurs SASL
 et les fichiers binaires communs aux modules plugin.
Page d'accueil: http://cyrusimap.web.cmu.edu/
 

Il est important d'associer cette base de données au bon utilisateur et au bon groupe:

chown cyrus:mail /etc/sasldb2

:
Une mauvaise configuration peut conduire à l'impossibilité de créer les BàL (voir le 11°/ plus bas)

4°/ L’utilisateur cyrus

L’utilisateur cyrus, qui est l’administrateur du serveur Cyrus-IMAP, est créé lors de l’installation du package cyrus-common

apt-get install cyrus-common

...
Creating/updating cyrus user account...
L'utilisateur « cyrus» appartient déjà au groupe « sasl ».     <===== Ici, est créé l'utilisateur "cyrus"
insserv: warning: script 'ip_forwarding' missing LSB tags and overrides
cyrus-common: Creating cyrus-imapd directories...
Creating/updating cyrus control directories in /var/lib/cyrus...
Creating/updating partition spool /var/spool/cyrus/mail...     <==== Ici est créé le répertoire /cyrus/mail/ et tous les sous-répertoires
Creating/updating partition spool /var/spool/cyrus/news...     <==== Ici est créé le répertoire /cyrus/news/ et tous les sous-répertoires
Trying to optimize Cyrus partitions, edit /etc/default/cyrus-imapd to disable... <==== CE FICHIER EST LU AU DÉMARRAGE DU SERVEUR
Setting attributes to -S -j for /var/lib/cyrus...              <==== Tous les sous-répertoires de /var/spool/cyrus sont mis en écriture synchro
Setting attributes to -S -j for /var/spool/cyrus/mail...       <==== Tous les sous-répertoires de /var/spool/cyrus/mail sont mis en écriture synchro
Setting attributes to -S -j for /var/spool/cyrus/news...       <==== Tous les sous-répertoires de /var/spool/cyrus/news sont mis en écriture synchro
done.cyrus-common: Creating empty user_deny database...done.
cyrus-common: (Re)staring cyrus-imapd...Stopping Cyrus IMAPd: .
Starting Cyrus IMAPd: cyrmaster.
done.

L’installation de ce package terminée, on peut voir l’utilisateur cyrus au bas des fichiers /etc/passwd et /etc/shadow

cat /etc/passwd |grep cyrus

cyrus:x:118:8:Cyrus Mailsystem User,,,:/var/spool/cyrus:/bin/sh

et:

cat /etc/shadow |grep cyrus

cyrus:*:15093:0:99999:7:::

On peut aussi regarder à quels groupes appartient cet utilisateur:

id cyrus

uid=118(cyrus) gid=8(mail) groupes=8(mail),45(sasl)

L’administrateur de Cyrus-IMAP appartient donc aux groupes mail et sasl.

Le package cyrus-common installe par ailleurs les fichiers importants suivants:

dpkg -L cyrus-common

...
/var/spool/cyrus          <==== le répertoire dans lequel seront ajoutées les BàL de mail et de news
/var/spool/sieve          <==== le répertoire pour une administration avec websieve
...
/etc/pam.d/lmtp           <==== le fichier pour l'authentification PAM auprès du serveur de transport local "lmtp"
/etc/init.d/cyrus-imapd   <==== le script de démarrage/arrêt de Cyrus-IMAP
...

et le package cyrus-common-2.4 installe ceux-ci:

dpkg -L cyrus-common-2.4

...
/etc/cyrus.conf    <==== Le fichier de configuration des services du serveur Cyrus-IMAP
/etc/imapd.conf    <==== Le fichier de configuration du serveur imapd Cyrus-IMAP
...
/usr/sbin/cyrus           |
/usr/sbin/cyrdeliver      |
/usr/sbin/cyrmaster       |
/usr/sbin/cyrquota        |
/usr/sbin/ctl_deliver     |
/usr/sbin/ctl_cyrusdb     |
/usr/sbin/mbpath          |
/usr/sbin/cyrdump         |
/usr/sbin/chk_cyrus       |
/usr/sbin/cvt_cyrusdb     |=====> Les commandes de gestion du serveur Cyrus-IMAP
/usr/sbin/cyr_dbtool      |
/usr/sbin/cyrreconstruct  |
/usr/sbin/tls_prune       |
/usr/sbin/ctl_mboxlist    |
/usr/sbin/cyr_df          |
/usr/sbin/unexpunge       |
/usr/sbin/cyr_expire      |
/usr/sbin/arbitron        |
/usr/sbin/cyrus-makedirs  |
/usr/sbin/ipurge          |
 

5°/ Création du mot de passe de cyrus

Ceci ce fait très simplement avec la commande suivante:

saslpasswd2 cyrus

Password: xxxxxx
Again (for verification): xxxxxx

:
La commande saslpasswd2 crée une base de données /etc/sasldb2 si celle-ci n’existe pas.

6°/ La base de données /etc/sasldb2

Les noms des utilisateurs (les login en fait) créés (ainsi que leur mot de passe) sont maintenus dans la base de données /etc/sasldb2
L'utilisateur cyrus et son mot de passe sont donc contenus par cette base de données.

:
Cette base de données ne contient que les couples login/passwd (aucune BàL bien sûr).

:
Il est possible de visualiser le contenu de cette base de données avec l'éditeur hexadécimal en ligne de commande hexedit installé par le package debian du même nom.
Sous KDE, okteta est un éditeur hexadécimal graphique.
Dans tous les cas, seul l'utilisateur root sera autorisé à éditer cette base de données.

7°/ On teste que l’utilisateur cyrus existe et a bien un password

sasldblistusers2

cyrus@euphorie.linuxorable.fr: userPassword

L’utilisateur cyrus a bien un password sur la machine euphorie et il est actuellement le seul utilisateur créé.

:
la commande sasldblistusers2 renvoie la liste complète des utilisateurs qui ont un couple login/passwd dans la table de données /etc/sasldb2

8°/ On teste l’utilisateur cyrus avec son password

:
La commande testsaslauthd nécessite que le serveur d’authentification saslauthd tourne.
Or, lorsqu’il est démarré, ce serveur lit son fichier de configuration /etc/default/saslauthd
Donc, avant de lancer le serveur d’authentification saslauthd il faut, dans le fichier /etc/default/saslauthd  

1°/ que la ligne "START=yes" soit décommentée,

2°/ que MECHANISMS="sasldb" (et pas "pam" comme c’est le cas par défaut)
 Si les 2 conditions ci-dessus ne sont pas remplies, la commande testsaslauthd ci-dessous renvoie ce message d’erreur:
 connect(): No such file or directory

Pour lancer le serveur d’authentification:

/etc/init.d/saslauthd start

Starting SASL Authentication Daemon: saslauthd.

:
Par la suite, on verra qu’il est possible de configurer le fichier /etc/imapd.conf pour se passer du serveur saslauthd

Testons donc l’administrateur cyrus et son passwd:

testsaslauthd -u cyrus -p xxxxxx

0: OK "Success."

:
Si le mot de passe contient des espaces il faut le mettre entre double guillemets dans la commande ci-dessus (p "xxxx xx xxxx x")

ATTENTION - MESSAGES D’ERREUR:
Quand bien même la commande ci-dessus renvoie une réponse positive, il est possible, une fois que tout est installé (Postfix, Cyrus, Horde, IMP), d’avoir, au moment de se loguer sous IMP, par exemple, un message comme celui-ci (dans les logs de /var/log/mail.log):

cyrus/imapd[9324]: badlogin: euphorie[82.67.66.131] CRAM-MD5 [SASL(-13): user not found: no secret in database] 

ou:

cyrus/imapd[8932]: badlogin: mutualite-2-82-67-64-88.fbx.proxad.net[82.67.64.88] plaintext virginie SASL(-13):
user not found: checkpass failed

Ceci est dû à une base de données /etc/sasldb2 corrompue (alors que la commande ci-dessus fonctionne !!!).

C’est pourquoi il FAUT FAIRE RÉGULIÈREMENT DES SAUVEGARDES de cette base de données.

9°/ On teste le fonctionnement de Cyrus-IMAP

Donc on démarre le serveur Cyrus-IMAP:

/etc/init.d/cyrus-imapd start

Starting Cyrus IMAPd: cyrmaster.

... puis on le test:

telnet www.linuxorable.fr imap

Trying 88.180.9.115...
Connected to linuxorable.fr.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE AUTH=NTLM AUTH=CRAM-MD5 AUTH=DIGEST-MD5 AUTH=PLAIN AUTH=LOGIN SASL-IR] euphorie.linuxorable.fr Cyrus IMAP v2.4.8-Debian-2.4.8-1 server ready
. logout   <================== IL FAUT TAPER CETTE COMMANDE POUR FERMER LA CONNEXION
* BYE LOGOUT received
. OK Completed
Connection closed by foreign host.

Hé bien voilà ! Tout ceci ne semble annoncer que de bonnes choses à venir...

10°/ Quelques modifications à apporter

Pour l’instant, nous devons surtout prêter attention à trois lignes du fichier de configuration du serveur imapd Cyrus-IMAP: /etc/imapd.conf

  • a/ Il faut indiquer, dans ce fichier, qui sera le (ou les) administrateur(s) du serveur imapd
    Autant choisir tout de suite le compte que nous venons de créer.
    Le fichier /etc/imapd.conf contient donc une entrée (simplement la décommenter):

admins: cyrus

  • b/ Indiquer la méthode de récupération du mot de passe.
    Ce sera bien sûr saslauthd puisqu’il est le serveur d’authentification.
    Le fichier /etc/imapd.conf contient donc une entrée:

sasl_pwcheck_method: saslauthd

  • c/ Indiquer le nom complètement qualifié de l’hôte du serveur Cyrus-IMAP.
    C’est le nom qui est renvoyé par la commande hostname
    Le fichier /etc/imapd.conf contient donc une entrée (à ajouter):

servername: euphorie.linuxorable.fr

Puis on relance le serveur Cyrus-IMAP:

/etc/init.d/cyrus-imapd restart

Stopping Cyrus IMAPd: cyrmaster.
Waiting for complete shutdown...
Starting Cyrus IMAPd: cyrmaster.
 

A ce stade de la compétition vous devez réussir une connexion telnet comme vu au 8°/
Ne poursuivez pas plus avant si ce n’est pas le cas. Résolvez d’abord le problème !

11°/ Créer une BàL

Puisque tout semble fonctionner correctement, créons un compte.
Créer un compte revient à créer une BàL + un login + un mot de passe.

11.1°/ Se connecter au serveur IMAP en tant qu’administrateur

Pour que la commande ci-dessous fonctionne, et en l'état actuel de la configuration du serveur imapd, il faut:

  1. que le serveur d'authentification saslauthd tourne (voir le point 8°/)
  2. que sasl_mech_list: plain dans le fichier /etc/imapd.conf

cyradm --user cyrus localhost

Passwd: (taper le passwd créé au 4°/)
localhost>

ATTENTION - MESSAGES D’ERREUR
Il est possible que la commande ci-dessus n’aboutisse pas et renvoie ce message:

cyradm: cannot authenticate to server as user cyrus 

et entraine ce message d’erreur dans /var/log/auth.log

cyrus/imapd[2958]: unable to open Berkeley db /etc/sasldb2: Permission denied 

Cela indique qu’il faut modifier le propriétaire et le groupe propriétaire de la base de données /etc/sasldb2

chown cyrus:mail /etc/sasldb2

... puis bien sûr relancez la commande:

cyradm --user cyrus localhost

ATTENTION - MESSAGES D’ERREUR
Par la suite (pour l’instant ce ne peut être le cas) si la commande ci-dessus renvoie ce message d’erreur:

cyradm: cannot connect to server 

cela est certainement dû au fichier de configuration /etc/cyrus.conf qui lance uniquement imaps.

Or la commande cyradm ne fonctionne pas encore avec le protocole sécurisé imaps

Il faut donc configurer le fichier /etc/cyrus.conf pour que imapd tourne également mais uniquement en local, c’est à dire sur l’adresse 127.0.0.1

Pour ce faire, voir ici et mon fichier cyrus.conf qui tient compte des infos de ce site.

Une fois le fichier /etc/cyrus.conf correctement configuré, la commande:

cyradm --user cyrus euphorie

renvoie ce message d’erreur:

cyradm: cannot connect to server 

alors que la commande:

cyradm --user cyrus localhost

fonctionne nickel !

11.2°/ De quelles commandes dispose t-on ?

Une fois connecté, pour connaître toutes les commandes à notre disposition, on tape la commande suivante:

localhost>help

authenticate, login, auth         authenticate to server
chdir, cd                         change current directory
createmailbox, create, cm         create mailbox
deleteaclmailbox, deleteacl, dam  remove ACLs from mailbox
deletemailbox, delete, dm         delete mailbox
disconnect, disc                  disconnect from current server
exit, quit                        exit cyradm
help, ?                           show commands
info                              display mailbox/server metadata
listacl, lam, listaclmailbox      list ACLs on mailbox
listmailbox, lm                   list mailboxes
listquota, lq                     list quotas on specified root
listquotaroot, lqr, lqm           show quota roots and quotas for mailbox
mboxcfg, mboxconfig               configure mailbox
reconstruct                       reconstruct mailbox (if supported)
renamemailbox, rename, renm       rename (and optionally relocate) mailbox
server, servername, connect       show current server or connect to server
setaclmailbox, sam, setacl        set ACLs on mailbox
setinfo                           set server metadata
setquota, sq                      set quota on mailbox or resource
subscribe, sub                    subscribe to a mailbox
unsubscribe, unsub                unsubscribe from a mailbox
version, ver                      display version info of current server
xfermailbox, xfer                 transfer (relocate) a mailbox to a different server
localhost>

11.3°/ Existet-il déjà des BàL ?

localhost> lm
localhost>

Dans notre cas, puisqu’on débute, bien sûr, il n’y en a pas !

11.4°/ On crée donc une boite aux lettres

:
On crée une BàL portant le nom de son utilisateur. Ce n’est pas un compte UNIX que l’on crée.

localhost>cm user.test0 
localhost>

Voilà ! On vient de créer une BàL pour l’utilisateur test0 qui n’est pas encore créé et qui n’a donc pas non plus de mot de passe.

Bien garder à l’esprit que le mot «utilisateur» test0 est impropre puisque test0 ne correspondra à aucun compte UNIX. test0 est plus un login qu’un utilisateur.

Lorsqu’un utilisateur (une personne physique) peut se loguer sur un serveur sans avoir de compte UNIX, on parle de compte virtuel !

La commande ci-dessus vient de créer ceci:

cd /var/spool/cyrus/

find . -type f -atime -1

./mail/t/user/test0/cyrus.index
./mail/t/user/test0/cyrus.cache
./mail/t/user/test0/cyrus.header

:
Le répertoire /var/spool/cyrus/mail/t/user/test0 constitue le répertoire INBOX de la BàL.

Le répertoire de création des boîtes à lettres est contrôlé par la directive:

  • defaultpartition: default

du fichier /etc/imapd.conf. Cette directive renvoie directement à celle qui la suit:

  • partition-default: /var/spool/cyrus/mail
11.4.1°/ De l’importance de user

Dans la commande ci-dessus, cm user.test0, le mot user est très important.
En effet, si on omet de le mettre, alors on ne crée pas une une BàL mais un répertoire (ou une BàL) partagé ! (voir Cyrus IMAP : Plus encore... )
Le mot user permet de créer le sous-répertoire /var/spool/cyrus/mail/t/user qui contiendra le répertoire /var/spool/cyrus/mail/t/user/test0 appartenant désormais uniquement à l’utilisateur test0
Et ce répertoire /var/spool/cyrus/mail/t/user/test0 est la BàL de test0

11.5°/ On contrôle que la boite aux lettres a bien été créée

localhost>lm
user.test0 (\HasNoChildren)
localhost>

...le test est donc positif.

11.6°/ On peut éventuellement contrôler les droits de test0 sur sa BàL

localhost>lam user.test0
test0 lrswipkxtecda
localhost>

test0 a donc tous les droits. Ha ?!!

Que peuvent bien vouloir dire ces droits?
La commande ci-dessous permet de répondre à la question:

man cyradm

l   Lookup (mailbox is visible to LIST/LSUB, SUBSCRIBE mailbox)
r   Read (SELECT/EXAMINE the mailbox, perform STATUS)
s   Seen (set/clear \SEEN flag via STORE, also set \SEEN flag during APPEND/COPY/FETCH BODY[...])
w   Write flags other than \SEEN and \DELETED
i   Insert (APPEND, COPY destination)
p   Post (send mail to mailbox)
k   Create mailbox (CREATE new sub-mailboxes, parent for new mailbox in RENAME)
x   Delete mailbox (DELETE mailbox, old mailbox name in RENAME)
t   Delete messages (set/clear \DELETED flag via STORE, also set \DELETED flag during APPEND/COPY)
e   Perform EXPUNGE and expunge as part of CLOSE
c   Create and Delete mailbox (CREATE new sub-mailboxes, RENAME or DELETE mailbox)
d   Delete (STORE \DELETED, EXPUNGE)
a   Administer (SETACL/DELETEACL/GETACL/LISTRIGHTS)

11.7°/ On contrôle qu’effectivement même l’administrateur cyrus ne peut effacer cette BàL

localhost>dm user.test0
deletemailbox: Permission denied
localhost>

CQFD !

Mais c’est tout de même bizarre que l’administrateur d’un serveur ne puisse effacer ce qu’il crée ?!!
Bon, alors voyons un peu: donnons tous les droits à cyrus sur la BàL de test0 (1ère ligne ci-dessous) et testons à nouveau la commande ci-dessus (2ème ligne):

localhost>setacl user.test0 cyrus all
localhost>dm user.test0
localhost>

Haaaa..... ben ça marche ! Donc pour effacer la BàL d’un utilisateur, l’administrateur doit d’abord se donner les droits requis sur la BàL de cet utilisateur.

:
La supression d’une BàL supprime tout le répertoire de spool de l’utilisateur, c’est à dire le répertoire /var/spool/cyrus/mail/t/user/test0. Tous les mails sont donc effacés.
Même le répertoire /var/lib/cyrus/user/t/test0 est supprimé

:
La suppression d’une BàL ne supprime pas le couple login/passwd de la table de données /etc/sasldb2
Il reste donc tout à fait possible, par l’intermédiaire d’un client mail (Mozilla, Thunderbird etc...) de se loguer et de s’authentifier auprès du serveur imapd Cyrus-IMAP.
Il est même encore possible d’envoyer des mails !!!
Par contre, toute tentative de réception de mail par un utilisateur n’ayant plus de BàL se soldera par un message d’erreur dans les logs de /var/log/mail.info 

postfix/pipe[26562]: 2716D47E02: to=<test0@linuxorable.fr>, relay=cyrus, delay=1, status=bounced (data format error.
Command output: test0: Mailbox does not exist ) 

Donc pour détruire définitivement le compte de test0 on utilise cette commande (à ce stade l'utilisateur et sont mot de passe n'existent pas encore):

saslpasswd2 -d test0

...et on contrôle que le couple login/passwd associé à l’utilisateur test0 n’existe effectivement plus dans la table de données /etc/sasldb2 avec la commande sasldblistusers2

11.8°/ On crée maintenant un compte IMAP pour l’utilisateur test0

Créer un compte IMAP c’est créer un couple unique login/passwd.
Il est impératif de créer ce couple login/passwd car sinon l’utilisateur ne pourra pas accéder à sa BàL.

:
Ce couple login/passwd est celui qui sert à configurer les clients mails (Mozilla, thunderbird etc...)

Pour créer cet utilisateur test0, on commence par se déloguer du serveur ( quit) puis on utilise l’option "-c" (pour "create") de la commande saslpasswd2

localhost>quit

saslpasswd2 -c test0

Password: test0passwd 
Again (for verification): 
~#

11.9°/ On contrôle l'existence de l'utilisateur dans /etc/sasldb2

...en testant l’existence de l’utilisateur:

sasldblistusers2

cyrus@mon_serveur.mon_domaine.net: userPassword
test0@mon_serveur.mon_domaine.net: userPassword

puis en testant son login et son mot de passe:

testsaslauthd -u test0 -p test0passwd

0: OK "Success."

Bien, tout est nickel !!!

Tout est tellement nickel que vous devez d’ores et déjà pouvoir créer un compte avec votre client mail (e.g: Thunderbird) et vous loguer au serveur imapd Cyrus-IMAP.

Là encore, si tel n’est pas le cas, ne poursuivez pas plus loin et cherchez l’erreur.

Je rappel que pour l'instant il n'y a pas de serveur smtpd Postfix d'installé.

11.10°/ Exemple de compte créé avec Thunderbird

  • Non d’utilisateur: test0
  • Adresse mail: test@linuxorable.fr
  • Serveur IMAP: linuxorable.fr
  • Serveur SMTP: linuxorable.fr (mais ne tourne pas encore !!!)
  • Nom de la BàL: Ce que vous voulez

Bien. On peut passer à l’article suivant.

Il manque la gestion des quotas...

12°/ A savoir

  • La démarche à suivre pour la création d’un compte IMAP (d’une BàL) est toujours la même que l’utilisateur ait ou non un compte UNIX sur le serveur.
  • Les répertoires créés dans INBOX par les utilisateurs sont listés dans /var/spool/cyrus/mail/t/user/test0/
  • C’est le répertoire /var/spool/cyrus/mail/t/user/test0/ qui sert de répertoire INBOX
  • Chaque (sous)dossier créé par les utilisateurs contient ces trois fichiers:
    • cyrus.cache
    • cyrus.header
    • cyrus.index
  • Pour avoir un démon master verbeux, décommenter la ligne CYRUS_VERBOSE=1 dans /etc/default/cyrus-imapd
  • Mot de passe perdu: taper  ~# hexedit /etc/sasldb2 puis passer dans le champ ASCII (texte) avec la touche "Tab" puis comme sous vi faire une recherche de l’utilisateur et on trouve alors son mot de passe. Quitter avec F10.


Table des matières

  1. Installer Cyrus IMAP + SSL + LDAP
  2. Installer Cyrus IMAP
  3. Le fichier cyrus.conf
  4. Le fichier imapd.conf
  5. Le fichier imapd-local.conf
  6. Création d'une Autorité de certification et de certificats
  7. Boîte à lettres partagée
  8. Cyrus IMAP : authentification auprès d'un annuaire LDAP

Commentaires

  • cyradm : (perl) no worthy mech found

    Peut etre un debut de piste...

    Dans le fichier /etc/cyrus.conf, dans SERVICES {} :

    Si la ligne "imap cmd="imapd -U 30" listen="imap" prefork=0 maxchild=100" est decommentée, je me retrouve face au precedent probleme.

    Mais si je la commente et decommente la ligne "imaplocal cmd="imapd -C /etc/imapd-local.conf" listen="127.0.0.1:imap" prefork=0", il ne se passe rien du tout lors du l'utilisation de cyradm.

    pourtant le fichier /etc/imapd-local.conf existe et est correctement configuré et appartient, tout comme /etc/cyrus.conf a cyrus:mail

    cyradm : (perl) no worthy mech found

    Helas non, je ne l'ai pas précisé mais j'ai effectué toutes ces verifications :

    /etc/sasldb2 appartient bien a cyrus:mail

    J'ai modifié mon fichier /etc/cyrus.conf en consequence puis j'ai essayé de le remplacer par ceux proposés dans l'articles et toujours sans succés

    @CRISTAL

    Bonjour Cristal,

    La réponse à ta question n'est-elle pas traitée par le point 11.1 ?

    cyradm : (perl) no worthy mech found

    Tout d'abord un grand merci pour ce tutorial particulierement complet et detaillé.

    Cependant je me trouve face à une erreur que je n'arrive pas a resoudre.

    J'ai suivis avec attention (et succes) toutes les etapes jusqu'a la 10°, mais a la 11°, impossible de me connecter en tant que cyrus alors que "testsaslauthd" fonctionne tres bien.

    Je recois le message suivant :

    IMAP Password:
    Login failed: no mechanism available at /usr/lib/perl5/Cyrus/IMAP/Admin.pm line 119
    cyradm: cannot authenticate to server with login as cyrus

    et dans /var/log/auth/log

    cyrus cyrus/imap[14536]: unknown password verifier

    Je tourne sur une Debian 6.0, j'ai rencontré le meme pb sur une Debian 5.0

    Une idée ?