跳转到主内容
极星编程网:以代码为星,赴技术山海!

Linux系统别名账户排查及非标准UID用户审计

应使用getent passwd | awk -F: '$3<0 || ($3>=1 && $3<1000)' /dev/null命令结合/etc/passwd人工核查格式异常行,重点追溯创建来源与登录痕迹。 怎么查系统里有没有非标准UID的用户 Linux默认用户UID从0开始,普通用户通常从1000起(不同发行版可能略有差异),但管理员可能手动创建UID小于1000甚至为负数的“别名账户”——这类账户不走
adduser
流程,容易绕过常规审计。直接看
/etc/passwd
最可靠,但不能只扫UID数字,得结合
getent passwd
(兼容LDAP/NIS)和
awk
逻辑过滤。
getent passwd | awk -F: '$3 :排除root(0)、daemon(1)、sys(2)、nobody(65534)等系统保留UID,只留可疑低UID
注意
getent
比直接读
/etc/passwd
更准,尤其在启用了SSSD或LDAP的环境 某些容器镜像或嵌入式系统会把普通服务用户UID设成500、999等,需结合
/etc/login.defs
里的
UID_MIN
值判断是否真异常 为什么
id -u username
有时查不到别名账户 因为别名账户未必是独立用户,可能是通过
usermod -l
改名残留、
useradd -o
强制创建的重复UID,或仅存在于
/etc/shadow
但
/etc/passwd
被删掉的“半残”账户。这时候
id
查不到,但
su - username
仍可能成功登录——本质是PAM认证层还能匹配密码哈希。 用
getent shadow username
确认该用户名是否仍在shadow数据库中 检查
/var/log/auth.log
里近期是否有
Failed password
或
session opened
对应这个用户名,哪怕
id
失败 别忽略
ls -la /home/
结果:有些别名账户没家目录,但
/home/username/.ssh/authorized_keys
还在,能免密登录
awk -F: '$3 == 0' /etc/passwd
只能找到root?漏了哪些情况 只查UID=0确实只抓到root,但攻击者常用“UID复用”手法:用
useradd -o -u 0 backdoor
创建第二个UID=0用户。这种账户
id
显示是root权限,但用户名不是root,
passwd -S
也照常返回
PS
状态,极难察觉。 必须加
awk -F: '$3 == 0 && $1 != "root" {print}' /etc/passwd
单独扫非root的UID=0 同一UID下多个用户名会导致
getent passwd 0
只返回第一个(按
/etc/passwd
顺序),所以得用
awk
全文件扫描 某些加固脚本会禁用
useradd -o
,但老版本
adduser
或直接编辑
/etc/passwd
仍可绕过 审计脚本里为什么不能只依赖
cut -d: -f3 /etc/passwd | sort -u
这条命令只输出去重后的UID列表,完全丢失用户名上下文,你看到“999”根本不知道是
dnsmasq
还是攻击者新建的
hack01
。更糟的是,如果某行
/etc/passwd
格式损坏(比如少一个
:
),
cut
会截断错位,把shell字段当UID输出,导致误报。 坚持用
awk -F: '{print $1,$3}' /etc/passwd
带用户名输出,再用
sort -k2,2n
按UID排序 加
2>/dev/null
抑制
awk
对损坏行的警告,避免干扰管道后续处理 真正要自动化审计时,得补一句
grep -v '^[a-z]\+:[^:]*:[0-9]\+:[0-9]\+:[^:]*:[^:]*:[^:]*:/[^:]*:/[^:]*:' /etc/passwd
先挑出格式异常行人工核查 非标准UID本身不危险,危险的是它背后脱离标准流程的创建方式——这些账户往往没进sudoers白名单、没被堡垒机日志捕获、也不在定期导出的用户清单里。查的时候别只盯数字,重点看“谁建的、怎么建的、有没有登录痕迹”。

相关文章