针对 Linux Audit 系统(auditd),常用设置主要集中在配置文件调优 、规则策略制定 、日志管理以及最佳实践四个方面。
以下是 Audit 最常用的设置和技巧:
配置文件调优
1. 核心配置文件调优 (auditd.conf)
主配置文件位于 /etc/audit/auditd.conf。默认配置通常能满足基本需求,但在生产环境中,建议调整以下参数以防日志丢失或占用过多磁盘空间。
bash
vim /etc/audit/auditd.conf
常用参数设置:
log_file = /var/log/audit/audit.log- 日志存储路径。默认即可,确保磁盘空间充足。
max_log_file = 8(或更大,如 100)- 单个日志文件的最大容量(单位:MB)。当达到这个大小时,Auditd 会自动轮转日志。
max_log_file_action = ROTATE- 当日志达到最大容量时的动作。
ROTATE:轮转(保留旧日志,创建新文件,数量由num_logs决定)。推荐。KEEP_LOGS:不覆盖,不断增加日志文件。IGNORE:不记录,继续写到当前文件(可能导致日志损坏)。
num_logs = 5- 保留的轮转日志文件数量。例如设置为 5,加上当前正在使用的 1 个,总共最多占用 6 倍
max_log_file的空间。
- 保留的轮转日志文件数量。例如设置为 5,加上当前正在使用的 1 个,总共最多占用 6 倍
space_left = 20%(或具体数值如 75M)- 当磁盘剩余空间低于此值时触发警告。
space_left_action = SYSLOG(或email)- 磁盘空间不足时的动作。
SYSLOG会向系统日志发送警告;如果安装了邮件服务,可以设置为email并配置action_mail_acct。
- 磁盘空间不足时的动作。
admin_space_left = 10%- 极低空间的警戒线。
admin_space_left_action = SUSPEND(或HALT/SINGLE)- 极其重要的设置。
SUSPEND:暂停记录日志(默认),防止系统崩溃。HALT:直接关机(适用于极高安全要求的系统,防止日志被覆盖)。SINGLE:切换到单用户模式。
flush = INCREMENTAL- 数据写入磁盘的频率。
INCREMENTAL配合freq参数可以平衡性能和数据安全。对于高频操作,设为DATA或SYNC更安全但更耗性能。
- 数据写入磁盘的频率。
规则策略制定
1. 常用监控规则策略
规则通常写在 /etc/audit/rules.d/audit.rules 中。以下是根据安全合规性(如 CIS Benchmark)整理的常用规则集合。
A. 文件完整性监控
监控关键系统文件是否被篡改(如密码文件、SSH配置、Web目录)。
bash
# 监控 /etc/passwd 和 /etc/shadow (写和属性变更)
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
# 监控 SSH 配置
-w /etc/ssh/sshd_config -p wa -k sshd_config
# 监控 sudoers 文件
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
# 监控 Web 目录 (可选)
-w /var/www/html -p wa -k web_data
B. 系统调用监控 (更底层、更详细)
监控特定权限的提升或变更操作。
bash
# 监控时间修改 (防止有人回溯系统时间)
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -S stime -S clock_settime -k time_change
# 监控用户/组相关操作 (useradd, groupadd 等)
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
# 监控权限变更 (chmod, chown)
-a always,exit -F arch=b64 -S chmod -S fchmod -S chown -S fchown -S lchown -S setxattr -S lsetxattr -S fsetxattr -S chmodat -S fchmodat -k perm_mod
# 监控特权管理 (sudo)
-a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k exec_priv
-a always,exit -F arch=b64 -S execve -C gid!=egid -F egid=0 -k exec_priv
C. 登录与权限锁定
防止未登录用户(UID < 1000 或 4294967295)的噪音,只关注普通用户操作。
*注意:auditctl 的规则中,-F auid!=4294967295 是用来排除 unset (未设置) 的 auid,这是过滤系统进程的关键。*
2. 忽略特定规则 (排除噪音)
有时候系统会产生大量无用的审计日志(例如某个特定的高频程序),可以使用 -a never,exit 来忽略。
bash
# 忽略特定系统调用的日志记录 (例如忽略特定用户的进程)
# 语法:-a <action>,<filter> -S <syscall> -F <field=value>
-a never,exit -S all -F pid=<特定PID>
注意:在 /etc/audit/rules.d/ 中配置忽略规则时,通常将忽略规则放在最前面。
日志管理
1. 日志查看与分析技巧
有了设置和规则,最重要的就是如何查看数据。
1. 实时查看审计日志
bash
tail -f /var/log/audit/audit.log

2. 使用 ausearch 精准查询
- 查看失败的登录尝试:
bash
ausearch -m USER_LOGIN -ts today -sv no
- 查看关于
/etc/passwd的所有变更:
bash
ausearch -f /etc/passwd -i
`-i `参数很重要,它会把数字翻译成可读的文本。

- 查看某个 Key 标记的事件(如设置的 sshd_config):
bash
ausearch -k sshd_config -i
3. 生成汇总报告 (aureport)
bash
# 查看今天的总体摘要
aureport -ts today -i
# 查看最近谁登录成功过
aureport -l -ts today -i
# 查看文件修改记录
aureport -f -ts today

实践总结(重点看)
1. 基础规范
- 使用 Key (
-k) 标记 :每一条规则都尽量加上-k标签,否则在海量日志中你找不到头绪。 - 定期检查磁盘空间 :审计日志如果不加控制,可以轻松写满硬盘。务必设置好
max_log_file_action。 - 永久化规则 :不要只运行
auditctl命令,一定要修改/etc/audit/rules.d/audit.rules并执行augenrules --load。 - 保护 Auditd 自身:防止恶意用户关闭审计服务。
bash
# 监控 auditd 自身的控制命令
-w /sbin/auditctl -p x -k audit_tools
-w /sbin/auditd -p x -k audit_tools
2. 添加规则
在 Linux 中,auditctl 命令用于控制审计系统。添加规则主要有两种方式:临时添加 (立即生效,重启失效)和永久添加(写入配置文件,重启生效)。
临时添加规则 (使用 auditctl)
bash
基本语法:
auditctl -a <action,list> <filter> -S <syscall> -F <field=value> -k <key_name>
-a: 添加规则。-S: 系统调用名称(如open,write,chmod)。-F: 过滤条件(如路径、用户ID等)。-k: 给规则打一个唯一的标签(方便后续查找)。
常用场景示例:
- 监控特定文件的写入操作(如监控
/etc/passwd):
bash
# -w 指定路径,-p 指定权限,-k 指定关键字
auditctl -w /etc/passwd -p wa -k passwd_changes
解释:监控 /etc/passwd 文件的写入 和属性变更 操作,并标记为 passwd_changes。
- 监控特定目录的所有访问(如监控
/var/www/html):
bash
auditctl -w /var/www/html -p rwa -k web_access
解释:监控该目录的读、写和属性变更。
- 监控某个系统调用(如删除文件操作 unlink):
bash
auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -k delete_file
解释:监控 64 位系统的 unlink 和 unlinkat 系统调用。
- 禁止某个用户(UID 为 1000)执行特定操作(并阻断):
bash
auditctl -a always,exit -F arch=b64 -S unlink -F uid=1000
永久添加规则 (写入配置文件)
为了让规则在重启后依然生效,需要将规则写入 /etc/audit/rules.d/ 目录下的文件中(通常以 .rules 结尾)。
- 编辑或创建一个规则文件:
bash
vim /etc/audit/rules.d/audit.rules
- 将之前使用
auditctl的命令(去掉auditctl)写入文件。例如:
bash
-w /etc/passwd -p wa -k passwd_changes
-w /var/www/html -p rwa -k web_access
- 重启审计服务以加载新规则:
bash
systemctl restart auditd
3. 删除规则
临时删除规则
- 删除所有现有规则(清空):
bash
auditctl -D
- 根据关键字 删除规则:
如果你在添加规则时使用了-k参数,可以通过它删除:
bash
auditctl -W <path> -k <key_name>
# 例如:
auditctl -W /etc/passwd -k passwd_changes
永久删除规则
- 编辑规则文件:
bash
vim /etc/audit/rules.d/audit.rules
-
删除文件中对应的行。
-
重启服务或重新加载规则:
bash
# 强制重新加载规则(不重启服务)
augenrules --load
# 或者重启
systemctl restart auditd
4. 查看规则
查看当前生效的规则
可以使用以下命令查看内核中当前加载的审计规则:
bash
auditctl -l
# 或者以更详细的格式显示
auditctl -l -v
查看状态
查看 Auditd 服务是否正在运行以及一些基本统计:
bash
auditctl -s
查看日志 (查看审计记录)
添加规则是为了记录日志,查看日志通常使用 ausearch 或 aureport。
- 查看特定关键字的日志(最常用):
bash
# 搜索标记为 'passwd_changes' 的日志
ausearch -k passwd_changes
- 查看最近的日志并解析:
bash
ausearch -ts recent | aureport -i
或者直接看原始日志:
bash
ausearch -ts recent
- 查看特定文件的日志:
bash
ausearch -f /etc/passwd
总结表格
| 操作 | 命令 | 说明 |
|---|---|---|
| 添加(临时) | auditctl -w /path -p permissions -k key |
监控文件/目录 |
| 添加(永久) | 编辑 /etc/audit/rules.d/*.rules |
重启生效 |
| 删除(全部) | auditctl -D |
清空所有当前规则 |
| 查看规则 | auditctl -l |
列出当前加载的规则 |
| 查看日志 | ausearch -k <key> |
根据标签查找记录 |
注意: 执行这些操作通常需要 root 权限 (sudo)。