首页/安全/应急响应速查/用 getent 检查跨库账号一致性

用 getent 检查跨库账号一致性

本地 passwd 干净不代表没有后门:LDAP/sssd 接入的账号要经过 NSS 合并后检查 UID 0 与重复 UID。

应急响应速查安全更新于 2026-10-13

为什么要用 getent 查账号

本地 /etc/passwd 干净不代表没有后门账号:接入 LDAP、sssd 等目录服务后,账号视图由 NSS 合并多个来源。检查 UID 0 的账号、重复 UID 与重复用户名,必须用 getent passwd——它走的是与应用程序完全相同的 NSS 链路。

基本信息

工具getent passwd(合并 NSS 全部来源)
检查项UID 为 0 的账号、重复 UID、重复用户名
原因本地与目录服务可能各存在一个同名账号
替代视角id <名字> 查看最终生效的来源与结果
配置依据/etc/nsswitch.conf 的来源顺序
性质只读查询,不做任何修改

典型使用场景

  • 排查是否存在 UID 为 0 的非 root 账号
  • 确认同名账号在本地与目录服务中的优先级
  • 加固巡检:核对重复 UID 带来的权限放大
  • 排查账号被禁用后仍能登录的情况
  • 审计前核对账号视图与资产台账是否一致
  • 处置中确认删除动作是否真的生效
  • 演练中练习跨库账号检查

跨库检查 UID 冲突

跨库检查 UID 冲突
getent passwd | awk -F: '$3==0'                                 # 所有 UID 为 0 的账号
getent passwd | awk -F: '{print $3}' | sort -n | uniq -d | head   # 重复 UID
getent passwd | awk -F: '{print $1}' | sort | uniq -d | head      # 重复用户名
getent passwd root                                                # 与本地文件比对
id root                                                           # 最终生效视图
grep -E '^passwd' /etc/nsswitch.conf                              # 账号来源顺序

检查项与异常表现

检查项命令异常表现
UID 0 账号awk -F: '$3==0'出现 root 以外的条目
重复 UIDuniq -d 统计第三列两个账号共享同一权限范围
重复用户名uniq -d 统计第一列两处同名条目,谁生效看来源顺序
来源顺序nsswitch.conf目录服务排在本地前会覆盖本地账号
最终视图id <名字>与 getent 结果不一致即需追查
id 与 getent 走同一条 NSS 链路:它们的结果才是应用程序真实看到的账号视图,直接读 /etc/passwd 会得出不同结论。
处置中删除账号后要用 getent 复验:账号可能来自目录服务,删掉本地文件并不会让它真正消失。
比对时要连 shell 字段一起看:UID 正常的账号若 shell 指向可执行脚本或异常解释器,同样值得追查来源。

易错点

  • 只比对 /etc/passwd:目录服务里的账号完全看不到,检查留了死角
  • 脚本直接解析 /etc/passwd:应用实际走 NSS,两边口径不一致
  • 看到重名账号就认定是攻击:也要考虑历史遗留与系统迁移造成的正常重复
  • 删除账号后不复验:账号可能仍然可以登录,处置实际没有生效
  • 忽略账号来源优先级:本地与目录服务同名时谁生效由 nsswitch 顺序决定,动手前先确认

数据来源与参考

  • getent(1) 手册
  • nsswitch.conf(5) 手册

相关工具

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