Le journal systemd est borné (SystemMaxUse)
Impose un plafond explicite au journal systemd (SystemMaxUse) pour que /var/log/journal ne puisse jamais saturer son système de fichiers. Contrôle natif pavois de la famille growth-* : tout système de fichiers que pavois découpe doit porter un mécanisme qui l'empêche de se remplir. Le contrôle vérifie la politique de rotation, jamais l'espace libre du jour, car l'espace libre est un instantané là où une borne est une garantie.
Vérifié sur l’état résolu en cours d’exécution (ex. sshd -T, sysctl, systemctl show), attrape les drop-ins et Include qu’une lecture de fichier raterait. Réserve : runtime ≠ persistance ; une valeur correcte maintenant peut ne pas survivre à un redémarrage.
Ce que vérifie Pavois
Pavois exécute systemd-analyze cat-config systemd/journald.conf et retient la dernière ligne SystemMaxUse=, c'est-à-dire la valeur effective : cette commande fusionne le fichier fournisseur, /etc/systemd/journald.conf et tous les drop-ins de journald.conf.d/, dans l'ordre de précédence de systemd. Lire seulement /etc/systemd/journald.conf manquerait un drop-in qui surcharge (ou supprime) la borne, et déclarerait conforme un journal en réalité non borné. Toute valeur de taille non vide (1G, 500M, etc.) passe : le contrôle exige qu'un plafond existe, il n'en impose pas la taille.
describe command('systemd-analyze cat-config systemd/journald.conf 2>/dev/null | grep -iE "^[[:space:]]*SystemMaxUse[[:space:]]*=" | tail -1') do
its('stdout') { should match(/=\s*\d+[KMG]?/i) }
endComment vérifier qu’elle est appliquée
Lisez la valeur résolue, puis l'occupation disque réelle :
systemd-analyze cat-config systemd/journald.conf | grep -i '^SystemMaxUse'
journalctl --disk-usage
La taille annoncée doit rester sous le plafond déclaré. journalctl --verify confirme que les fichiers de journal restent intacts après un nettoyage.
Inspecter et investiguer
journald rend compte de sa propre application : journalctl -u systemd-journald affiche des lignes comme System Journal (/var/log/journal/...) is 1.0G, max 1.0G, 0B free et Vacuuming done, freed 512.0M of archived journals. La présence de ces lignes prouve que la borne n'est pas seulement configurée mais effectivement appliquée.
Remédiation
Pavois écrit un drop-in dédié /etc/systemd/journald.conf.d/99-pavois-bounded.conf (root:root, 0644) contenant :
[Journal]
SystemMaxUse=1G
SystemKeepFree=500M
MaxRetentionSec=90day
Trois bornes complémentaires : un plafond de taille, un plancher d'espace libre que journald doit laisser au reste du système de fichiers, et un horizon de rétention. Le drop-in ne porte que ce réglage, de sorte qu'aucun autre contrôle ne peut l'écraser silencieusement. Appliquez-le avec confkit harden apply ; journald le prend en compte au systemctl restart systemd-journald.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| content | [Journal] SystemMaxUse=1G SystemKeepFree=500M MaxRetentionSec=90day |
|---|---|
| group | root |
| mode | 0644 |
| owner | root |
| path | /etc/systemd/journald.conf.d/99-pavois-bounded.conf |
| resource | file |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
La famille growth-* est née d'une panne réelle : un hôte durci par pavois s'éteignait tout seul six secondes après chaque démarrage. La combinaison max_log_file_action = keep_logs (auditd ne supprime jamais un log), une partition /var/log/audit séparée (créée par la recette pavois) et admin_space_left_action = halt avait rempli le système de fichiers (mesuré : 738 fichiers, 5,8 Go, 100 %), et tous les contrôles étaient au vert. Borner le journal applique la même leçon à /var/log. L'arbitrage est réel : au-delà du plafond, les entrées les plus anciennes sont supprimées. Dimensionnez SystemMaxUse selon votre exigence de rétention réelle et, s'il faut tout conserver, expédiez le journal vers un SIEM plutôt que de relever la borne.