外观
root 密码变更排查
约 976 字大约 3 分钟
Shell安全排查入侵溯源root
2026-06-17
该脚本只读采集,用于排查 root 密码是否被修改、是否存在 root 登录、SSH 密钥、审计日志、历史命令、异常账号和日志清理线索。
快速开始
使用 curl:
curl -sL https://script.merma.cn/scripts/shell/SecurityScript/root_pwd_trace.sh -o /tmp/root_pwd_trace.sh && sudo bash /tmp/root_pwd_trace.sh; rm -f /tmp/root_pwd_trace.sh使用 wget:
wget -qO /tmp/root_pwd_trace.sh https://script.merma.cn/scripts/shell/SecurityScript/root_pwd_trace.sh && sudo bash /tmp/root_pwd_trace.sh; rm -f /tmp/root_pwd_trace.sh输出文件
运行后会在当前目录生成 root_pwd_trace_<主机名>_<时间>/:
| 文件 | 说明 |
|---|---|
report.txt | 完整文本排查报告 |
report.html | 自动生成的 HTML 汇总报告 |
raw/ | 原始证据文件副本 |
root_pwd_trace_<主机名>_<时间>.tar.gz | 打包后的完整结果 |
排查内容
| 类型 | 内容 |
|---|---|
| root 账号 | /etc/passwd、/etc/shadow、chage -l root、关键账号文件修改时间 |
| 登录日志 | root 登录、失败登录、sudo、su、改密记录;无 secure* 时自动回退 journald |
| 改密关联 | 改密时刻精确匹配对应 root 登录会话(带来源 IP),区分授权改密与可疑改密 |
| 完整性基线 | rpm -Va 比对系统二进制是否被篡改(仅二进制路径,排除配置噪音) |
| Rootkit 迹象 | /etc/ld.so.preload 预加载劫持、ps 与 /proc 比对找隐藏进程 |
| 审计日志 | auditd 状态、ausearch -f /etc/shadow |
| SSH 风险 | PermitRootLogin、PasswordAuthentication、root authorized_keys 逐条归属 |
| 凭据泄露 | history、.netrc、存活进程命令行中的明文 key/密码(命中后自动脱敏) |
| 提权后门 | 各用户 crontab、systemd timer/服务、SUID(rpm -Vf 校验而非 mtime)、sudoers NOPASSWD |
| 日志完整性 | secure/messages/wtmp/btmp/lastlog 状态、清理痕迹、wtmp 断档校验 |
HTML 报告
report.html 会自动汇总关键指标,并按"已确认 / 需人工核实"分层给出风险发现:
- root 密码最后修改日期,以及该时刻是否落在某次 root 登录会话内(带来源 IP)
- 认证日志来源(
secure*或回退的 journald)与日志覆盖起点 - root 改密、成功登录(按事件去重)、来源 IP 排名、认证失败线索
/etc/ld.so.preload、系统二进制篡改数(rpm -Va)、隐藏进程数、wtmp 完整性- 凭据泄露处数(脱敏)、可疑 SUID(
rpm校验)、sudoers NOPASSWD 条数 - auditd
/etc/shadow审计记录、SSH 配置和authorized_keys状态 - 重点日志片段和导出文件清单
HTML 报告包含目录锚点,可直接跳转到总览、关键指标、风险发现、关键时间线和证据详情。
检测口径说明:登录/改密/失败判定统一从同一日志源读取(
secure*优先,缺失时回退 journald),report.txt与report.html数值一致;SUID 与系统二进制是否异常以rpm校验为准,不依赖可被touch -r伪造的修改时间。
运行状态
脚本执行时会显示采集进度:
| 状态 | 含义 |
|---|---|
[RUN] | 正在采集当前项目 |
[OK] | 已采集到输出 |
[SKIP] | 当前系统无数据、无匹配或不适用 |
[WARN] | 命令不存在、权限不足或参数异常 |
适用范围
优先适配 CentOS / RHEL / Rocky Linux / AlmaLinux 这类使用 /var/log/secure、yum、rpm 的系统,完整性比对、SUID 校验依赖 rpm。
在没有 /var/log/secure* 的 minimal 安装上,脚本会自动回退 journald 读取认证记录,避免"日志查不到就误判为安全"。Debian / Ubuntu 的认证日志路径(auth.log)和包管理记录不同,脚本可运行通用检查,但不是完整适配版本。
注意事项
生成结果包含敏感数据,例如 /etc/shadow、SSH 配置、authorized_keys、登录日志、history 和系统审计日志。不要把生成目录、压缩包或 HTML 报告上传到公开仓库、论坛或公共工单。
脚本只读采集,不会修改系统配置。排查结论需要结合堡垒机、云厂商登录审计、业务变更记录和人员操作记录复核。