auditd 通过日志防篡改、访问控制、隔离存储和行为审计四方面提升日志安全性;需严格限制 audit.log 权限为 600、目录为 700,禁用非 root 用户使用 ausearch/aureport,启用校验与轮转,锁定规则(auditctl -e 2),并推荐 TLS 加密转发至远程服务器。

auditd 本身不加密日志,也不直接防止“截获分析”,但它能通过日志防篡改、访问控制、隔离存储和行为审计四方面大幅提高攻击者截获或伪造日志的门槛。关键不是“不让别人看到”,而是“让任何篡改都可被发现”,并确保只有授权人员能接触原始日志。
限制 audit.log 文件的直接访问权限
auditd 日志默认路径是 /var/log/audit/audit.log,它必须严格限制属主和权限:
- 属主设为
root:root,禁止普通用户读取:sudo chown root:root /var/log/audit/audit.logsudo chmod 600 /var/log/audit/audit.log - 确保整个
/var/log/audit/目录权限为700,防止目录遍历或新建日志文件绕过: - 禁用非 root 用户执行
ausearch或aureport(它们读取内核审计缓冲区或日志文件):可通过chmod 750 /sbin/ausearch /sbin/aureport并仅将运维账号加入root组或使用 sudo 白名单管控。
启用日志完整性校验与轮转保护
auditd 支持在每次写入时追加校验信息,配合轮转策略可识别日志是否被删减或覆盖:
- 编辑
/etc/audit/auditd.conf,开启以下参数:enable_syscall_audit = yes(启用系统调用级审计)log_file = /var/log/audit/audit.logmax_log_file = 100max_log_file_action = ROTATEnum_logs = 10flush = DATA(强制每次写入都同步到磁盘,避免缓存丢失) - 启用日志校验(需内核支持):
log_format = ENRICHED(增强格式,含时间戳、序列号)use_libwrap = no(禁用不受控的网络访问) - 轮转后旧日志仍属
root:root且权限600,不可被普通用户重命名或删除。
禁止未授权的规则修改与运行时干扰
攻击者若获得 root 权限,可能停用 auditd 或清空规则。需从机制上加固:
- 设置 auditd 服务为不可重启/重载(防恶意
systemctl stop auditd):sudo systemctl mask auditd(慎用,仅适用于确认规则已固化且无需动态调整的场景) - 更推荐方式:配置
/etc/audit/rules.d/下所有.rules文件为只读:sudo chmod 444 /etc/audit/rules.d/*.rulessudo chown root:root /etc/audit/rules.d/*.rules - 启用
auditctl -e 2(锁定审计配置),执行后无法增删规则、无法关闭审计,只能重启生效(需提前验证规则正确性):echo "-e 2" | sudo tee -a /etc/audit/rules.d/lock.rules
再运行sudo augenrules --load加载锁定指令。
分离日志输出与远程集中审计
本地日志始终存在物理风险。最有效的方式是将审计事件实时转发至独立、受信的日志服务器:
- 安装
audispd-plugins(如未安装):
Ubuntu/Debian:sudo apt install audispd-plugins
RHEL/CentOS:sudo yum install audispd-plugins - 启用远程 syslog 插件:
编辑/etc/audisp/plugins.d/syslog.conf,设active = yes
编辑/etc/audisp/plugins.d/af_unix.conf,设active = no(禁用本地 socket) - 配置 rsyslog 转发(推荐 TLS 加密):
在/etc/rsyslog.d/10-audit.conf中添加:*.* @@(o)syslog.example.com:6514(o 表示 TLS)
确保目标服务器部署了可信证书并监听 6514 端口。 - 这样即使本机被攻陷,原始审计事件已在远程留存,且传输过程加密,难以被中间人截获明文。

















