auditd 不应也不可被配置为 systemd 初始化阶段最高优先级启动,因其依赖内核 audit=1 参数和 /var/log/audit/ 挂载,合理定位是 wantedby=sysinit.target;正确做法是启用内核审计、保持默认服务级别、持久化加载规则。

auditd 本身不能也不应被配置为“systemd 初始化阶段以最高优先级强行启动”,原因在于其设计逻辑与 systemd 启动顺序机制存在根本性约束。强行突破这一约束不仅无效,还可能引发系统不稳定或审计失效。以下是关键事实和正确做法:
auditd 的启动时机由内核审计子系统决定
auditd 是用户空间守护进程,负责读取并写入内核生成的审计日志。而真正的审计能力始于内核加载时:
- 内核必须启用
audit=1参数(通过 GRUB 配置),否则/dev/audit设备不可用,auditd 启动后也无法接收事件; - 即使 auditd 在
sysinit.target之前启动,若内核未开启审计,它将无事可做,日志为空; - systemd 无法让一个服务“早于内核审计框架初始化”,这是操作系统层级限制。
auditd 在 systemd 中的合理定位是 sysinit.target 级别
官方 RHEL/CentOS/Fedora 文档明确将其设为 WantedBy=sysinit.target,即:
- 它在基础系统初始化完成后、多用户服务启动前就绪;
- 这已足够捕获
systemd、login、sshd等关键服务的早期行为; - 手动修改单元文件强制提前(如
Before=local-fs.target或DefaultDependencies=no)会导致:- 依赖的
/var/log/audit/目录尚未挂载(路径不存在); -
auditctl工具或内核接口不可用,服务启动失败; -
augenrules --load报错 “No such file or directory”。
- 依赖的
正确保障 auditd 尽早、可靠生效的操作
只需三步,无需改动优先级:
-
确保内核启用审计
编辑/etc/default/grub,在GRUB_CMDLINE_LINUX中添加audit=1:GRUB_CMDLINE_LINUX="... rhgb quiet audit=1"
执行
sudo grub2-mkconfig -o /boot/grub2/grub.cfg && sudo reboot -
设置 auditd 为 sysinit 阶段核心服务
默认 unit 文件已满足要求,验证命令:systemctl show auditd.service | grep -E "(WantedBy|Before|After)"
输出中应含
WantedBy=sysinit.target,且After=local-fs.target(确保日志目录可用) -
规则必须持久化且开机前加载
将规则写入/etc/audit/rules.d/*.rules,再运行:sudo augenrules --load # 生成 /etc/audit/audit.rules 并加载进内核
此步骤实际在
auditd.service启动前由 init script 或 generator 完成(RHEL 8+ 由auditd-pre.service处理)
不复杂但容易忽略。










