79. pepsi-quota¶
Gérer et réconcilier les quotas de boîtes aux lettres par compte.
79.1. Rôle¶
pepsi-quota est l’interface de l’opérateur vers la table pepsi.mailbox_quota : les limites de boîte aux lettres par compte que pepsi-stage-relay-to-maildir applique, et la comptabilité d’occupation dont cette étape et pepsi-ingress se servent toutes deux. Ce n’est pas une étape.
Chaque ligne est indexée sur le login passwd, non sur une adresse e-mail et non sur un uid. Un login est ce à quoi pepsi-ingress peut comparer un destinataire d’enveloppe au moment du RCPT sans résoudre d’alias — ce qu’il ne doit pas faire, et ne peut pas, puisque la table d’alias et la base passwd appartiennent à l’étape de remise — et cela reste une seule ligne lorsque plusieurs adresses aboutissent à une même boîte aux lettres.
Référence : pepsi-quota(1).
79.2. Sous-commandes¶
set LOGIN SIZE [
--messagesN] — donner à un compte sa propre limite (2G,500M, un nombre d’octets, ounonepour explicitement illimité, ce qui est la manière d’exempter un compte unique d’un quota valable pour tout le site).unset LOGIN — abandonner la limite propre au compte, de sorte qu’il hérite de nouveau de la valeur par défaut du site. (Ce n’est pas la même chose que
set … none.)show LOGIN / list [
--full] — les limites et l’utilisation d’un compte, ou de chaque compte comptabilisé, mesure la plus ancienne en premier (--fullrestreint la liste à ceux qui sont à leur limite ou au-delà).measure LOGIN — remesurer une boîte aux lettres maintenant.
reconcile [
--all] — remesurer les comptes qui sont à leur limite ou au-delà ;--allremesure aussi ceux dont la mesure est simplement périmée.remove LOGIN — oublier les limites du compte et sa comptabilité ; la remise suivante recrée la ligne.
79.3. Trois couches¶
- Politique
[pepsi] MAILBOX_QUOTAest la valeur par défaut du site (son absence signifie illimité), redéfinie par compte viapepsi-quota set, et resserrée davantage par la limite propre du noyau là où le système de fichiers en applique une.- Mesure
Seul pepsi-helper-maildir-writer(1) peut en prendre une : c’est l’unique processus qui devient l’utilisateur, et un
Maildirest en mode0700.measureetreconcilel’exécutent ; rien d’autre ici ne touche à une boîte aux lettres.- Estimation
Les compteurs
used_* + since_*. Les remises effectuées par Pepsi s’y ajoutent et rien ne soustrait jamais, car rien n’indique à Pepsi qu’un utilisateur supprime du courrier par IMAP.
L’estimation est donc une borne supérieure de l’occupation réelle, ce qui la rend sûre comme déclencheur — « ce compte pourrait-il être proche de sa limite ? alors mesurer » — et dangereuse comme verdict. D’où la règle : rien ne refuse un message sur une estimation, seulement sur une mesure.
79.4. Pourquoi reconcile existe¶
Un compte à sa limite est refusé au RCPT par pepsi-ingress. Supposons que son propriétaire vide ensuite la boîte par IMAP. Rien ne l’indique à Pepsi — et parce que chaque message est refusé, aucune remise ne s’exécute jamais pour prendre une mesure récente. La boîte aux lettres resterait fermée à jamais.
Deux choses l’empêchent, et les deux sont nécessaires. pepsi-ingress ne refuse que sur une mesure plus récente que [pepsi] MAILBOX_QUOTA_MAX_AGE (15 minutes par défaut), de sorte qu’un chiffre périmé laisse passer le message et que le chemin de remise regarde à nouveau. Et pepsi-quota reconcile remesure les comptes qui sont à leur limite — un balayage peu coûteux précisément parce qu’il ne concerne que ceux-là. Le paquet le lance depuis pepsi-quota-reconcile.timer (toutes les dix minutes, requis via Wants= par pepsi.target) ; n’ajoutez pas de tâche cron à côté. Sur une installation depuis les sources sans systemd, l’équivalent est
*/10 * * * * pepsi pepsi-quota -c /etc/pepsi/pepsi.conf reconcile
79.5. Privilèges¶
Installé set-group-id sur pepsi-maildir (mode 2550, propriétaire pepsi:pepsi-maildir — exécution réservée au propriétaire, de sorte qu’aucun autre utilisateur local n’atteint le bit setgid), pour la même raison que pepsi-stage-relay-to-maildir : measure/reconcile exécutent le helper 4750 root:pepsi-maildir, et le compte de service pepsi n’est délibérément pas membre de ce groupe. Lancé en tant que root, il descend vers pepsi avant de se connecter à la base de données, en conservant ce seul groupe à travers l’abandon — de sorte que l’outil se comporte à la main comme depuis son timer, où le bit setgid fournit le groupe et où aucun abandon n’a lieu.
79.6. Voir aussi¶
pepsi-stage-relay-to-maildir, pepsi-ingress, pepsi-status, pepsi-quota(1), pepsi-helper-maildir-writer(1), pepsi.conf(5).