| Postfix/Cyrus-IMAP/Procmail |
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.
.Home Page de Cyrus + downloads et mailing-lists:
FAQ de Cyrus-Imap:
http://cyrus-utils.sourceforge.net/faq
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.
[
- Editer /etc/postfix/main.cf
- Commenter la ligne suivante:
# mail_spool_directory = /var/spool/mail (ou /var/mail)
- Décommenter ou créer la ligne suivante:
mailbox_transport = cyrusp
Cette dernière ligne spécifie le mode de transport à utiliser parmi les options de /etc/postfix/master.cf (voir plus bas).
- /etc/postfix/master.cf
Dans ce script, la ligne suivante doit être rajoutée lorsqu'on utilise Procmail comme filtre de mail. Les messages sont d'abord transmis à Procmail, qui les filtre, par le MTA Postfix, et, après filtrage, Procmail les renvoit à Cyrus-IMAP qui les place dans les boïtes aux lettres adéquates avec l'instruction /usr/cyrus/bin/deliver.
cyrusp unix - n n - - pipe flags=R user=cyrus argv=/usr/cyrus/bin/deliver -e -m ${extension} ${user}]
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"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.
Aller à l'url http://www.sleepycat.com/update/index.html où les versions de BekeleyDB peuvent être téléchargées. Celle qui fonctionne sans problèmes en juillet 2002 est la version 3.1.17 mais la version 4.1.14 (non testée) existe déjà.
Télécharger cette version et la place dans le répertoire /usr/local
Taper:
host #> tar xzvf db-3.1.17.tar.gz
puis
host/.. #> cd db-3.1.17
host/.. #> cd build-unix
Taper:
host/.. #> ../configure/configure (les deux points au début sont importants!!)
Taper:
make
Se mettre en root et taper ensuite:
host/.. #> su
host/.. #> password: ******
host/.. #> make install
host/.. #> exit (pour quitter root)
Tout cela est expliqué dans /usr/local/db-3.1.17/docs/index.html.
La base de donnée s'installe dans le répertoire /usr/local/BerkeleyDB.3.1
cyrus-sasl-1.5.27 est installé dans le répertoire /usr/local.
Taper:
host #> cd /usr/local
/usr/local #> tar xzvf cyrus-sasl-1.5.27
/usr/local #> cd cyrus-sasl-1.5.27
/usr/local/cyrus-sasl-1.5.27 #> ./configure --disable-krb4 --with-dblib=berkeley \
--with-pwcheck-method=unix --with-pwcheck
/usr/local/cyrus-sasl-1.5.27 #> make
/usr/local/cyrus-sasl-1.5.27 #> su (on passe en root)
/usr/local/cyrus-sasl-1.5.27 #> password: ******
/usr/local/cyrus-sasl-1.5.27 #> make install
/usr/local/cyrus-sasl-1.5.27 #> exit (on quitte root)
Si tout va bien, cyrus-sasl est maintenant installé.
Pour entrer un mot de passe avec le protocole sasl, taper:
host #> saslpasswd
Vérifier que le fichier /etc/sasldb existe bien. Il doit normalement être installé par défaut.
Pour voir la liste des utilisateurs avec mots de passe, taper:
host #> sasldblistusers
Toutes les commandes de Cyrus-SASL se trouvent dans /usr/local/sbin.
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.
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.
On peut tester Cyrus-IMAP de deux manières:
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
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:
cyrus@host:~> imtest -u cyrus -m CRAM-MD5 localhost
Cela permet de tester d'autres mécanismes d'authentification.
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».
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
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.
localhost> sam user.usern usern lrs
ou
localhost> sam user.usern usern read
Vérifier avec:
localhost> lam user.usernlocalhost> sam user.usern usern lrswipcd
ou
localhost> sam user.usern usern write
localhost> sam user.usern usern lrswipcd
ou
localhost> sam user.usern usern write
localhost> sam user.usern usern lrswipcd
ou
localhost> sam user.usern usern write
localhost> sam user.user1 user2 lrs
ou
localhost> sam user.user1 user2 read
Cela signifie que l'utilisateur user2 pourra avoir accès en lecture, et en lecture seule, à la boîte aux lettres de user1. On peut ajouter d'autres droits d'accès. Cela est pratique lorsque plusieurs membres d'un groupe souhaitent avoir accès en lecture à un adresse e-mail générale qui ne serait gérée que par une seule personne.
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.