auditd beantwoordt de vragen die pas na het voorval opkomen: wie heeft dit bestand gewijzigd, wanneer is deze gebruiker aangemaakt, waarvandaan is dit proces gestart. Geen ander hulpmiddel beantwoordt ze: in toepassingslogboeken staan die gegevens niet, en de opdrachtgeschiedenis wordt bewerkt door wie haar heeft achtergelaten.

De moeilijkheid is dat het installeren van het pakket op zichzelf niets oplevert. Standaardregels zijn er vrijwel niet, het journaal wordt geschreven maar is inhoudelijk leeg, en dat ontdekt men op het slechtst denkbare moment: wanneer de gegevens nodig zijn en er niet zijn.

Installatie

sudo apt install auditd audispd-plugins
sudo systemctl status auditd

Eén bijzonderheid: op sommige versies laat auditd zich niet met systemctl restart herstarten — de dienst wordt met een eigen commando bestuurd. Regels worden zo opnieuw ingelezen:

sudo augenrules --load
sudo auditctl -l

Het tweede commando toont wat er werkelijk geladen is. Geloof dat, niet de inhoud van de bestanden.

De regelset

Regels komen als apart bestand in /etc/audit/rules.d/. Hieronder een minimale set die zich terugbetaalt: ze beantwoordt de meeste vragen bij een incident zonder de schijf vol te zetten.

sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## Gebruikers en rechten
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k privileges
-w /etc/sudoers.d/ -p wa -k privileges

## SSH-toegang
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys

## Geplande taken
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron

## Kernelmodules
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

## Gebruik van sudo en su
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load

De syntaxis is kort: -w is een pad om in de gaten te houden, -p wa betekent reageren op schrijfacties en attribuutwijzigingen, -p x op uitvoering, -k is de sleutel waarop later wordt gezocht. Die sleutels zijn het grootste gemak: zonder die verandert zoeken in het journaal in het doorspitten van een gigabyte tekst.

Wat er niet in die lijst staat en waarom

Handleidingen stellen vaak voor alle execve-aanroepen vast te leggen — dus elke start van elk programma. De verleiding is begrijpelijk: een volledig beeld van de handelingen. In de praktijk levert dat op een productieserver honderden megabytes per dag op, kost het een merkbaar deel van de processor en leidt het ertoe dat het journaal eerder moet worden ingekort dan het nodig is. Is die mate van detail vereist, zet het dan gericht aan — voor één gebruiker, of voor de duur van een onderzoek.

Hetzelfde geldt voor het bewaken van de sitemap: daar wordt onafgebroken geschreven, en de regel verandert het journaal in een stroom betekenisloze gebeurtenissen.

Het lezen

Zoeken op sleutel, met numerieke aanduidingen omgezet naar namen:

sudo ausearch -k identity -i
sudo ausearch -k privileges -i -ts today

De optie -i is onmisbaar voor de leesbaarheid: zonder die krijgt u getallen in plaats van gebruikersnamen en systeemaanroepen. -ts begrenst de periode (today, recent of een concrete datum).

Een overzicht over een periode:

sudo aureport --summary -i
sudo aureport --auth -i --failed

In een gebeurtenisrecord zijn drie velden interessant: auid, de aanduiding van de gebruiker die de sessie begon, uid, de identiteit waaronder de handeling plaatsvond, en exe, het programma dat haar uitvoerde. Het verschil tussen auid en uid is het antwoord op «wie werd er precies root»: uid=0 bij de auid van een concrete persoon wijst de verantwoordelijke ondubbelzinnig aan, wie hij binnen de sessie ook voorgaf te zijn.

De schijf

De omvanginstellingen staan in /etc/audit/auditd.conf:

max_log_file = 50
num_logs = 5
max_log_file_action = ROTATE
space_left = 500
space_left_action = SYSLOG

Bekijk disk_full_action apart. Sommige configuraties hebben standaard het stilleggen van het systeem bij een volle schijf — gedrag dat gerechtvaardigd is op machines met auditverplichtingen en volstrekt misplaatst op een webserver. Controleer die waarde voordat de schijf volloopt.

De modus met onveranderlijke regels

De regel -e 2 aan het eind van het regelbestand verbiedt het wijzigen van de regels tot een herstart — ook aan wie root heeft gekregen. Dat verhoogt de waarde van het journaal merkbaar: een indringer kan het toezicht niet uitzetten zonder de machine te herstarten, en een herstart valt op zichzelf op.

De keerzijde ligt voor de hand: ook u kunt uw eigen regels niet zonder herstart wijzigen. Zet dit aan wanneer de regelset is uitgekristalliseerd en u er een maand mee hebt geleefd.

Waarvoor op een gewone server

auditd verhindert niets. Zijn waarde toont zich precies één keer — wanneer de volgorde van gebeurtenissen moet worden gereconstrueerd, en de gegevens er zijn of niet. Achteraf verzamelen kan niet, daarom wordt de regelset vooraf ingericht en daarna met rust gelaten.

Een praktisch teken dat de inrichting klopt: de regellijst is niet leeg, het journaal groeit niet ongecontroleerd, en gebeurtenissen met de sleutels identity en privileges komen zelden voor en zijn stuk voor stuk te verklaren. Hoe dat op één pagina oogt, toont de demo hieronder.