auditd 是 Linux 内核级审计框架,用于记录命令执行、文件访问、权限变更等底层安全事件,支撑 HIDS 与等保/ISO 27001 合规;默认日志存于 /var/log/audit/audit.log,需启用服务、配置规则并结合 ausearch/aureport 或 ELK 分析异常。

auditd 是 Linux 内核提供的核心审计框架,专为记录系统级安全事件而设计。它不依赖应用层日志,能捕获用户执行命令、文件访问、权限变更、系统调用等底层行为,是构建主机入侵检测(HIDS)和满足合规审计(如等保、ISO 27001)的关键组件。
auditd 基础配置与日志路径
auditd 默认随大多数发行版安装(如 RHEL/CentOS、Ubuntu Server),但常处于未启用状态。启动服务并设为开机自启:
- systemctl enable --now auditd
- systemctl status auditd 确认运行中
主配置文件为 /etc/audit/audit.conf,规则定义在 /etc/audit/rules.d/ 下的 *.rules 文件中。日志默认存于 /var/log/audit/audit.log,按需可配置轮转(通过 max_log_file 和 num_logs 控制)。
编写有效审计规则:聚焦高风险行为
规则通过 auditctl 临时添加,或写入 rules 文件持久化。关键原则是“最小必要”——避免全量监控导致性能下降或日志爆炸。
- 监控敏感目录:例如 -w /etc/passwd -p wa -k identity_change(记录读写+属性修改,打标签 identity_change)
- 拦截特权命令:如 -a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec
- 跟踪可疑系统调用:比如 -a always,exit -F arch=b64 -S execve -F uid!=1000 -k suspicious_exec(仅记录非普通用户 UID 的进程执行)
- 规则加载后执行 augenrules --load 或重启 auditd 生效
解析 audit.log 实现异常识别
audit.log 每行是一条结构化事件,含时间戳、类型(SYSCALL、PATH、CWD)、UID、PID、系统调用名、参数、结果(success=1/0)等字段。人工筛查低效,建议结合工具:
- 用 ausearch -m SYSCALL -ts today -i | grep "execve.*sh" 快速查今日所有 shell 启动
- 用 aureport -f -i -ts yesterday 汇总昨日文件操作统计
- 对高频失败登录,过滤 ausearch -m USER_AUTH -sv no -i,再用 awk 统计源 IP 出现次数
- 生产环境推荐接入 auditd → rsyslog → ELK 或 Wazuh,实现可视化告警
实战异常检测场景示例
真正发挥 auditd 价值,在于将日志转化为可响应的安全信号:
- 横向移动线索:同一用户短时间内在多台机器上触发 execve 调用 ssh 或 scp,且目标 IP 非白名单
- 提权尝试痕迹:setuid 系统调用失败 + 后续立即尝试 execve("/bin/bash")
- 隐蔽持久化:非 root 用户修改 /etc/cron.d/ 或写入 ~/.bashrc,且该用户无对应管理权限
- 数据外泄迹象:大文件(>10MB)被 openat 后连续 read,接着出现 connect 到外部 IP 的记录










