首页/安全/安全加固速查/UID 0 账号核查

UID 0 账号核查

除 root 外任何 UID 0 账号都是后门信号的最高级别:这条命令输出应当只有 root 一行。

安全加固速查安全更新于 2026-10-13

这条命令在查什么

这条核查命令用 awk 直接扫 /etc/passwd 的第三字段,把 UID 为 0 的账号名全部打出来。正常结果只有一行 root;出现第二行就意味着这台机器上有一个与 root 等权的账号,可能是历史遗留,也可能是后门。它是等保与基线核查里最快能得出结论的一条命令,也是入侵排查的固定动作:先看有没有多余超级用户,再谈其他加固。

基本信息

加固项账号特权最小化
适用平台Linux(RHEL/CentOS/Debian/Ubuntu)
风险等级高
判读除 root 外输出任何账号均为高危
命令要点按 UID 判定,不按用户名判定;目录服务账号用 getent 兜底

典型使用场景

  • 等保测评前的自查:先证明设备上没有多余超级用户,再往下查其他条款
  • 应急响应第一轮:被入侵后先确认攻击者是否留了 UID 0 后门
  • 交付验收:交付前把输出贴进报告,作为访问控制的证据
  • 周期巡检:把结果与上期比对,新出现的账号必须有变更单对应
  • 批量核查:脚本对多台主机跑同一命令,一次性拉出全部异常结果

核查命令

核查命令
awk -F: '$3==0 {print $1}' /etc/passwd    # 最常用的一条,预期只有 root
getent passwd 0                            # 含 LDAP/SSSD 等目录服务账号
grep -E ':0:0:' /etc/passwd                # 双 0 比对:UID 与 GID 同时为 0
getent passwd | awk -F: '$3==0 {print $1, $7}'   # 连同登录 shell 一起看
stat -c '%y %n' /etc/passwd /etc/shadow    # 记录修改时间,纳入证据链

输出判读

输出情形含义处置
只有 root符合基线归档即可,无需处理
root 加另一个账号存在等权账号,高危按安全事件流程取证,先锁定再评估
账号名刻意相似(如 root、admin、backup)伪装成管理账号的后门特征立即取证,不要直接删除
完全无输出命令或文件异常,多半是分隔符或路径写错核对 -F 参数与本机实际文件位置
getent 与本地文件结果不一致存在目录服务提供的账号以 getent 为准,并核对上游目录的授权来源

处置与复核

处置与复核
cp /etc/passwd /etc/shadow /root/evidence-$(date +%F)/   # 先封存证据
usermod -L -s /usr/sbin/nologin rogue0    # 锁定口令并禁用登录 shell
awk -F: '$3==0 {print $1}' /etc/passwd    # 复核,确认只剩 root
awk -F: '$3==0 {print $1}' /etc/passwd > /root/uid0-$(date +%F).txt   # 留档
发现非 root 的 UID 0 账号按安全事件处理:先封存 passwd 与 shadow 副本并记录修改时间,再核实来源与创建时间,不要直接删除。删除会破坏现场,也让时间线无法还原。
getent 会同时返回本地与目录服务的账号:同一个 UID 0 账号可能来自上游 LDAP 或统一身份平台,处置前先确认来源,避免把集团统一账号误判成本机后门。
awk 的 -F 参数不能省:不指定冒号作分隔符时会把整行当成一个字段,输出为空会让人误以为系统干净。命令跑完先确认至少能看到 root 一行,看不到就是命令写错了,而不是设备没问题。

批量核查做法

  • 用 Ansible 或 pdsh 对全部主机批量执行同一条命令,把结果汇总成一份总表
  • 总表按主机分组,只标出非 root 的行,减少逐台翻查的工作量
  • 每次变更后重跑并留存输出,与上期结果做差异比对
  • 输出统一带主机名与时间戳,便于归档和事后追溯

输出要怎样归档

这一条命令的价值在于可重复比对:把每次输出按「主机名 + 日期」存档,形成跨期清单。周期核查时只关注差异行,新增的 UID 0 账号要么有对应变更单,要么就是待查对象;有了基线,判断从「像不像后门」变成「与上期是否一致」,结论更硬。

易错点

  • 命令只查本地文件:漏掉目录服务账号,应保留 getent 一条作为兜底,两条结果并列入报告
  • 用 grep root 反查:账号名不含 root 的后门会被直接漏掉,必须按第三字段判定
  • 核查后不做复核:处置另一个 UID 0 账号后要重跑命令确认,人工判断易漏,以命令输出为准
  • 忽略文件修改时间:passwd 与 shadow 近期被改本身是重要线索,只记录账号名会丢掉时间线
  • 把输出直接贴进报告而不注明执行身份与主机:评审需要可追溯性,命令、时间、主机、执行人四项缺一不可

数据来源与参考

  • CIS Linux Benchmark:账号核查
  • 等保 2.0:身份鉴别

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌