Audit Linux : auditd, watches et ausearch
À la fin de ce tutoriel auditd, vous saurez installer et activer le démon audit, distinguer l’audit kernel des logs applicatifs (journalctl), poser des watches (
-w) et des règles syscall (-a always,exit) avec une clé (-k), les rendre persistantes via/etc/audit/rules.d/+augenrules --load, puis enquêter avecausearch/aureportsur une VM jetable — sans noyer la machine sous le bruit.Niveau : Intermédiaire+ · Temps estimé : 45–55 min · Versions testées : Ubuntu 22.04 / 24.04, Debian 12 ; notes Rocky/Alma 9 · Dernière vérification : 2026-09-11
Slug proposé :
linux-auditd· Série : Linux Réseau & Sécurité · Remplace / fusionne : N/A — création (chapitre 5)
Prérequis
- Hub Linux Réseau & Sécurité
- Chapitre 4 SSH hardening (même discipline : lab + console si vous touchez sshd)
- Latéral Admin Logs : journalctl — utile pour comparer journal vs audit, pas pour le remplacer
- VM jetable,
sudo, lab sous/tmp/lab-auditd; pas de secrets dans les règles ni le dépôt - Optionnel : snapshot avant
augenrules --loadsi la VM n’est pas jetable
Coût : 0 €. Risque : trop de règles syscall = charge CPU/disque et logs inutilisables. On reste sur un jeu minimal de watches + 1–2 syscalls lab.
Ce que nous allons construire
journalctl (apps/systemd) vs auditd (kernel LSM hooks)
→ Install / enable auditd · auditctl -s
→ Watches -w (passwd, sshd_config, fichier lab) + -k
→ Règle syscall lab (unlinkat / openat) + clé
→ Persistence : rules.d/*.rules · augenrules --load
→ ausearch -k · aureport --summary / --file · nettoyage
(Schéma à remplacer par une image locale Excalidraw / draw.io, alt : « auditd : watches -w, clés -k, ausearch et aureport ».)
Chapitre 5 Sécurité. Après firewall, fail2ban, TLS et SSH hardening, on prouve qui a touché quoi : fichiers sensibles et appels système. Ce n’est pas un redo de journalctl — le journal raconte les services ; auditd raconte le noyau.
Étape 1 — Installer auditd et vérifier l’état
# Debian / Ubuntu
sudo apt update
sudo apt install -y auditd audispd-plugins
sudo systemctl enable --now auditd
# Rocky / Alma 9 (note) :
# sudo dnf install -y audit audit-libs && sudo systemctl enable --now auditd
sudo systemctl is-active auditd
sudo auditctl -s | head -n 20
mkdir -p /tmp/lab-auditd && echo "lab-auditd ok" > /tmp/lab-auditd/README.txt
| Outil | Rôle |
|---|---|
auditd |
Démon qui écrit /var/log/audit/audit.log |
auditctl |
Règles runtime (volatiles au reboot tant que non persistées) |
ausearch / aureport |
Enquête et rapports |
augenrules |
Compile rules.d → audit.rules |
auditctl -s doit montrer enabled 1 (ou équivalent). Si le service refuse de démarrer, regardez journalctl -u auditd -n 50 — là le journal aide l’audit, il ne le remplace pas.
Étape 2 — Watches fichiers (-w) et clés (-k)
Une watch surveille un chemin : lectures/écritures/attributs/exécutions selon -p. La clé (-k) est votre étiquette pour retrouver les events plus tard.
# Fichier lab (inoffensif) + deux cibles classiques en lecture seule de conf
echo "secret-lab-placeholder" > /tmp/lab-auditd/watched.txt
# -p wa = write + attribute change (lab) ; rwxa = large — éviter en prod sans filtre
sudo auditctl -w /tmp/lab-auditd/watched.txt -p wa -k lab_watch_file
sudo auditctl -w /etc/passwd -p wa -k identity_passwd
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_conf_watch
# Lister les règles actives
sudo auditctl -l
| Flag | Sens |
|---|---|
-w PATH |
Watch sur fichier ou répertoire |
-p r|w|x|a |
read / write / execute / attribute |
-k NAME |
Clé pour ausearch -k NAME |
Générez un événement :
echo "mod $(date -Iseconds)" >> /tmp/lab-auditd/watched.txt
chmod 600 /tmp/lab-auditd/watched.txt
# Ne pas éditer /etc/passwd en prod ; en lab VM jetable seulement :
# sudo touch /etc/passwd # change mtime → event -p a (évitez hors lab)
Étape 3 — Une règle syscall lab (sans noyer le disque)
Les watches couvrent des chemins. Les règles syscall attrapent des appels (openat, unlinkat, execve…) filtrés par architecture et champs (-F).
# unlinkat (suppression) arch 64-bit ; auid>=1000 limite aux users « humains » lab
# auid!=4294967295 = unset (valeur sentinelle courante)
sudo auditctl -a always,exit -F arch=b64 -S unlinkat -F auid>=1000 -F auid!=4294967295 -k lab_unlink
# Variante openat sur le répertoire lab (plus bruyant — lab court seulement)
sudo auditctl -a always,exit -F arch=b64 -S openat -F dir=/tmp/lab-auditd -F auid>=1000 -k lab_open_dir
sudo auditctl -l | grep -E 'lab_|identity_|sshd_conf'
Déclenchez :
echo trash > /tmp/lab-auditd/to-delete.txt
rm -f /tmp/lab-auditd/to-delete.txt
cat /tmp/lab-auditd/watched.txt >/dev/null
Trop de -S sans -F = avalanche. Préférez clé + filtre ; validez avec ausearch avant de persister.
Étape 4 — Enquêter : ausearch et aureport
# Par clé (interprété -i = uid/noms lisibles)
sudo ausearch -k lab_watch_file -i | tail -n 40
sudo ausearch -k lab_unlink -i | tail -n 30
sudo ausearch -k lab_open_dir -i 2>/dev/null | tail -n 20 || true
# Rapports agrégés
sudo aureport --summary
sudo aureport --file --summary | head -n 40
sudo aureport -k --summary | head -n 40
# Fenêtre temporelle (utile après un incident lab)
sudo ausearch -k lab_watch_file -ts recent -i | head -n 50
| Commande | Usage |
|---|---|
ausearch -k CLE -i |
Events de la clé, champs décodés |
ausearch -f /chemin |
Events liés à un fichier |
aureport --summary |
Vue d’ensemble |
aureport --file / -k |
Top fichiers / clés |
Corrélation typique : un Failed password dans journalctl → IP côté fail2ban ; un changement de sshd_config → auditd avec clé sshd_conf_watch. Les deux se complètent.
Étape 5 — Persister dans rules.d et augenrules
Les auditctl runtime disparaissent au reboot (sauf règle chargée au démarrage). Placez le lab dans un drop-in :
sudo tee /etc/audit/rules.d/99-lab-auditd.rules >/dev/null << 'RULES'
## Lab linux-auditd — VM jetable (retirer après exercice)
-w /tmp/lab-auditd/watched.txt -p wa -k lab_watch_file
-w /etc/passwd -p wa -k identity_passwd
-w /etc/ssh/sshd_config -p wa -k sshd_conf_watch
-a always,exit -F arch=b64 -S unlinkat -F auid>=1000 -F auid!=4294967295 -k lab_unlink
RULES
# Compile rules.d → /etc/audit/audit.rules et recharge
sudo augenrules --check
sudo augenrules --load
sudo auditctl -l | head -n 30
| Fichier | Rôle | Éditer ? |
|---|---|---|
/etc/audit/audit.rules |
Règles compilées / chargées | Préférer ne pas éditer à la main |
/etc/audit/rules.d/*.rules |
Sources drop-in | Oui |
augenrules --load |
Rebuild + load | Après chaque changement |
Sur certaines distros le service auditd refuse un systemctl reload classique : augenrules --load (ou procédure doc distro) est la voie supportée. Vérifiez man augenrules si --load diffère chez vous — l’idée reste : sources dans rules.d.
Étape 6 — Vérification et nettoyage lab
# Preuves minimales
sudo auditctl -l | grep -E 'lab_watch_file|identity_passwd|sshd_conf_watch|lab_unlink'
sudo ausearch -k lab_watch_file -i >/tmp/lab-auditd/ausearch-sample.txt
wc -l /tmp/lab-auditd/ausearch-sample.txt
sudo aureport -k --summary | head -n 15
# Retirer le drop-in lab + règles runtime associées
sudo rm -f /etc/audit/rules.d/99-lab-auditd.rules
sudo augenrules --load
sudo auditctl -W /tmp/lab-auditd/watched.txt 2>/dev/null || true
sudo auditctl -d always,exit -F arch=b64 -S unlinkat -F auid>=1000 -F auid!=4294967295 -k lab_unlink 2>/dev/null || true
rm -rf /tmp/lab-auditd
echo "lab auditd nettoyé — règles distro d’origine inchangées si vous n’aviez que le drop-in 99-lab"
Validé si : auditd actif, ≥ 1 watch et 1 clé visibles, ausearch -k renvoie des lignes après modification lab, drop-in retiré sans casser le boot.
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
enabled 0 / pas d’events |
audit désactivé | systemctl enable --now auditd ; auditctl -e 1 |
ausearch vide |
Mauvaise clé / pas d’activité | Vérifier -k ; refaire l’action ; -ts recent |
| Règles perdues au reboot | Seulement auditctl runtime |
Drop-in rules.d + augenrules |
Disque /var/log/audit plein |
Trop de syscalls | Réduire -S ; filtres -F ; rotation audit |
augenrules / load échoue |
Syntaxe rules | augenrules --check ; une règle par ligne |
| Confusion journal vs audit | Mauvais outil | journalctl = services ; auditd = kernel watches/syscalls |
| Copier des règles « CIS full » d’un coup | Bruit + perf | Lab minimal d’abord ; élargir ensuite |
Quiz (3 questions)
1. À quoi sert l’option -k sur une règle audit ?
– A. Chiffrer audit.log
– B. Étiqueter les events pour les retrouver avec ausearch -k
– C. Remplacer fail2ban
2. Pourquoi préférer /etc/audit/rules.d/*.rules + augenrules à une longue série de auditctl seuls ?
– A. C’est plus joli
– B. Les règles runtime seules ne survivent en général pas au reboot
– C. auditctl est interdit par le noyau
3. Quelle phrase décrit le mieux la complémentarité journalctl / auditd ?
– A. Ce sont des synonymes
– B. journalctl suit les services ; auditd enregistre des accès/syscalls côté noyau
– C. auditd remplace rsyslog partout
Réponses : 1‑B · 2‑B · 3‑B
FAQ
Faut-il auditer tout /etc en récursif ?
Non en premier lab. Commencez par passwd, sshd_config, un chemin applicatif critique. L’audit large sans plan = bruit et disque plein.
auditd remplace-t-il fail2ban ou nftables ?
Non. nft/fail2ban bloquent ou ralentissent ; auditd enregistre pour forensics / conformité. Après SSH hardening, l’audit prouve les changements de conf.
Où sont les logs bruts ?
Souvent /var/log/audit/audit.log. Preférez ausearch / aureport plutôt que grep naïf (formats multi-lignes).
Pour aller plus loin
man auditctl,man ausearch,man aureport,man audit.rules- Suite : Hardening baseline
- Latéral : journalctl · SSH hardening
Maillage série Linux Réseau & Sécurité
| ← Précédent | SSH hardening : AllowUsers, sshd et 2FA |
| → Suivant | Hardening baseline : updates, users, services |
| Hub | Linux Réseau & Sécurité |
| Latéral Admin | Logs : journalctl, rsyslog et rotation |
Meta publication (à remplir dans Rank Math / SEO)
- Title SEO : auditd Linux : watches, ausearch et aureport (2026)
- Meta description (≤ 155) : Installez auditd, posez des watches fichiers et cherchez avec ausearch/aureport. Suite SSH hardening — Linux DevOps 2026.
- Focus keyphrase : auditd
- KW secondaires : ausearch, aureport, règles audit, auditctl
- Schemas Rank Math : Article + HowTo (étapes lab) + FAQ (3 questions ci-dessus)
- Image mise en avant :
assets/web/devopelastichayway/cover-linux-auditd-1200x630.webp(Visuels Linux — WebP 1200×630) - Catégorie : Linux · Niveau : Intermédiaire+
- Slug :
linux-auditd - Statut : HOLD — draft only (ne pas publier)
← Retour parcours Linux — Basics, Admin, Réseau & Sécurité, Shell & Automation.