Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

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 avec ausearch / aureport sur 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 --load si 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.daudit.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_configauditd 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

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.