Postfix/Cyrus-IMAP/Procmail







Introduction

Installer Cyrus-IMAP ne fut pas une tâche évidente en raison d'un manque flagrant de documentation. Ce fut, pour moi, une sorte de parcours du combattant.

J'ai commencé à utiliser Postfix-20010228p104-24, fourni par SuSE-7.3(i386) comme MTA. Par la suite, le serveur IBM-PC qui abritait ce serveur mail a eu une défaillance fatale de hardware et j'ai dû tout transférer sur le seul matériel que j'avis à ma disposition, soit sur un G3 d'Apple équipé de SuSE-7.3-PPC.

La version de Cyrus-imapd fut d'abord celle fournie par SuSE 7.3 (i386) (rpm: cyrus-imapd-2.0.16-115) et, par la suite, la version cyrus-imapd-2.0.16-31, fournie sous forme de paquet rpm par SuSE-7.3-PPC.

Fut également installé la version rpm (cyrus-sasl-1.5.24-157) de Cyrus-sasl sur le serveur IBM-PC. Sur le G3 d'Apple, la version sous forme de paquet rpm de cyrus-sasl ne fonctionnait pas correctement et j'ai installé le le logiciel sous forme «tar-ball» cyrus-sasl-1.5.27.tar.gz à décomprimer et à compiler.

.

Site Web/Mailing-Lists

Home Page de Cyrus + downloads et mailing-lists:

http://asg.web.cmu.edu/cyrus

FAQ de Cyrus-Imap:

http://cyrus-utils.sourceforge.net/faq

Configuration de Postfix

J'avais déjà utilisé Postfix sans problèmes pendant plusieurs mois pour la collecte de messages et leur délivrance via le protocole POP3. Il n'y a pas grand chose à faire pour configurer Postfix afin que ce soit Cyrus-Imap qui soit sélectionné pour récolter les messages.

[

]

Il n'y a plus rien d'autre à faire avec /etc/main.cf et /etc/master.cf.

Petit truc pour ceux qui utilisent Postfix sous SuSE et qui veulent éviter que /etc/postfix/main.cf soit modifié par SuSEconfig chaque fois cette instruction est lancée par Yast:

Editer /etc/rc.config.d

Changer la ligne:

POSTFIX_CREATECF="yes"

en

POSTFIX_CREATECF="no"

Installation de Cyrus-Sasl

Cyrus-sasl gère les mécanismes d'authentification.

Avec SuSE-7.3 (i386) le rpm de Cyrus-sasl s'installe en même temps que le rpm de Cyrus-imapd et le système est préconfiguré et prêt à l'emploi.

Avec SuSE-7.3-PPC, le paquet Cyrus-sasl est imparfait et cela nécessite une installation via la compilation manuelle des scripts d'installations. Il est possible que dans les prochaines versions de SuSE, les paquets soient meiux montés.

Installation de Cyrus-Imapd

Cette installation est plus simple car il suffit d'installer le paquet rpm via Yast de SuSE-7.3-PPC.

Néanmoins il convient de faire attention car Yast voudra absolument installer le paquet cyrus-sasl en même temps. Il faut alors refuser cette installation.

Configuration de Cyrus-IMAP

Lorsque Cyrus-IMAP est installé par SuSE, l'application est lancée par défaut par /etc/rc.config pendant le boot.

On peut éviter cela en changeant, dans /etc/rc.config, la ligne:

START_CYRUS = "yes"

en

START_CYRUS = "no"

Dans ce cas, Cyrus est lancé avec l'instruction:

host: # /usr/cyrus/bin/master &

Avec SuSE, on peut vérifier si Cyrus-IMAP tourne avec l'instruction:

host: # rccyrus status

Cyrus-IMAP lance le démon imapd dont le fichier de configuration est /etc/imapd.conf:


    configdirectory: /var/imap
    partition-default: /var/spool/imap
    admins: cyrus root
    allowanonymouslogin: no
    autocreatequota: 10000
    reject8bit: no
    quotawarn: 90
    timeout: 30
    poptimeout: 10
    dracinterval: 0
    drachost: localhost
    sasl_pwcheck_method: pam

Ce fichier de configuration est créé automatiquement lors de l'installation du fichier Rpm de cyrus-imapd fourni par SuSE-7.3(i386) et Suse-7.3-PPC.

Cyrus-IMAP travaille sur deux répertoires: /var/imap qui contient les fichiers de configuration et /var/spool/imap qui contient les boîtes aux lettres.

Tester Cyrus

On peut tester Cyrus-IMAP de deux manières:

  1. Avec telnet sur le serveur (sur une station extérieure, remplacer «localhost» par l'adresse IP du serveur IMAP)
  2. 
            host: > telnet localhost imap
            Trying ::1...
            telnet: connect to address ::1: Connection refused
            Trying 127.0.0.1...
            Connected to localhost.
            Escape character is '^]'.
            * OK lx93 Cyrus IMAP4 v2.0.16 server ready
    
            . logout
    
            
  3. Avec l'instruction Imtest (sous le compte cyrus):
  4. 
            host:~> su - cyrus
            Password:*******
            cyrus@host:~> imtest -u cyrus localhost
            C: C01 CAPABILITY
            S: * OK g3-99 Cyrus IMAP4 v2.0.16 server ready
            S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS ID NO_ATOMI
            C_RENAME UNSELECT MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES IDLE
            AUTH=ANONYMOUS AUTH=CRAM-MD5 AUTH=DIGEST-MD5 AUTH=PLAIN X-NETSCAPE
            S: C01 OK Completed
            C: A01 AUTHENTICATE DIGEST-MD5
            S: + cmVhbG09ImczLTk5Iixub25jZT0idExzS1htZXAzcHJseFFIeVlydkg3VmJsMEU1RC9uRkdoRVZ
            0TFhqVGFTZz0iLHFvcD0iYXV0aCxhdXRoLWludCxhdXRoLWNvbmYiLGNpcGhlcj0icmM0LTQwLHJjNC0
            1NixyYzQiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNz
            Please enter your password:
            C: dXNlcm5hbWU9ImN5cnVzIixyZWFsbT0iZzMtOTkiLG5vbmNlPSJ0THNLWG1lcDNwcmx4UUh5WXJ2S
            DdWYmwwRTVEL25GR2hFVnRMWGpUYVNnPSIsY25vbmNlPSJibmpiR3RoQ29rZ3NUeHd5VGhZM0F0dVhNc
            GJtWXFSTFFOTE5ITkpzZCswPSIsbmM9MDAwMDAwMDEscW9wPWF1dGgtY29uZixjaXBoZXI9InJjNCIsY
            2hhcnNldD11dGYtOCxkaWdlc3QtdXJpPSJpbWFwL2xvY2FsaG9zdCIscmVzcG9uc2U9YzcwZjA3Yzg1N
            WM5MDkyYTcwNjlmZjFhZTg0NDU1YjE=
            S: + cnNwYXV0aD1lOWQ4NTFmNTRjM2Q3MTgzMmYwOTEwYjliY2I5ODg0ZA==
            C:
            S: A01 OK Success (privacy protection)
            Authenticated.
            Security strength factor: 128
    
            . logout
            * BYE LOGOUT received
            . OK Completed
            Connection closed.
            cyrus@host:~>
    
            

    Remarques:

    1. D'abord se mettre sur le compte «cyrus».
    2. Comme on a mis le paramètre «-u cyrus», imtest redemande le mot de passe du compte «cyrus».
    3. Vient ensuite la liste des «CAPABILITIES», c'est-à-dire, entre autres, les mécanismes d'authentification de mot de passe acceptées par le logiciel cyrus-sasl (AUTH=etc).
    4. Das ce cas-ci, imtest utilise par défaut le mécanisme «DIGEST-MD5».
    5. Si on veut tester imtest avec un autre mécanisme, ajouter le paramètre -m <AUTRE MECANISME> dans l'instruction imtest comme:

      cyrus@host:~> imtest -u cyrus -m CRAM-MD5 localhost

      Cela permet de tester d'autres mécanismes d'authentification.

    6. Finalement, la ligne «Authenticated.» nous confirme que l'authentification s'est bien déroulée.
    7. Pour quitter imtest, taper cyrus@host:~>. logout en n'oubliant pas le point devant logout.

Création de boîtes aux lettres

Un administrateur "cyrus" a au préalable été créé.


host: #> useradd cyrus  (N.B.: un user "cyrus" est créé par défaut par SuSE)
host: #> passwd *****    (introduire un mot de passe)

Ensuite lancer cyradm:

host: # cyradm -u cyrus localhost

Apparaît alors la ligne de commande:

localhost>

"cyrus" a les droits d'administration comme précisé sur la ligne "admins: cyrus" de /etc/imapd.conf. "cyrus" peut alors créer des boîtes aux lettres.

Taper alors:

localhost> help

pour avoir la liste des instructions possibles.

Pour créer des boîtes au lettres, taper:

localhost> cm user.user1  (cm = createmailbox)
localhost> cm user.user2
etc ...

La boîte aux lettres "user.usern" est celle où le user "usern" recevra ses mails et cette boîte aux lettres apparaîtra au user sous l'appellation "INBOX".

Quittons maintenant cyradm avec:

localhost> exit

L'avantage de Cyrus-IMAP est qu'on ne doit pas créer d'utilisateurs Unix. La reconnaissance et l'authentification peuvent se faire via Sasl. Créons donc des mots de passe sasl:

host: #> saslpasswd user1
host: #> saslpasswd user2
etc ...

Dès qu'un user a un mot de passe, il peut se créer des boîtes aux lettres personnelles rattachées à sa boîte au lettre "INBOX".

Pour cela, il doit taper, sur le serveur:

home: # cyradm -u usern localhost
passwd: ****

Ensuite si on tape:

localhost> lm

(lm = list mailboxes)

Apparaît alors toutes les boîtes aux lettres de usern:

localhost> INBOX

usern peut s'ajouter des boîtes aux lettres personnelles:

localhost> cm INBOX.private

Si on tape alors:

localhost> lm

On a:

INBOX
INBOX.private
localhost>

Une boîte aux lettres personnelle peut être créée à partir de certains MUA (Mail User Agent) comme «Eudora».

Suppression de boîtes aux lettres

Pour que Cyrus puisse supprimer une boîte aux lettres ou un utilisateur une boîte aux lettres personnelle, il faut au préalable ajouter le droit ACL "c" à Cyrus ou à l'utilisateur (voir plus bas).

Cela une fois fait, l'adminstrateur cyrus tape:

localhost> dm user.usern.private

Pour l'utilisateur usern et sa boîte personnelle private.

Un utilisateur peut également faire des suppressions dans ses propres boîtes aux lettres, taper:

localhost> dm INBOX.private

localhost> exit

Droits ACL (Access Control List)

L'accès à chaque boîte aux lettres est contrôlée par les Listes de Contrôle d'Accès (ACL) qui spécifient les utilisateurs qui ont les permissions, pour chaque utilisateur, pour accéder aux boîtes aux lettres.

Les droits d'accès ACL sont les suivants:


l
   lookup - le user peut voir que la boîte existe.
r
   read - le user peut lire la boîte.
s
   seen - les "flags" "seen" et "recent" sont conservés pour le user.
w
   write - le user peut modifier d'autres flags que "seen" et "deleted".
i
   insert - le user peut insérer des nouveaux messages dans la boîte aux lettres.
p
   post -
c
   create - le user peut créer des nouvelles "sous-boîtes" ou supprimer ou renommer
   la boîte courante. L'administrateur cyrus n'a pas ces droits par défaut et
   il doit se les attribuer.
d
   delete - le user peut stocker le "flag" "deleted" et réaliser des suppressions via
   son MUA.
a
   administer - le user peut changer l'ACL de la boîte aux lettres.

Pour contrôler ou modifier les droits d'accès de chaque utilisateur, on utilise la commande setaclmailbox ou sam:

Taper:

host: #> su - cyrus   (on se met sous le compte «cyrus») host: #> Password: *****
cyrus@host: #> cyradm -u cyrus localhost
Please enter your password: *****
localhost> lam user.usern
anyone p usern lrswipcda

On voit ici que l'utilisateur anyone à les droits «p» tandis que l'utisateur usern a tous les droits pour la boîte aux lettres user.usern.

Chose importante et qui coince tous les Newbies ou presque: l'administrateur cyrus n'a pas le droit de supprimer et de renommer une boîte aux lettres. Pour se donner ce droit, taper:

home #> cyradm -u cyrus localhost
passwd: ****
localhost> sam user.usern cyrus c

L'administrateur "cyrus" a ainsi les droits "c" sur la boîte aux lettres user.usern

L'administrateur cité sur la ligne "admins" de /etc/imapd.conf (ici cyrus) a les droits "a" et "l" par défaut sur toutes les boîtes aux lettres.

Lorsqu'une boîte aux lettres est créée, elle acquiert les droits ACL de la boîte aux lettres parente. La boîte aux lettres user.user1.private acquiert les droits de user.user1. Lorsqu'une nouvelle boîte est créée et qu'elle n'a pas de boîte parente, elle acquiert par défaut tous les droits ACL (lrsipwcda), sauf si indication contraire dans /etc/imapd.conf.

Si on tape maintenant:

localhost> lam user.usern

on a

usern rights  lrswipcda
cyrus rights  c

Le user a tous les droits par défaut à sa création.

Pour changer l'ACL d'un user, taper par exemple, sous admin cyrus:

localhost> sam user.usern usern lrsipcd

Le user "usern" peut ainsi voir, lire sa boîte aux lettres user.usern, créer une boîte aux lettres personnelle et supprimer des mails de sa boîte aux lettres.

Pour supprimer une boîte aux lettres, l'administrateur cyrus doît taper:

home: # cyradmin -u cyrus localhost
passwd: ****
localhost> dm user.usern

L'administrateur peut donner certains droits sur la boîte aux lettres user.user1 au "user" user2 (user1 peut faire de même sur sa propre boîte aux lettres INBOX s'il a le droit ACL "a":

home: # cyradmin -u cyrus localhost
(ou home: # cyradmin -u user1 localhost)
passwd: ****
localhost>sam user.user1 user2 lr
(ou localhost>sam INBOX user2 lr)

Le user2 acquiert ainsi le droit de lire la boîte aux lettres user.user1.