跳转到主内容
极星编程网:以代码为星,赴技术山海!

怎么在Linux利用Auditd实时监控敏感系统配置文件的篡改行为

auditctl -w 是唯一靠谱的起点,因其基于 inode 精确捕获文件写入和属性变更;-p wa 覆盖关键篡改行为,-k 提供高效日志过滤,永久规则须写入 /etc/audit/rules.d/ 并用 augenrules --load 加载。 直接用
auditctl -w
监控文件绝对路径,配合
-p wa
和
-k
,否则日志根本没法查、规则大概率不生效。 为什么
auditctl -w
是唯一靠谱的起点 监控 配置文件 篡改,核心是捕获
write
和
attribute change
(比如
chmod
、
chown
),而
-w
是 auditd 中唯一能精确绑定到文件 inode 层级变更的机制。用
-a always,exit
配
-F path=...
会失效——它只匹配 execve 或 open 等调用的参数字符串,路径被软链接、重命名或通过 fd 传递时就漏掉了。
-w /etc/shadow -p wa
能捕获所有写入和权限/属主变更,哪怕调用方是
perl -e 'open...'
这类绕过命令行记录的方式 必须用
ls -i /etc/shadow
确认真实路径,别写成
/etc/passwd
或软链接名(如
/etc/shadow-
) 如果路径含空格或特殊字符,
auditctl
不支持转义,直接换行或报错;此时应改用永久规则文件 +
augenrules
-p wa
足够了,别乱加
x
或
r
对
/etc/shadow
、
/etc/sudoers
这类文件,读操作本身不是篡改行为,且高频触发(如
getpwent
调用),加
r
会导致日志爆炸、掩盖真正修改。执行权限
x
对配置文件无意义,内核也不会触发对应事件。
-p wa
:覆盖写入(新增/覆盖用户)、属性变更(提权后改权限、隐藏文件)两类关键篡改 加
a
很重要:攻击者常先
chmod 600 /etc/shadow
再写入,没
a
就看不到这步前置动作 不要写
-p rwa
:在生产环境跑一天,
ausearch -k shadow_mod -m SYSCALL | wc -l
可能轻松破万,真正篡改藏在里面极难定位
-k
不是可选标签,是日志过滤的生命线 audit.log 是二进制格式,没有
-k
就只能靠
ausearch -f /etc/shadow
,但这个命令会扫描全量日志、忽略上下文字段(如
auid
),且无法区分是 root 手动改还是某个 cron 脚本误操作。加了
-k
后,
ausearch -k shadow_mod
能秒出结果,还能和
aureport -f -i
组合生成可读报表。 CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载 关键字要语义明确:
-k shadow_mod
比
-k file1
强十倍,避免后期 grep 错误路径 多个文件共用一个 key(如
-k identity_files
)方便统一告警,但排查时得靠
ausearch -k identity_files -f /etc/shadow
二次过滤 key 名称不能含空格或斜杠,否则
ausearch
解析失败,报错类似
Invalid key name format
永久生效必须走
/etc/audit/rules.d/
+
augenrules --load
临时规则
auditctl -w ...
在 reboot、
systemctl restart auditd
后全部丢失。生产环境必须写进规则文件,否则某天发现被篡改,第一反应是“我明明配了”,结果查
auditctl -l
发现空空如也。 新建
/etc/audit/rules.d/10-identity.rules
,内容为:
## Monitor critical identity files
-w /etc/shadow -p wa -k shadow_mod
-w /etc/passwd -p wa -k passwd_mod
-w /etc/sudoers -p wa -k sudoers_mod
运行
augenrules --load
(不是
systemctl restart auditd
) 验证:执行
auditctl -l | grep shadow_mod
,确认规则已载入;再手动
echo test > /etc/shadow 2>/dev/null
(需 root),立刻
ausearch -k shadow_mod -m SYSCALL -i | tail -2
应见完整上下文 常见失败点:
/etc/audit/rules.d/
目录权限不是
640
、SELinux 拦截规则加载(
restorecon -Rv /etc/audit/
)、
ProtectSystem=strict
导致 systemd 忽略该目录 真正容易被忽略的是:规则生效后,
ausearch
默认只查最近 15 分钟,查历史得显式加
--start yesterday
;另外,
auid
字段才是登录用户 ID,比
uid
可靠得多——脚本里
sudo -u nobody
改文件,
uid
是 nobody,但
auid
还是原始管理员,这才是溯源关键。

相关文章