Outils pour utilisateurs

Outils du site


cyrus

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

cyrus [2018/07/03 16:22] (Version actuelle)
Ligne 1: Ligne 1:
 +
 +{{tag>​mail imap}}
 +===== Cyrus =====
 +
 +==== Introduction ====
 +
 +Installation d'un simple serveur imap, avec gestion des comptes utilisateurs virtuel via ldap
 +
 +postfix + [[:​cyrus|cyrus]] + ldap
 +
 +ref: http://​www.jopa.fr/​index.php/​2009/​07/​28/​index.php/​2009/​02/​03/​installation-dun-serveur-mail-brique-par-brique-openldap-postfix-cyrus-imap-tls-sasl-spamassassin-amavis-etc/​
 +
 +==== 1. installation slapd et ldap-utils ====
 +
 +création d'un domaine simple - voir le fichier ldif ci-joint.
 +
 +
 +Ne pas oublier /​etc/​ldap/​ldap.conf
 +
 + ==== 2. sasl ====
 +
 +installer //​sasl2-bin//​
 +
 +Il faut installer et lire la doc (cyrus-sasl2-doc) et le fichier ///​usr/​share/​doc/​cyrus-sasl2-doc/​LDAP_SASLAUTHD.gz//​
 +
 +Et ça va beaucoup mieux.
 +
 +Le fichier /​etc/​saslauthd.conf ressemble à ceci;
 +<​code>​
 +   ​ldap_servers:​ ldap://​localhost/​
 +   ​ldap_search_base:​ ou=comptes,​dc=nodomain
 +</​code>​
 +
 +Ne pas oublier de tester l'​authentification:​
 +<​code>​
 +testsaslauthd -u sophie -p s1234
 +</​code>​
 +
 +au besoin, //stracer// cette commande et garder un œil sur les logs ldap.
 +
 +==== 3. cyrus ====
 +
 +installer[[:​cyrus| ]]
 +
 +modifier le fichier /​etc/​imapd.conf:​
 +<​code>​
 +   ​sasl_mech_list:​ PLAIN
 +   ​sasl_pwcheck_method:​ saslauthd
 +   ​admins:​ tom
 +</​code>​
 +
 +Rajouter la ligne suivante dans le fichier ///​etc/​postfix/​master.cf//:​
 +<​code>​
 +cyrus unix    -       ​n ​      ​n ​      ​- ​      ​- ​      ​pipe ​   flags=R user=cyrus argv=/​usr/​sbin/​cyrdeliver -e -m ${extension} ${user} ​
 +</​code>​
 +
 +Avec cyradm et le compte admin défini ci-dessus, créer les boites mails des utilisateurs. ''​Elles doivent correspondre ​ à'​luid ldap de l'​utilisateur''​.
 +
 +La principale limitation de cet exemple réside dans l'​obligation d'​avoir une correspondance stricte entre uid utilisateur,​ nom de bal et adresse de l'​utilisateur.
 +
 +En allant un peu plus loin, on peut imaginer :
 +
 +  * L'​ajout d'un ou de plusieurs attributs "//​mail//"​ correspondant aux différentes adresses de l'​utilisateur.
 +  * l'​ajout d'un attribut "//​maildrop//"​ correspondant à la boite mail existante.
 +  * éventuellement plusieurs "//​maildrop//"​ permettant de forwarder des adresses vers l'​exterieur.
 +
 +Il faut inclure le schema //​authldap//,​ fournissant l'​attribut maildrop et mail
 +
 +Un utilisateur ressemblera à ça:
 +<​code>​
 +   dn: uid=tom,​ou=comptes,​dc=boulot,​dc=fr
 +   ​objectClass:​ top
 +   ​objectClass:​ inetOrgPerson
 +   ​objectclass:​ courierMailAlias
 +   uid: tom
 +   sn: constans
 +   cn: Thomas Constans
 +   mail: toto@opendoor.fr
 +   mail: thomas.constans@opendoor.fr
 +   ​maildrop:​ tom@opendoor.fr
 +   ​userPassword::​ e1NTSF9Trt21K1trtdIVZK0loJbFytjlQDcMyrWlgdazamkdpxQMng=
 +</​code>​
 +
 +dans //main.cf// on rajout les infos suivantes:
 +<​code>​
 +# verification des destinataires - recherche sur le mail, renvoie l'uid
 +virtual_mailbox_maps = ldap:/​etc/​postfix/​ldap-accounts.cf
 +
 +# alias - recherche sur le mail, renvoie maildrop
 +virtual_alias_maps = ldap:/​etc/​postfix/​ldap-aliases.cf
 +
 +# Agent de transport local :[[:cyrus| ]]
 +local_transport =[[:cyrus| ]]
 +virtual_transport =[[:cyrus| ]]
 +mailbox_transport =[[:cyrus| ]]
 +</​code>​
 +
 + ==== SSL/TLS ====
 +
 +  * Créer les certificats
 +  * Les rendre accessibles dans une répertoire (par exemple //​[browser:/​config/​adrenaline/​certs /​etc/​certs]//​)
 +  * Activer le service (décommenter la ligne correspondante) dans //​[browser:/​config/​adrenaline/​cyrus.conf /​etc/​cyrus.conf]//​.
 +  * Rajouter les directives suivantes dans //​[browser:/​config/​adrenaline/​imapd.conf /​etc/​imapd.conf]//:​
 +<​code>​
 +tls_ca_file
 +tls_cert_file
 +tls_key_file
 +</​code>​
 +  * Ouvrez le parefeu (port TCP993)
 +  * relancez le parefeu et [[:​cyrus|cyrus]].
 +
 + ==== Administration ====
 +
 + === Sauvegarde ===
 +Il suffit de copier la partition
 +
 + === restauration / renommage ===
 +
 +  - s'​assurer d'​avoir une sauvegarde.
 +  - s'​assurer qu'​aucun mail ne sera reçu pendant l'​opération
 +  - supprimer la boîte via cyradm
 +  - recréer la boîte via cyradm
 +  - reconstruire l'​index:​
 +<​code>​
 +/​usr/​lib/​cyrus-imapd/​reconstruct -f  user.MAILBOX
 +</​code>​
 +
 + ==== Vieille page main.cyrus: ====
 +
 +
 +2010.07.16: quelques info ok, mais la page la plus à jour est [[:​wiki|wiki]]:​[[:​cyrus|Cyrus]] .
 + 
 +
 +=====  Cyrus Imap: =====
 + ==== description:​ ====
 +Installation du serveur imap "​[[:​cyrus|cyrus]]"​ authentifiant les utilisateurs via ldap.
 +
 + ==== plateforme: ====
 +Debian
 +
 + ==== Prérequis: ====
 +Une authentification des utilisateurs via ldap fonctionnelle ( cf [pam-ldap] ).
 +
 + ==== Bibliographie principale: ====
 +[http://​www.wlug.org.nz/​CyrusNotes]
 +
 + ==== Installation:​ ====
 +  ​
 +<​code>​
 +
 +apt-get install [[:​cyrus|cyrus]]21-admin [[:​cyrus|cyrus]]21-common [[:​cyrus|cyrus]]21-imapd libsasl2-modules libsasl2 sasl2-bin
 +
 +</​code>​
 +
 +  * éditer /​etc/​cyrus.conf et vérifier les services à  lancer.
 +  * éditer /​etc/​imapd.conf les lignes suivantes ou récupérer le fichier adhoc dans le repertoire « conf »:
 +  ​
 +<​code>​
 +
 +loginrealms:​ DOMAIN
 +configdirectory:​ /​var/​lib/​cyrus
 +defaultpartition:​ default
 +partition-default:​ /​var/​spool/​cyrus/​mail
 +partition-news:​ /​var/​spool/​cyrus/​news
 +newsspool: /​var/​spool/​news
 +altnamespace:​ no
 +unixhierarchysep:​ no
 +admins: root[[:​cyrus| ]]
 +sieve_admins:​[[:​cyrus| ]]
 +allowanonymouslogin:​ no
 +popminpoll: 1
 +autocreatequota:​ 0
 +umask: 077
 +sieveusehomedir:​ false
 +sievedir: /​var/​spool/​sieve
 +hashimapspool:​ true
 +allowplaintext:​ yes
 +sasl_mech_list:​ PLAIN
 +sasl_minimum_layer:​ 0
 +sasl_pwcheck_method:​ saslauthd pwcheck
 +sasl_auto_transition:​ no
 +tls_ca_path:​ /​etc/​ssl/​certs
 +tls_session_timeout:​ 1440
 +tls_cipher_list:​ TLSv1:​SSLv3:​SSLv2:​ = NULL:​!EXPORT:​!DES:​!LOW:​@STRENGTH =
 +lmtpsocket: /​var/​run/​cyrus/​socket/​lmtp
 +idlesocket: /​var/​run/​cyrus/​socket/​idle
 +notifysocket:​ /​var/​run/​cyrus/​socket/​notify
 +
 +</​code>​
 +
 +  * vérifier /​etc/​pam.d/​imap:​
 +  ​
 +<​code>​
 +
 +@include common-auth
 +@include common-account
 +
 +</​code>​
 +
 +  * mettre **STARTUP** à  **yes** dans ///​etc/​default/​saslauthd//​
 +  * Lancer les services:
 +  ​
 +<​code>​
 +
 +/​etc/​init.d/​saslauthd start && /​etc/​init.d/​cyrus21 start
 +
 +</​code>​
 +
 +  * vérifier que l'​authentification fonctionne:
 +  ​
 +<​code>​
 +
 +   # testsaslauthd -u cyrus -p tu
 +0: OK "​Success."​
 +
 +</​code>​
 +
 + ​===== ​ Administration =====
 +la configuration de base de [[:​cyrus|cyrus]] se fait via une interface shell:
 +  ​
 +<​code>​
 +
 +# cyradm -u //user// localhost
 +
 +</​code>​
 +
 + ==== création d'une mailbox: ====
 +  ​
 +<​code>​
 +
 +# cm user.nom_d'​utilisateur
 +
 +</​code>​
 +
 +nom_d'​utilisateur doit "​exister"​ sur le serveur, en local ou via ldap.
 +NE PAS OUBLIER LE PREFIX « user. »
 +
 + ==== Déplacer / renommer une mailbox ====
 +
 +  - à l'aide de cyradm, créer la boîte et positionner les acl
 +  - dans /​var/​spool/​imap,​ déplacer le répertoire correspondant (cd /​var/​spool/​imap/​m/​user ; mv mathieu mathieu_chevalier)
 +  - reconstruire la boîte: /​usr/​lib/​cyrus-imapd/​reconstruct -fr user.mathieu_chevalier
 + ==== mise en place des acl: ====
 +les acl par défaut sont lrs ( read ) pour tout le monde
 +  ​
 +<​code>​
 +
 +acl de base:
 +none
 +read lrs
 +post lrsp
 +append lrsip
 +write lrswipcd
 +all lrswipcda
 +
 +</​code>​
 +
 + ==== mise en place des acl sur une mailbox: ====
 +  ​
 +<​code>​
 +
 +# sam tconstans toto read tconstans all anyone none
 +
 +</​code>​
 +
 + ==== lister les acl sur une mailbox donnée: ====
 +  ​
 +<​code>​
 +
 +# lam tconstans
 + toto lrs
 + ​tconstans lrswipcda
 +
 +</​code>​
 +
 +
 + ==== suppresion des acl sur une mail box donnée: ====
 +  ​
 +<​code>​
 +
 +#dam tconstans tconstans toto
 +#lam tconstans
 + ​anyone lrs
 +
 +</​code>​
 +
 + ==== créer un **dossier partager:** ====
 +  ​
 +<​code>​
 +
 +# cm nom_du_dossier_partagé
 +# sam nom_du_dossier_partagé anyone lrs pour lecture-seule
 + lrsw pour lecture-écriture
 +
 +</​code>​
 +
 +il est souhaitable d'​attribuer tous les droits à  au moins un utilisateur pour faciliter le nettoyage de ce dossier.
 +
 + ==== mettre en place des quotas ====
 +unité: ko
 +  ​
 +<​code>​
 +
 +# sq [[:​clients:​sgmo:​partage|partage]] 500 (ko)
 +
 +</​code>​
 +
 +
 + ==== vérification des quotas: ====
 +  ​
 +<​code>​
 +
 +# lq[[:​clients:​sgmo:​partage| ]]
 + ​STORAGE 88/500 (17.6%)
 +
 +</​code>​
 +
 + ==== suppresion d'une boite aux lettre: ====
 +le truc c'est que par défaut seul le proprio de la boite dispose des droits adéquats donc:
 +  ​
 +<​code>​
 +
 +# sam mailbox_id cyrus all // on attribue tous les droits à  l'​utilisateur cyrus
 +# dm mailbox_id
 +
 +</​code>​
 +
 + ​===== ​ Conclusion: =====
 +Et voila un magnifique serveur imap | pop qu'il ne vous reste plus qu'​à ​ intégrer avec [postfix]
 +
 + ===== Annexes: =====
 +**script de création de boites au lettre:**
 +  ​
 +<​code>​
 +
 +# = /​usr/​bin/​perl -w =
 +
 +use [[:​cyrus|Cyrus]]::​IMAP::​Admin ;
 +use strict ;
 +
 +#
 +# CONFIGURATION PARAMS
 +#
 +my $cyrus_server = "​localhost"​ ;
 +my $cyrus_user = "​root"​ ;
 +my $cyrus_pass = undef ;
 +my $newuser ;
 +my $mailbox ;
 +
 +
 +my $SEP = '​.'​ ; # separateur -  peut etre / ou .
 +my $mechanism = "​login"​ ;
 +
 +#
 +# EOC
 +#
 +
 +if (  = $ARGV[0] ) =
 +{
 +  die "​Usage:​ $0 nom d'​utilisateur\n"​ ;
 +}
 +else
 +{
 +  $newuser = "​$ARGV[0]"​ ;
 +}
 +sub askPass {
 +   print "​Please enter $cyrus_user\'​s password:"​ ;
 +   ​system "/​bin/​stty -echo" if (-t STDIN);
 +   ​chomp( $cyrus_pass=<​STDIN>​);​
 +   ​system "/​bin/​stty echo" if (-t STDIN);
 +   print "​\n";​
 +}
 +
 +sub createMailbox
 +{
 +  my ( $user, $subfolder ) = @_ ;
 +
 +  my $cyrus = Cyrus::​IMAP::​Admin->​new( $cyrus_server ) ;
 +  $cyrus->​authenticate( $mechanism,'​imap','',​$cyrus_user,'​0','​10000',​$cyrus_pass ) ;
 +
 +  if ( $subfolder eq "​INBOX"​ )
 +  {
 +    $mailbox = "​user"​ . "​$SEP"​ . $user ;
 +  }
 +  else
 +  {
 +    $mailbox = "​user"​ . "​$SEP"​ . $user . "​$SEP"​. $subfolder ;
 +  }
 +
 +  $cyrus->​create( $mailbox ) ;
 +  if ( $cyrus->​error )
 +  {
 +    print STDERR "​Error:​ ", $mailbox,"​ ", $cyrus->​error,​ "​\n"​ ;
 +  }
 +  else
 +  {
 +    print "​Created Mailbox: $mailbox \n" ;
 +  }
 +
 +}
 +
 +sub setQuota
 +{
 +  my ( $user, $quota_size ) = @_ ;
 +
 +  my $cyrus = Cyrus::​IMAP::​Admin->​new( $cyrus_server ) ;
 +  $cyrus->​authenticate( $mechanism,'​imap','',​$cyrus_user,'​0','​10000',​$cyrus_pass ) ;
 +
 +  $mailbox = "​user"​ . "​$SEP"​ . $user ;
 +  $cyrus->​setquota( $mailbox,"​STORAGE",​$quota_size ) ;
 +  if ( $cyrus->​error )
 +  {
 +    print STDERR "​Error:​ ", $mailbox,"​ ", $cyrus->​error,​ "​\n"​ ;
 +  }
 +  else
 +  {
 +    print "​Setting Quota: $mailbox at $quota_size \n" ;
 +  }
 +  $cyrus->​setacl( $mailbox, $cyrus_user,​ "​all"​ ) ;
 +
 +}
 +
 +print "​Adding User: ", $newuser, "​\n"​ ;
 +askPass() ;
 +createMailbox( $newuser,'​INBOX'​ ) ;
 +createMailbox( $newuser,'​Sent'​ ) ;
 +createMailbox( $newuser,'​Trash'​ ) ;
 +createMailbox( $newuser,'​Drafts'​ ) ;
 +createMailbox( $newuser,'​Spams'​ ) ;
 +
 +if ( $ARGV[1] ) { setQuota( $newuser, $ARGV[1] ) ;}
 +
 +</​code>​
 +
 +==== Sieve ====
 +
 +Résultat des expérimentations (rapides) de 2018-02:
 +
 +Installation de l'​extension thunderbird,​ l'​accès au serveur sieve se fait sans soucis? La mise au point d'un script se fait bien, il apparaît bien coté serveur, mais il semble ignoré (peut-être parce que l'on utilise procmail ?)
 +
 +On n'est pas allé plus loin
 +
 + ​===== ​ Troubleshooting:​ =====
 + ==== SQUAT Failed ====
 +le message "SQUAT failed to open index file" dans /​var/​log/​mail.log vous enerve ? [[BR]]
 +Essayer la commande suivante:
 +  ​
 +<​code>​
 +
 +# for user in user1 user2 ... ; do squatter -r user.${user} ; done
 +
 +</​code>​
 +
 + ==== createmailbox:​ permission denied"​ ou "perl: No worthy mechs found" ====
 +vérifier la ligne "​admins"​ dans /​etc/​imapd.conf"​. [[BR]]
 +séparer les différentes valeurs par des espaces. Pas de virgule, deux-points,​ etc  ===  ===
 +
 +
 +# vim: set filetype=dokuwiki:​
  
cyrus.txt · Dernière modification: 2018/07/03 16:22 (modification externe)