准确追踪 root 指令流需结合 auditd 内核级审计与 sudo 日志:auditd 通过捕获 euid=0 的 execve 系统调用绕过 shell 层干扰,sudo 日志结构化记录提权命令、用户、终端、时间等字段,并须加固日志权限、启用轮转与远程归档。

要准确追踪 root 用户的指令流,不能只依赖 shell 历史或零散日志,必须结合内核级审计(auditd)与提权行为日志(sudo 日志),覆盖“谁、何时、从哪来、执行了什么、结果如何”五个关键维度。
用 auditd 捕获 root 真实命令执行
auditd 能记录 execve 系统调用,绕过 bash history 伪造或绕过行为(如 bash -c、脚本调用),是追踪 root 指令流最可靠的方式。
- 添加规则监控所有 euid=0 的命令执行(含远程 SSH 登录后提权):
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands-a always,exit -F arch=b32 -S execve -F euid=0 -k root_commands - 保存到
/etc/audit/rules.d/root.rules,然后运行:sudo augenrules --load && sudo systemctl restart auditd - 查某次会话的完整指令流:
先用ausearch -m USER_LOGIN -i | grep "acct.*root"找 session ID;
再用ausearch -k root_commands -i -s <session_id>提取该会话下全部命令及参数。
从 sudo 日志还原普通用户提权后的操作链
多数 root 操作实际来自运维人员通过 sudo 执行,需确保 sudo 行为被结构化记录。
- 确认
/etc/sudoers启用了:Defaults logfile="/var/log/sudo.log"Defaults log_input, log_output(启用 I/O 录制,需配合iolog_dir="/var/log/sudo-io") - 检查
/var/log/sudo.log中每条记录是否含完整字段:USER=root、COMMAND=/bin/touch /tmp/test、TTY=pts/2、PWD=/home/alice - 快速筛选某用户最近提权动作:
grep 'alice.*COMMAND=' /var/log/sudo.log | tail -15
关联登录来源与命令上下文
单看命令不够,需把指令流和登录 IP、终端、时间对齐,才能判断是否异常。
- 查 root 的 SSH 登录记录:
sudo grep 'sshd.*root' /var/log/auth.log | tail -10
关注Accepted publickey或password行,提取 IP 和时间戳 - 用
last -ai | grep root查最近登录 IP 及 session ID - 将登录时间与 auditd 或 sudo 日志时间比对,确认指令是否发生在同一会话周期内
- 高危信号示例:
同一 IP 在 2 秒内连续执行useradd、passwd、chsh—— 很可能在创建后门账户
加固日志本身防篡改与归档
审计日志若可被 root 删除或修改,就失去追溯价值。
- 设权限:
sudo chmod 600 /var/log/audit/audit.log /var/log/sudo.log /var/log/auth.logsudo chown root:root /var/log/audit/audit.log /var/log/sudo.log /var/log/auth.log - 启用日志轮转与长期保留:
在/etc/logrotate.d/auditd中设rotate 90、maxage 90 - (可选)配置 rsyslog 将关键日志实时转发至远程 SIEM,避免本地删除风险


















