auditd需结合文件监控、命令审计与systemd日志实现单元文件全生命周期审计:监控/etc/systemd/system/等路径的wa事件,审计systemctl/cp/mv等命令执行,并关联journalctl时间戳与auid/exe字段构建操作链。

注意:auditd 本身不直接感知 systemd 单元文件的“生命周期语义”(如 enable/start/reload),它只能审计底层文件操作和进程行为。要实现对 systemd 单元文件变动的全生命周期审计,需结合 auditd 文件监控 + systemd 日志 + 关键命令执行审计,三者协同覆盖。
监控关键路径下的单元文件变更
auditd 能实时捕获 `/etc/systemd/system/`、`/usr/lib/systemd/system/` 等目录中 `.service`、`.socket`、`.target` 等文件的创建、修改、删除、权限变更。执行以下命令添加持久化规则(写入 /etc/audit/rules.d/systemd-unit.rules):
- -w /etc/systemd/system/ -p wa -k systemd_units - -w /usr/lib/systemd/system/ -p wa -k systemd_units - -w /run/systemd/system/ -p wa -k systemd_units(临时覆盖目录,也需监控)
然后重载规则:sudo augenrules --load 或 sudo systemctl restart auditd。该规则会记录所有 write(w)和 attribute change(a)事件,并打上 systemd_units 标签,便于后续过滤。
审计关键 systemd 命令的执行行为
仅监控文件不够——用户可能用 `cp`、`mv`、`tee` 修改单元文件,绕过 `systemctl`;也可能执行 `daemon-reload` 却未改文件。因此需审计核心命令调用:在 /etc/audit/rules.d/systemd-cmd.rules 中添加:
- -a always,exit -F path=/usr/bin/systemctl -F perm=x -F key=systemd_cmd - -a always,exit -F path=/usr/bin/systemd-analyze -F perm=x -F key=systemd_cmd - -a always,exit -F path=/bin/cp -F perm=x -F auid>=1000 -F auid!=4294967295 -F key=systemd_file_op - -a always,exit -F path=/bin/mv -F perm=x -F auid>=1000 -F auid!=4294967295 -F key=systemd_file_op
说明:限制 `auid>=1000` 排除系统服务调用,聚焦真实用户操作;`-F key=` 便于用 `ausearch -i -k systemd_cmd` 快速检索。关联 auditd 日志与 systemd 操作上下文
auditd 记录的是低层事件(谁、何时、对哪个文件做了什么),但无法直接告诉你“这是 `systemctl enable nginx.service` 引起的”。需人工或脚本关联:- 查看某次 reload 是否触发了文件重载:journalctl -u systemd --since "2026-05-01 10:00" | grep "Reloading" - 匹配同一时间戳的 audit 日志:ausearch -i -ts recent -k systemd_units | head -20 - 结合 `auid`(登录用户ID)与 `exe`(执行程序路径)判断操作意图,例如: → `auid=1001 exe="/usr/bin/systemctl"` + `path="/etc/systemd/system/myapp.service"` 表明用户正管理该服务
建议将 audit 日志与 journalctl _COMM=systemd 输出按时间对齐,构建完整操作链。
补充:启用 systemd 自身的详细日志与调试
auditd 不记录服务启动失败原因,这部分依赖 systemd journal:- 确保日志保留:编辑 `/etc/systemd/journald.conf`,设置 Storage=persistent 和 MaxRetentionSec=3month - 启用 debug 级别 unit 日志(临时):systemctl set-log-level debug - 查看单元加载详情:systemd-analyze verify /etc/systemd/system/myapp.service(验证语法+依赖) - 所有 `systemctl enable/start/reload` 操作均会记入 journal,含 UID、CMDLINE、RESULT 字段,可与 audit 事件交叉印证
不复杂但容易忽略——真正可靠的审计不是单点监控,而是把文件变动、命令执行、服务状态变更这三层日志串起来看。


















