Linux系统级安全审计需精准配置auditd规则:-w监控文件必须用-p wa覆盖写入与属性变更,-k标签禁用空格,-a监控execve须指定-F arch=b64/b32双架构并用-F auid而非uid,规则文件须以.rules结尾且通过augenrules --load加载,否则不生效。

Linux系统级安全审计不是开个服务就完事,得明确告诉auditd你真正关心哪些行为,否则要么漏关键操作,要么日志爆炸拖慢系统。
怎么写一条真正生效的文件监控规则
用auditctl -w加路径看似简单,但权限参数-p选错就等于没监控。比如只写-p w,那改文件属性(如chown、chmod)就完全不会记录;而-p wa才能覆盖写入和属性变更两类高危动作。
-
-w /etc/shadow -p r:只监看读取,适合发现异常提权尝试(如非root读shadow) -
-w /etc/sudoers -p wa:必须含a,否则修改sudo权限后不触发审计 - 路径末尾不能带
/,-w /var/log/audit/会失败,得写成-w /var/log/audit - 规则里
-k标签别用空格或特殊字符,-k "sudo change"会解析失败,应写成-k sudo_change
监控命令执行时为什么总漏掉root操作
直接-a always,exit -S execve能捕获普通用户命令,但root的很多操作会绕过——因为execve调用可能发生在不同架构下,或者被uid/euid条件过滤掉。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 必须同时加
-F arch=b64和-F arch=b32,否则32位程序(如某些兼容库工具)不记录 - 要抓root执行的命令,得用条件
-C uid!=euid -Feuid=0,而不是单纯-F uid=0(后者只抓root启动的进程,漏掉sudo切换后的操作) - 避免用
-S all,它会导致内核队列溢出,ausearch查不到事件,应按需指定关键系统调用,如-S execve -S unlinkat -S setuid
规则写进文件后为啥不生效
/etc/audit/rules.d/目录下的文件不是“放进去就自动加载”,auditd启动时只认.rules后缀且内容格式严格。
- 文件名必须以
.rules结尾,my-audit.conf会被忽略,得叫my-audit.rules - 每行规则开头不能有空格,注释必须用
#且独占一行,# this is bad会导致整行规则失效 - 改完规则后不能只
systemctl restart auditd,得先运行augenrules --load,它会合并所有.rules文件并生成/etc/audit/rules.d/init.log供服务读取 - 验证是否加载成功:运行
auditctl -l | grep execve,有输出才说明规则已进内核
审计日志查不到刚发生的操作怎么办
不是所有事件都立刻写入/var/log/audit/audit.log,尤其当磁盘空间不足、队列满或规则匹配失败时,事件会丢弃且无提示。
- 先看
ausearch -m avc,SELinux拒绝也会触发audit事件,但归在AVC类型里,不在普通-k搜索范围内 - 检查
auditd状态:如果systemctl status auditd显示“Queue full”,说明内核缓冲区溢出,需调大-b参数(如auditctl -b 8192) - 确认
/var/log/audit/目录权限是0700,否则auditd会静默停止写日志(连错误都不报) - 临时规则用
auditctl -a添加后,ausearch -i可能因时间戳未同步查不到,加-ts recent更可靠
真正难的不是加几条规则,而是理解每条规则在内核态如何匹配、何时丢弃、怎么验证——这些细节不摸清,配置再全也等于没配。

















