Linux用户和组权限依赖UID/GID数字标识,0为root,1–999属系统账户,1000–60000为普通用户默认范围;/etc/passwd与/etc/group以冒号分隔字段存储信息,useradd依/etc/login.defs自动分配未占用ID。

Linux 中的用户和组权限管理依赖 UID(用户标识符)与 GID(组标识符),它们是内核识别身份的核心数字凭证。系统不直接认用户名或组名,而是通过 UID/GID 进行访问控制。理解其分配逻辑和配置文件结构,是安全配置与故障排查的基础。
UID 与 GID 的取值范围与保留规则
标准 Linux 系统中,UID 和 GID 均为 32 位无符号整数,理论范围是 0–4294967295,但实际使用受约定与发行版策略约束:
- UID 0 固定分配给 root 用户,拥有最高权限;GID 0 同样对应 root 组
- 1–999(或 1–499) 通常预留给系统用户(如 daemon、sys、sync)和系统组,由发行版在安装时静态分配,一般不用于普通登录账户
- 1000–60000(常见起始为 1000) 是普通用户的默认分配区间,多数发行版(如 Ubuntu、Fedora)新建首个图形登录用户即从 UID 1000 开始递增
- 60001–65535 有时被用作网络服务或容器环境的动态/临时 UID/GID 池,避免冲突
/etc/passwd 与 /etc/group 文件格式详解
这两个文本文件是用户与组信息的权威来源,由冒号分隔字段,每行对应一个实体:
/etc/passwd 示例:
alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash:/bin/bash
- 第1字段:登录名(alice)
- 第2字段:密码占位符(x 表示密码已移至 /etc/shadow)
- 第3字段:UID(1001)
- 第4字段:主组 GID(1001,对应同名组)
- 第5字段:GECOS 描述(可为空)
- 第6字段:家目录路径
- 第7字段:默认 shell
/etc/group 示例:
developers:x:1002:alice,bob
- 第1字段:组名(developers)
- 第2字段:组密码占位符(x 表示密码在 /etc/gshadow)
- 第3字段:GID(1002)
- 第4字段:逗号分隔的附加成员列表(不含主组成员,仅补充成员)
用户创建时 UID/GID 的自动分配机制
使用 useradd 创建用户时,系统按以下逻辑决定 UID/GID:
- 若未指定
-u或-g,则从 /etc/login.defs 中读取配置项:UID_MIN 1000、UID_MAX 60000、GID_MIN 1000、GID_MAX 60000、CREATE_HOME yes - 系统扫描 /etc/passwd 中已用 UID,选取范围内最小未被占用的数字作为新 UID;同理处理 GID(尤其当启用
USERGROUPS_ENAB yes时,会为每个用户创建同名私有组) - 若手动指定 UID/GID,需确保未被占用且符合范围限制,否则命令失败
关键配置文件与管理建议
除核心文件外,以下配置影响权限行为:
- /etc/login.defs:定义 UID/GID 范围、密码策略、家目录模板等全局策略
- /etc/subuid 和 /etc/subgid:用于容器(如 rootless Podman)的 UID/GID 映射,允许非特权用户“映射”一段子 ID 区间供内部使用
- /etc/shadow 和 /etc/gshadow:存储加密密码与组管理员信息,权限严格(仅 root 可读)
修改前务必备份,新增用户优先使用 useradd 和 groupadd 工具而非直接编辑文件,避免格式错误导致登录异常。对 UID/GID 的重用需格外谨慎——即使删除用户,其旧 UID 若曾用于文件属主,仍可能残留权限痕迹。










