auditd是唯一能可靠捕获systemd单元文件真实修改行为的内核级方案,需对/etc/systemd/system/、/usr/lib/systemd/system/、/run/systemd/system/三路径分别配置-w -p wa -r规则并持久化至/etc/audit/rules.d/,再通过ausearch精准审计。

Linux系统中,systemd单元文件(如/etc/systemd/system/*.service、/usr/lib/systemd/system/*.timer、/run/systemd/system/*.socket)是攻击者实施持久化劫持的高危目标。auditd是唯一能可靠捕获其真实修改行为的内核级方案——它不依赖进程名或日志级别,而是直接拦截openat、write、unlinkat、renameat等底层系统调用,连硬链接替换、原子写覆盖、特权脚本篡改都能如实记录。
明确监控范围:覆盖三类systemd配置路径
systemd单元文件分散在三个优先级层级,必须全部纳入审计,否则会漏掉关键劫持点:
- /etc/systemd/system/:管理员自定义服务,最高优先级,最常被恶意利用
- /usr/lib/systemd/system/:发行版默认单元,攻击者常在此植入后门服务
- /run/systemd/system/:运行时动态生成单元(如tmpfiles生成的.service),易被内存马写入
注意:auditd不支持通配符路径(如/etc/systemd/system/*.service),必须使用目录级规则配合递归标志(-r),且需确认内核版本≥4.15(CentOS 8+/RHEL 8+、Ubuntu 20.04+ 默认支持)。
配置精准审计规则:聚焦写与属性变更
对每个路径添加规则时,只需监控实际引发持久化的操作,避免日志爆炸:
- 用
-p wa而非-p rwxa:只捕获写入(w)和属性变更(a,含chmod/chown),排除无意义的读取和执行事件 - 为每条规则指定唯一
-k键名,便于后续按来源过滤:sudo auditctl -w /etc/systemd/system/ -p wa -r -k systemd_etcsudo auditctl -w /usr/lib/systemd/system/ -p wa -r -k systemd_usrsudo auditctl -w /run/systemd/system/ -p wa -r -k systemd_run - 规则生效后,立即用
sudo auditctl -l验证是否已加载,确保无拼写或权限错误
持久化保存规则并防止重启丢失
临时规则在auditd重启或系统重启后失效,必须写入配置文件:
- 将上述三条
auditctl命令对应的内容追加到/etc/audit/rules.d/systemd.rules(推荐独立文件,便于管理):-w /etc/systemd/system/ -p wa -r -k systemd_etc-w /usr/lib/systemd/system/ -p wa -r -k systemd_usr-w /run/systemd/system/ -p wa -r -k systemd_run - 重载规则:
sudo augenrules --load(自动合并所有.rules文件并重启auditd) - 验证持久化效果:重启auditd服务后再次执行
auditctl -l,确认规则仍在列表中
高效检索与告警:快速定位可疑单元改动
日常巡检或事件响应时,用ausearch精准提取线索,避免翻阅海量原始日志:
- 查最近1小时内所有systemd单元修改:
sudo ausearch -k systemd_etc -k systemd_usr -k systemd_run --start recent --raw | aureport -f -i - 重点筛查非root用户操作:
sudo ausearch -k systemd_etc -m write,attr -ui 0 --start today | aureport -f -i(-ui 0排除UID=0,-m限定事件类型) - 发现异常后,结合
exe和comm字段判断工具链:
若exe="/usr/bin/cp"且comm="bash",可能是人工拷贝;若exe="/usr/bin/python3"且comm="ansible",需核查自动化流程合法性











