Complete installation and configuration guide for the Linux Audit Daemon.
- Ubuntu 22.04 LTS or 24.04 LTS
- Root/sudo access
- Sufficient disk space (500MB+ recommended for logs)
sudo apt update
sudo apt install auditd audispd-pluginsPackages installed:
auditd- The audit daemon and core utilitiesaudispd-plugins- Dispatcher plugins (syslog, remote)
# Check version
auditctl --version
# Check service status
sudo systemctl status auditd
# Verify initial rules (should be minimal)
sudo auditctl -lEdit the main configuration file:
sudo nano /etc/audit/auditd.confRecommended settings:
# Log file settings
log_file = /var/log/audit/audit.log
log_format = ENRICHED
log_group = adm
# Log rotation
max_log_file = 50
num_logs = 5
max_log_file_action = rotate
# Buffer and backlog
priority_boost = 4
name_format = hostname
# Failure handling
disk_full_action = rotate
disk_error_action = syslog
admin_space_left_action = rotate
space_left_action = rotate
# Flush frequency (SYNC for compliance, INCREMENTAL_ASYNC for performance)
flush = INCREMENTAL_ASYNC
freq = 50Choose the appropriate rule set for your security requirements:
# Copy base rules
sudo cp audit-base.rules.template /etc/audit/rules.d/99-cis-base.rules
# For Docker hosts, add container rules
sudo cp audit-docker.rules.template /etc/audit/rules.d/50-docker.rules
# Load rules
sudo augenrules --load# Copy aggressive rules (includes immutable mode!)
sudo cp audit-aggressive.rules.template /etc/audit/rules.d/99-cis-l2.rules
# For Docker hosts
sudo cp audit-docker.rules.template /etc/audit/rules.d/50-docker.rules
# Load rules
sudo augenrules --loadWarning: Aggressive rules include -e 2 (immutable mode). After loading, rule changes require a reboot!
# List all loaded rules
sudo auditctl -l
# Count rules
sudo auditctl -l | wc -l
# Check for errors
sudo auditctl -sExpected output for base rules: ~50-60 rules loaded
The CIS benchmark requires auditing all SUID/SGID binaries. Generate rules specific to your system:
# Find all privileged binaries and generate rules
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f 2>/dev/null | \
awk '{print "-a always,exit -F path=" $1 " -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged"}' | \
sudo tee /etc/audit/rules.d/30-privileged.rules
# Reload rules
sudo augenrules --load# Enable on boot
sudo systemctl enable auditd
# Restart to apply configuration
sudo systemctl restart auditd
# Verify
sudo systemctl status auditd# Trigger a test event (sudo usage)
sudo ls /root
# Search for the event
sudo ausearch -k actions -ts recent
# Should show your sudo commandsudo auditctl -s | grep -E "lost|backlog"Healthy output:
lost 0
backlog 0
backlog_limit 8192
If lost > 0, increase backlog limit in rules:
-b 16384
./scripts/validate-audit-rules.shauditd handles its own log rotation. Verify settings:
# Check current log size
ls -lh /var/log/audit/
# Check rotation configuration
grep -E "max_log_file|num_logs" /etc/audit/auditd.confDefault rotation:
- 50 MB per file
- 5 rotated files kept
- Automatic rotation on size limit
For SIEM integration or centralized logging:
# Edit audisp-remote configuration
sudo nano /etc/audisp/plugins.d/au-remote.confactive = yes
direction = out
path = /sbin/audisp-remote
type = always# Configure remote server
sudo nano /etc/audisp/audisp-remote.confremote_server = 192.168.1.100
port = 60
transport = tcpAlternative to audisp-remote:
# Edit syslog plugin
sudo nano /etc/audisp/plugins.d/syslog.confactive = yes
direction = out
path = /sbin/audisp-syslog
type = always
args = LOG_LOCAL6
format = stringThen configure rsyslog to forward LOG_LOCAL6 to your SIEM.
For production servers, enable immutable mode:
- Add
-e 2at the END of your rules file - Reload rules:
sudo augenrules --load - From this point, rule changes require a reboot!
To modify rules after enabling immutable mode:
# Edit rules file
sudo nano /etc/audit/rules.d/99-cis-base.rules
# Reboot to apply changes
sudo rebootFor servers with high activity:
# Increase backlog
-b 32768
# Use asynchronous flushing
# In /etc/audit/auditd.conf:
flush = INCREMENTAL_ASYNC
freq = 50Exclude high-frequency, low-value events:
# Exclude read access to /proc (very noisy)
-a always,exclude -F msgtype=PATH -F path=/proc
# Exclude specific service accounts
-a always,exclude -F auid=systemd-network
-a always,exclude -F auid=systemd-resolve
# Exclude cron credential events
-a always,exclude -F msgtype=CRED_ACQ -F exe=/usr/sbin/cron- Set up Prometheus metrics: See ../README.md
- Review CIS controls: See CIS_CONTROLS.md
- Troubleshooting: See TROUBLESHOOTING.md
| Command | Purpose |
|---|---|
sudo auditctl -l |
List loaded rules |
sudo auditctl -s |
Show audit status |
sudo ausearch -k <key> |
Search by key |
sudo aureport --summary |
Generate summary report |
sudo augenrules --load |
Reload rules from files |
sudo systemctl restart auditd |
Restart service |