audit : la piste sort de la machine auditee, et quelqu un regarde
auditd tournait, onze regles etaient armees, et rien de tout cela ne servait
a grand-chose. Quatre manques, mesures avant d etre combles.
1. Rien ne sortait. Alloy ne contenait aucune reference a l audit et les cinq
greffons etaient inactifs. Il lit maintenant audit.log et le pousse vers Loki
— sans toucher une permission, alloy etant deja dans le groupe adm. On ecarte
le greffon syslog : journald limite le debit, et une rafale d evenements est
exactement le moment qui compte.
2. Aucune sonde. Elle mesure la COLLECTE, pas l armement : le nombre de
regles est precisement le chiffre qui restait bon pendant la panne du
2026-08-30. Il part en perfdata, jamais en verdict.
3. Retention non declaree. Mesuree a 4,6 Mo/jour au repos ; portee de 40 a
128 Mo. Depuis (1), le local n est plus l archive mais un tampon.
4. Les regles ignoraient la cle privee de l hote. -w /etc/step/ partout, et
-w /etc/step-ca/ sur la seule autorite : auditctl refuse un watch vers un
chemin absent et fait echouer le chargement entier.
Verifie sur l autorite seule d abord, puis 14/14 : regles armees, auditd
actif, sonde a 0, et les quatorze hotes presents dans Loki sous job=audit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-11 09:00:28 -04:00
|
|
|
#!/bin/bash
|
|
|
|
|
# GENERE par Set-OPS (role auditd). Ne pas editer a la main.
|
|
|
|
|
#
|
|
|
|
|
# SONDE « audit » — QUELQU'UN COLLECTE-T-IL, vraiment ?
|
|
|
|
|
#
|
|
|
|
|
# ELLE NE COMPTE PAS LES REGLES, ET C'EST TOUT SON OBJET. Le 2026-08-30, sur les quinze
|
|
|
|
|
# machines de Chezlepro, `auditctl -l` affichait onze regles armees dans le noyau pendant
|
|
|
|
|
# qu'`auditd` etait mort : un doublon dans `rules.d/` faisait echouer `audit-rules.service`,
|
|
|
|
|
# dont le demon depend. Une sonde qui aurait compte les regles aurait dit « vert » pendant
|
|
|
|
|
# toute la panne. On mesure donc la COLLECTE — le service, puis l'ecriture.
|
|
|
|
|
#
|
doc : rangee par lecteur, trois portes d'entree (architecture, setup, usage) et un index
README reduit au role du projet et au demarrage rapide. docs/architecture.md (schemas
Mermaid), docs/setup.md, docs/usage.md (154 cibles en 13 familles), docs/README.md (index).
Documents ranges en conception/, exploitation/, hebergement/, projet/ ; 598 chemins suivis.
QUICKSTART.md, SOLUTION.md, architecture-set-ops.md et la carte fondus puis retires.
Preuves : P48 lit l'index et conception/mecanismes.md ; les gardes parcourent docs/ sous-
dossiers compris (_documents) ; usage.md suit le Makefile dans les deux sens.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:01:34 -04:00
|
|
|
# Contrat : docs/conception/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2.
|
audit : la piste sort de la machine auditee, et quelqu un regarde
auditd tournait, onze regles etaient armees, et rien de tout cela ne servait
a grand-chose. Quatre manques, mesures avant d etre combles.
1. Rien ne sortait. Alloy ne contenait aucune reference a l audit et les cinq
greffons etaient inactifs. Il lit maintenant audit.log et le pousse vers Loki
— sans toucher une permission, alloy etant deja dans le groupe adm. On ecarte
le greffon syslog : journald limite le debit, et une rafale d evenements est
exactement le moment qui compte.
2. Aucune sonde. Elle mesure la COLLECTE, pas l armement : le nombre de
regles est precisement le chiffre qui restait bon pendant la panne du
2026-08-30. Il part en perfdata, jamais en verdict.
3. Retention non declaree. Mesuree a 4,6 Mo/jour au repos ; portee de 40 a
128 Mo. Depuis (1), le local n est plus l archive mais un tampon.
4. Les regles ignoraient la cle privee de l hote. -w /etc/step/ partout, et
-w /etc/step-ca/ sur la seule autorite : auditctl refuse un watch vers un
chemin absent et fait echouer le chargement entier.
Verifie sur l autorite seule d abord, puis 14/14 : regles armees, auditd
actif, sonde a 0, et les quatorze hotes presents dans Loki sous job=audit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-11 09:00:28 -04:00
|
|
|
# Mise en defaut PAR PARAMETRE : `auditd_sonde_age_max` (le baisser a 1).
|
|
|
|
|
set -uo pipefail
|
|
|
|
|
|
|
|
|
|
JOURNAL=/var/log/audit/audit.log
|
|
|
|
|
AGE_MAX={{ auditd_sonde_age_max }}
|
|
|
|
|
|
|
|
|
|
# Les regles ne sont PAS le verdict : elles partent en perfdata, pour que le diagnostic
|
|
|
|
|
# distingue « rien d'arme » de « arme mais personne ne collecte ».
|
|
|
|
|
regles=$(auditctl -l 2>/dev/null | grep -cvE '^No rules$' || true)
|
|
|
|
|
regles=${regles:-0}
|
|
|
|
|
|
|
|
|
|
if ! systemctl is-active --quiet auditd; then
|
|
|
|
|
echo "auditd ne tourne pas : ${regles} regle(s) peuvent etre armees, personne ne collecte." \
|
|
|
|
|
"| regles=${regles} age=U taille=0B"
|
|
|
|
|
exit 2
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ ! -f "${JOURNAL}" ]]; then
|
|
|
|
|
echo "auditd tourne mais ${JOURNAL} n'existe pas : rien n'est ecrit." \
|
|
|
|
|
"| regles=${regles} age=U taille=0B"
|
|
|
|
|
exit 2
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
taille=$(stat -c%s "${JOURNAL}" 2>/dev/null || echo 0)
|
|
|
|
|
age=$(( $(date +%s) - $(stat -c%Y "${JOURNAL}" 2>/dev/null || echo 0) ))
|
|
|
|
|
|
|
|
|
|
if (( age > AGE_MAX )); then
|
|
|
|
|
echo "auditd tourne mais n'a rien ecrit depuis ${age} s (seuil ${AGE_MAX} s) :" \
|
|
|
|
|
"collecte suspendue, disque plein ou regles vides." \
|
|
|
|
|
"| regles=${regles} age=${age}s;${AGE_MAX} taille=${taille}B"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "Audit collecte : ecriture il y a ${age} s, ${regles} regle(s) armee(s)." \
|
|
|
|
|
"| regles=${regles} age=${age}s;${AGE_MAX} taille=${taille}B"
|
|
|
|
|
exit 0
|