auditd est le démon qui enregistre, au plus près du noyau Linux, qui a
touché à quoi sur votre serveur : lecture de /etc/shadow, modification de
/etc/sudoers, chargement d'un module kernel, changement de l'heure. Ce
guide montre comment l'installer (Debian et RHEL), déployer un jeu de
règles de durcissement aligné sur les CIS Benchmarks, puis retrouver les
événements avec ausearch et aureport. Public visé : administrateurs qui
veulent une piste d'audit exploitable, pour la conformité ou l'investigation.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Installer auditd et vérifier que le sous-système d'audit du noyau répond
- Écrire des règles : surveillance de fichiers, appels système, clés de recherche
- Déployer un jeu de règles de durcissement persistant via
augenrules - Lire la piste d'audit avec
ausearchetaureport, sans tomber dans les pièges - Verrouiller la configuration en mode immuable pour la production
Qu'est-ce qu'auditd
Section intitulée « Qu'est-ce qu'auditd »Le framework d'audit Linux se compose de trois couches qu'il faut distinguer :
| Couche | Rôle |
|---|---|
| Sous-système audit du noyau | Génère les événements à la source (appels système, accès fichiers) |
auditd (démon espace utilisateur) | Reçoit les événements et les écrit dans /var/log/audit/audit.log |
auditctl / ausearch / aureport | Charger les règles, rechercher et synthétiser les événements |
La force d'auditd est qu'il travaille dans le noyau : contrairement à un
simple syslog applicatif, un attaquant qui modifie un fichier ne peut pas
empêcher l'événement d'être généré. C'est la source de vérité d'un serveur
durci, et la brique exigée par les référentiels CIS
et ANSSI BP-28.
Prérequis
Section intitulée « Prérequis »- Un serveur Debian 12+ ou RHEL/AlmaLinux/Rocky 9+ (ou une VM)
- Un accès root (ou
sudo) - De préférence une VM de test : certaines règles, une fois rendues immuables, exigent un redémarrage pour être modifiées
Installer auditd
Section intitulée « Installer auditd »-
Installer le paquet
Fenêtre de terminal sudo apt-get updatesudo apt-get install -y auditd audispd-pluginsLe paquet s'appelle
auditdet le service démarre automatiquement.Fenêtre de terminal sudo dnf install -y auditsudo systemctl enable --now auditdCôté RHEL, le paquet s'appelle
audit(pasauditd) et n'est pas toujours présent sur les images minimales : il faut l'installer puis l'activer explicitement. -
Vérifier que le sous-système d'audit répond
Fenêtre de terminal sudo auditctl -senabled 1failure 1pid 838backlog_limit 8192lost 0backlog 0La ligne
enabled 1confirme que le noyau audite et qu'auditdtourne (pidnon nul). Sienabledvaut0, le service n'est pas actif ; si la commande échoue, vous êtes probablement dans un conteneur (voir l'avertissement plus haut).
Comprendre les règles d'audit
Section intitulée « Comprendre les règles d'audit »Une règle dit au noyau quoi surveiller et sous quelle étiquette. Deux formes principales suffisent pour le durcissement :
| Forme | Syntaxe | Usage |
|---|---|---|
| Surveillance de fichier | -w <chemin> -p <perms> -k <clé> | Tracer accès à un fichier ou dossier |
| Appel système | -a always,exit -F arch=b64 -S <syscall> -k <clé> | Tracer une action noyau (module, heure) |
Les permissions (-p) se combinent : r (lecture), w (écriture),
x (exécution), a (changement d'attributs). La clé (-k) est
l'étiquette qui rend l'événement retrouvable : c'est elle que vous passerez à
ausearch -k. Par exemple, surveiller toute écriture sur le fichier des
mots de passe :
-w /etc/shadow -p wa -k identityDéployer un jeu de règles de durcissement
Section intitulée « Déployer un jeu de règles de durcissement »Plutôt que d'empiler des règles à la main, placez-les dans un fichier sous
/etc/audit/rules.d/. La commande augenrules compile tous les fichiers
.rules de ce dossier en un jeu cohérent, persistant au redémarrage.
-
Créer le fichier de règles
Créez
/etc/audit/rules.d/hardening.rulesavec un sous-ensemble aligné sur les recommandations CIS :## Repartir d'une base propre au chargement-D## Buffer kernel (eviter les pertes sous charge)-b 8192## Mode si saturation : 1 = consigner via printk-f 1## Modifications de l'heure systeme-a always,exit -F arch=b64 -S adjtimex,settimeofday,clock_settime -k time-change-w /etc/localtime -p wa -k time-change## Identite : comptes, groupes, mots de passe-w /etc/group -p wa -k identity-w /etc/passwd -p wa -k identity-w /etc/gshadow -p wa -k identity-w /etc/shadow -p wa -k identity## Elevation de privileges-w /etc/sudoers -p wa -k scope-w /etc/sudoers.d/ -p wa -k scope## Chargement / dechargement de modules kernel-a always,exit -F arch=b64 -S init_module,finit_module,delete_module -k modules-w /sbin/insmod -p x -k modules-w /sbin/modprobe -p x -k modules## Environnement reseau-a always,exit -F arch=b64 -S sethostname,setdomainname -k system-locale-w /etc/hosts -p wa -k system-locale## Acces a la configuration et aux journaux d'audit-w /etc/audit/ -p wa -k auditconfig-w /var/log/audit/ -p r -k auditlog -
Charger les règles
Fenêtre de terminal sudo augenrules --loadsudo auditctl -l | wc -l20auditctl -lliste les règles réellement actives dans le noyau. Le compte doit correspondre à votre fichier : si une règle est rejetée, elle n'apparaît pas et le total diminue.
Lire la piste d'audit
Section intitulée « Lire la piste d'audit »C'est ici que le travail porte ses fruits. Deux outils : ausearch cherche
des événements précis, aureport en fait la synthèse.
Déclenchez d'abord un événement à tracer, par exemple la création d'un compte
(qui écrit dans /etc/passwd, surveillé par la clé identity) :
sudo useradd demo-auditRecherchez maintenant les modifications d'identité, en interprétant les champs
(-i traduit les UID, numéros d'appels système, etc.) :
sudo ausearch -if /var/log/audit/audit.log -k identity -i | tailLa ligne type=SYSCALL vous donne l'essentiel : comm et exe (le
programme), AUID (l'utilisateur d'origine de la session, même après un
sudo), et success. C'est exactement la réponse à « qui a modifié ce
fichier, et avec quel compte d'origine ».
Pour une vue d'ensemble plutôt qu'un événement précis, aureport synthétise :
# Resume des cles declencheessudo aureport -if /var/log/audit/audit.log -k
# Resume des modifications de comptessudo aureport -if /var/log/audit/audit.log -mVerrouiller la configuration en production
Section intitulée « Verrouiller la configuration en production »Une fois vos règles validées, vous pouvez interdire toute modification de la configuration d'audit jusqu'au prochain redémarrage. Ajoutez en dernière ligne de votre fichier de règles :
## Rendre les regles immuables jusqu'au reboot-e 2Après rechargement, toute tentative de auditctl pour modifier les règles est
refusée. C'est une protection forte : un attaquant qui obtient root ne peut
plus désactiver l'audit sans redémarrer la machine, action elle-même
traçable et visible.
Sécurité et points de vigilance
Section intitulée « Sécurité et points de vigilance »- Protéger les journaux :
/var/log/audit/ne doit être lisible que par root. La règle-w /var/log/audit/ -p r -k auditlogtrace justement toute lecture, y compris par vos propres commandesausearch. - Dimensionner le stockage : un audit verbeux remplit vite le disque.
Réglez
max_log_fileetmax_log_file_action = ROTATEdans/etc/audit/auditd.conf, et surveillez l'espace. - Le compte d'origine compte : appuyez-vous sur
AUID(et nonuid) pour l'imputabilité, car il reste celui de la session de connexion même après un changement d'utilisateur. - Aligner sur un référentiel : les clés
identity,scope,time-change,modulesreprennent la nomenclature CIS, ce qui facilite la cartographie avec un audit Lynis ou OpenSCAP.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
auditctl -s échoue ou enabled 0 | Service arrêté, ou exécution en conteneur | systemctl enable --now auditd ; sur conteneur, basculer sur une VM |
ausearch -k renvoie <no matches> | Lecture du log sans -if (comportement non fiable) | Forcer ausearch -if /var/log/audit/audit.log -k <clé> |
Le compte de règles (auditctl -l) est trop bas | Une règle est rejetée (syntaxe, syscall inconnu) | Recharger avec augenrules --load et lire les erreurs |
| Impossible de modifier les règles | Mode immuable -e 2 actif | Éditer le fichier rules.d/ puis redémarrer |
| Le disque se remplit | Audit trop verbeux, pas de rotation | Ajuster max_log_file et max_log_file_action dans auditd.conf |
À retenir
Section intitulée « À retenir »- auditd trace dans le noyau : la piste d'audit résiste à un attaquant qui modifie des fichiers
- Sur conteneur, auditd ne fonctionne pas : utilisez une VM ou du physique
- Règles de durcissement dans
/etc/audit/rules.d/+augenrules --load(persistant) - Surveillez identité, sudoers, modules kernel, heure et accès aux logs d'audit
- Pour lire les événements, toujours
ausearch -if /var/log/audit/audit.log(contournement du piège) -e 2verrouille l'audit en production, au prix d'un redémarrage pour tout changement