Auditd与Syslog必须联动,因Auditd记录内核级系统调用(如execve、chmod),字段精确但无命令原文;Syslog补全用户级行为上下文(如SSH源IP、完整命令、返回码),但存在非交互场景漏记。二者通过时间戳、AUID、PID等字段对齐,才能拼出完整操作链实现精准溯源。

Auditd 和 Syslog 不是替代关系,而是分工协作的组合:Auditd 抓内核级动作铁证,Syslog 补用户级行为上下文。只用一边,溯源就断链。
为什么必须联动?
Auditd 记录的是系统调用,比如 execve、chmod、openat 这类底层事件,字段精确但难读——它知道“谁调用了 write() 去改 /etc/passwd”,但不直接存“echo 'root::0:0:root:/root:/bin/bash' > /etc/passwd”这条命令。
Syslog(尤其配合 shell 日志增强)能记录命令原文、执行路径、返回码、TTY、SSH 源 IP,但它依赖用户交互和 history 机制,非交互式脚本、su -c、systemd-run 等场景会漏记。
两者靠时间戳(毫秒级)、AUID(审计用户 ID)、PID/PPID、TTY 字段对齐,才能拼出完整操作链:“张三在 14:22:03.872 从 192.168.5.22 的 pts/3 终端,运行 sudo rm -rf /tmp/data,进程由 bash 启动,最终触发了 unlinkat 系统调用”。
关键配置三步打通
统一时间基准:所有主机启用 NTP 同步,避免日志时间漂移导致关联失败
timedatectl set-ntp true
让 Auditd 日志进 Syslog 流:
编辑 /etc/audisp/plugins.d/syslog.conf,确认:
– active = yes
– format = syslog
– facility = local6
再在 /etc/audit/auditd.conf 中设:
– dispatcher = /sbin/audispd
– log_format = NOLOG(关掉 audit.log 本地写入,全交由 syslog 处理)
重启 auditd 即可生效。
强化 Syslog 的命令上下文:
在 /etc/bash.bashrc 或全局 profile 中添加:
export PROMPT_COMMAND='RETRN_VAL=$?; logger -p local6.info "$(whoami) [$$] $(history 1 | sed \"s/^[ ]*[0-9]\+[ ]*//\") [$RETRN_VAL]"'
并确保 rsyslog 配置中将 local6.* 转发至中央日志平台,打上 host、user、shell 类型等标签。
溯源时怎么查?一个真实流程
发现 /etc/shadow 权限被篡改为 666:
- 先用 Audit 锁定动作:
ausearch -w /etc/shadow -m SYSCALL -i | grep chmod
得到 AUID=1002、PID=2841、时间戳、exe=/usr/bin/chmod - 再用 Syslog 还原命令:
journalctl -t logger -S "2026-07-09 14:22:00" -U "2026-07-09 14:22:30" | grep "auid=1002"
找到对应用户的原始输入,比如 “john [2841] chmod 666 /etc/shadow [0]” - 最后交叉验证:
ps -o pid,ppid,tty,comm,args -p 2841
看父进程是否为 sshd 或 bash,终端是否合法,排除提权或异常会话。
远程集中与安全加固要点
转发 Auditd 日志时,推荐用 TCP + TLS 加密(端口 6514),而非明文 UDP;
rsyslog 客户端需启用磁盘队列($ActionQueueFileName + $ActionQueueMaxDiskSpace),网络中断时不丢日志;
服务端按 host + date 分目录落盘,例如 /var/log/central/audit/web01/20260709/;
所有审计日志文件权限设为 640,属主 root:adm,禁止普通用户读取。


















