systemd是linux主流初始化系统,替代sysvinit和upstart,核心功能包括系统初始化、服务生命周期管理、进程监控、日志管理(journald)及资源控制(cgroup),通过unit(如.service、.target)组织资源,由systemctl命令行工具统一管理。

不能靠“记录所有 systemctl 操作”来审计服务管理行为,因为 systemctl 是普通用户态命令,本身不触发特殊系统调用;真正要捕获的是它背后对 systemd 的 D-Bus 通信、对 /etc/systemd/ 目录的文件修改、以及关键系统调用(如 execve 启动/停止服务)。
重点监控 systemd 配置文件和单元目录
systemctl 的多数敏感操作最终会落地为对 systemd 配置的读写。必须监控以下路径:
- /etc/systemd/system/:用户自定义服务单元存放处,写入新 .service 文件或修改现有文件是常见攻击手法
- /usr/lib/systemd/system/:系统默认单元目录,篡改 sshd.service 或 crond.service 可导致服务异常
- /etc/systemd/system.conf 和 /etc/systemd/logind.conf:全局配置变更可能削弱审计或登录策略
- /var/run/systemd/ 和 /run/systemd/(若存在):运行时状态目录,部分 reload 或 reset 操作会触碰
规则示例(写入 /etc/audit/rules.d/systemd.rules):
-w /etc/systemd/system/ -p wa -k systemd_unit_write
-w /usr/lib/systemd/system/ -p rwa -k systemd_system_units
-w /etc/systemd/system.conf -p wa -k systemd_conf_mod
捕获 systemctl 调用及其子进程行为
systemctl 命令本质是执行 execve 调用,启动 dbus-daemon、systemd-notify 等组件。需结合架构过滤记录完整链路:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 明确指定 -F arch=b64(x86_64 系统),否则 64 位调用可能漏记
- 添加 -F exe=/usr/bin/systemctl 过滤,避免混入其他 execve 日志
- 配合 -F key=systemctl_exec 标签,便于后续快速检索
规则示例:
-a always,exit -F arch=b64 -F exe=/usr/bin/systemctl -S execve -k systemctl_exec
注意:该规则仅捕获 systemctl 命令本身启动,不包含其 fork 出的子进程(如 systemctl stop nginx 实际调用的是 kill 或 dbus-send)。如需追踪后续动作,需额外监控 kill、dbus-send 或 ioctl(与 systemd socket 通信)等调用。
关联分析禁用服务的关键线索
恶意禁用服务通常不是单次操作,而是组合行为。通过 ausearch 提取上下文可识别异常模式:
- 查某次 systemctl disable 的完整事件链:sudo ausearch -k systemctl_exec -i | grep -A5 -B5 "disable"
- 看是否伴随对 /etc/systemd/system/ 下 .service 文件的删除或覆盖:sudo ausearch -k systemd_unit_write -m SYSCALL -i | grep -E "(unlink|rename|truncate)"
- 检查是否有非 root 用户(如 www-data)执行了 systemctl 命令:sudo ausearch -k systemctl_exec -ui $(id -u www-data) -i
- 对比正常运维时间窗口,筛选非工作时段的批量 disable 操作:sudo ausearch -k systemctl_exec --start 05/09/2026 02:00:00 --end 05/09/2026 04:00:00 -i
验证规则生效并防止绕过
加载后务必验证,且注意常见失效点:
- 执行 sudo auditctl -l | grep -E "(systemctl|systemd)",确认规则已加载
- 手动测试:sudo systemctl disable test.service,再运行 sudo ausearch -k systemctl_exec -i | tail -10 查看是否捕获
- CentOS 7 不支持 systemctl restart auditd,改用 sudo augenrules --load && sudo service auditd reload
- 确保 auditd 服务已启用并运行:sudo systemctl enable --now auditd,否则所有规则静默失效
- 避免规则被内核拒绝:监控路径必须真实存在,不能是符号链接未解析路径;/proc、/sys 类虚拟文件系统无法被 -w 监控










