Cyrus

De Cliss XXI
Révision datée du 17 décembre 2010 à 19:52 par imported>XavierBéguin (Ajout d'une procédure de déplacement de dossier IMAP d'une BAL à une autre)
Sauter à la navigation Sauter à la recherche

Quelques commandes utiles

La plupart des commandes se font dans l'interface d'administration cyradm à laquelle on accède avec la commande suivante:

# cyradm --user cyrus mydomain.tld
Password:
> 

Pour plus d'information sur les commandes disponibles dans l'environnement cyradm, reportez vous au man cyradm(1p) (vous noterez que nous avons utilisé ici les versions courtes des commandes; par exemple, lm peut aussi s'appeler listmailbox, cm createmailbox, etc.).

Suppression d'un compte

Supprimer un compte (dans l'interface d'administration cyradm):

> sam user/moncompte cyrus all
> dm user/moncompte

Liste des comptes

Lister les comptes (définis dans la base d'authentification SASL):

# sasldblistusers2

Lister les mots de passe conservés dans la base SASL:

# db4.2_dump -p /etc/sasldb2

Lister les BAL et dossiers existants dans cyrus:

  • avec l'interface cyadm, en profitant du fait que l'utilisateur cyrus a accès à toutes les boîtes aux lettres:
# cyradm --user cyrus
> lm
  • plus facilement, avec l'outil ctl_mboxlist:
$ sudo -u cyrus ctl_mboxlist -d


Créer un compte ou modifier son mot de passe

Pour créer un compte ou modifier son mot de passe dans la base SASL:

# saslpasswd2 moncompte@mondomaine.tld

En cas de création, il faut le créer aussi dans cyrus, à l'aide de cyradm:

> cm user/moncompte

Suppression d'un compte

Suppression d'un compte (seul l'accès est coupé):

# saslpasswd2 -d moncompte@mondomaine.tld

Supprimer une boîte aux lettres (attention, tous les mails qu'elle contient sont perdus):

> dm user/compte

On peut juste supprimer le dossier d'une boite de façon similaire (attention, tous les mails qu'il contient sont perdus):

> dm user/compte/DOSSIER

Réparer une boîte aux lettres

Réparer un BAL après suppression de mails en masse (Trash/Junk) - attention, les messages ont tendance à repasser en mode "non-lu":

# Supprimer les messages dans le répertoire
$ rm -f ...
# Lancer cyrreconstruct sur le dossier
$ su - cyrus
$ /usr/sbin/cyrreconstruct user/username/Trash

Convertion du format boîte aux lettres

Convertir une BAL au format Maildir (http://cyrus2dovecot.sw.fu-berlin.de/) (qui permet une consultation directe):

$ ./cyrus2dovecot --cyrus-inbox /var/spool/cyrus/mail/%h/user/%u \
    --cyrus-seen /var/lib/cyrus/user/%h/%u.seen \
    --cyrus-sub /var/lib/cyrus/user/%h/%u.sub \
    --dovecot-inbox dovecot/%u \
    username

Copier des dossiers d'une boîte à une autre

Cette solution ne nécessite pas l'arrêt du serveur IMAP.

Déplacement des répertoires

On commence par copier les répertoires représentant les dossiers du répertoire de la boîte source vers celui de la boîte de destination (adaptez le chemin des boîtes selon votre serveur):

# cp -a MONDOSSIER1 MONDOSSIER2 /var/spool/cyrus/mail/d/user/dany/

Modification des permissions

Il faut ensuite modifier les permissions pour avoir le droit de lire les dossiers déplacés. On a ici 2 possiblités:

Première solution

On supprime les fichiers cyrus.* des répertoires avant de lancer cyrreconstruct pour reconstruire un index et des ACL vierges. Les permissions existantes sont ainsi supprimées, et on laisse cyrreconstruct recréer des droits par défaut qui permettent l'accès du nouveau propriétaire. Cette solution est plus rapide puisqu'elle évite d'avoir à manipuler soi-même les ACL, mais on perd la configuration des dossiers (c'est à dire le cache et les ACLs existantes). Voici les commandes nécessaires à cette solution :

# rm -f {MONDOSSIER1,MONDOSSIER2}/cyrus.*
# sudo -u cyrus cyrreconstruct -rf user/dany
...
user/dany/MONDOSSIER1
user/dany/MONDOSSIER2
...

Seconde solution

On copie tel quel les répertoires, avec leurs fichiers cyrus.cache, cyrus.header, et cyrus.index, on lance cyrreconstruct pour intégrer les nouveaux dossier à la boîte mail, puis on utilise cyradm pour supprimer les permissions du propriétaire d'origine et ajouter celle du nouveau propriétaire. Cette seconde solution est plus correcte, et sera à privilégier (en cas de déplacement de nombreux dossiers, on peut générer dans un fichier les commandes à passer à cyradm et les lancer avec la commande perl -MCyrus::IMAP::Shell -e 'run("myscript")'). Pour cette solution, les commandes sont les suivantes:

# sudo -u cyrus cyrreconstruct -rf user/dany
discovered user.dany.MONDOSSIER1
discovered user.dany.MONDOSSIER2
...
# cyradm --user cyrus
Password:
> setaclmailbox "user/dany/MONDOSSIER1" dany lrswipcda
> listaclmailbox "user/dany/MONDOSSIER1"
samy lrswipcda
dany lrswipcda
> deleteaclmailbox "user/dany/MONDOSSIER1" samy lrswipcda
> listaclmailbox "user/dany/MONDOSSIER1"
dany lrswipcda
> setaclmailbox "user/dany/MONDOSSIER2" dany lrswipcda
> deleteaclmailbox "user/dany/MONDOSSIER2" samy lrswipcda

(ci-dessus, les commandes listaclmailbox ne servent qu'à visualiser les modifications faites par les autres commandes)

Abonnement aux dossiers copiés

Avec les deux solutions, les dossiers sont maintenant accessibles à notre utilisateur de destination, dany, mais ils n'apparaîtront pas tout seul dans sa liste des dossiers IMAP. Il devra d'abord s'abonner aux dossiers déplacés (par exemple, sous Thunderbird, dans le menu contextuel de « Courrier Entrant », il faut choisir « S'abonner » et choisir les dossiers auxquels s'abonner).

Il est possible d'effectuer cette opération sur le serveur à la place de l'utilisateur si on dispose de son mot de passe. Pour cela, on se connecte avec cyradm sous son compte et on utilise la commande « subscribe »:

cyradm --user dany
Password:
> subscribe user/dany/MONDOSSIER1"
> subscribe user/dany/MONDOSSIER2"

Vous pouvez vérifier la liste des dossiers auxquels est abonné un utilisateur avec la commande listmailbox --subscribed :

cyradm --user dany
Password:
> listmailbox --subscribed
...
user/dany/MONDOSSIER1
user/dany/MONDOSSIER2


Liens