Linux权限控制只认UID和GID数字,不认用户名;UID 0为root,1–999属系统账户,普通用户从1000起分配,权限判断全程基于数字匹配文件inode中的所有者与组信息。

Linux 权限控制不看名字,只认数字——UID 和 GID 就是系统判断“你是谁”“你能干啥”的唯一依据。用户名和组名只是给人看的标签,内核做权限决策时,全程只比对 UID、GID 和文件 inode 里的三组权限位。
UID 和 GID 是什么,为什么非得用数字?
UID(用户 ID)是系统内唯一标识一个用户的整数,GID(组 ID)同理,标识一个用户组。它们不是可选配置,而是 Linux 权限模型的底层基石。
- 系统处理数字比字符串快得多,避免每次查权限都做字符串匹配
- 同一个 UID 可以对应多个用户名(比如重命名后旧名残留),但权限始终由 UID 决定
- 文件所有者字段存的是 UID 数字,不是用户名;/etc/passwd 只是把 UID 映射成名字的“字典”
UID/GID 的分配规则和常见取值范围
数值本身带语义,不同区间有约定俗成的用途:
- UID 0 固定为 root,拥有内核级特权;新增 UID 为 0 的账号等于开放后门,严禁手动创建
- UID 1–999(部分系统到 499 或 999)保留给系统服务账户,如 www-data、sshd、syslog,通常禁用交互式登录
- UID ≥1000(Ubuntu/CentOS 7+ 默认起点)分配给普通人类用户,新建用户一般自动递增分配
- GID 划分逻辑类似:系统组 GID 较小,普通用户组 GID 从 1000 起;一个用户可同时属于多个组,每个组有独立 GID
权限怎么靠 UID/GID 生效?
访问一个文件时,内核按严格顺序匹配,命中即止:
- 先检查进程的 有效 UID(EUID) 是否等于文件所有者 UID → 满足则按 Owner 权限位放行或拒绝
- 否则检查该 EUID 是否属于文件所属组(主组或任一附加组)→ 满足则按 Group 权限位判断
- 否则统一按 Others 权限位决定结果
- 注意:目录的 x 权限是硬门槛,没有它,哪怕 r 权限开着也无法进入或访问其下任何文件内容
怎么查、怎么改 UID/GID?
日常操作推荐使用标准命令,避免直接编辑配置文件引发格式错误:
- id 查当前用户全部身份信息(UID、主 GID、所有附加组 GID)
- id -u username 查指定用户 UID;id -g 查主组 GID;id -G 列出所有组 GID
- useradd -u 1005 -g dev -G sudo alice 创建用户并指定 UID、主组、附加组
- usermod -u 1006 -g ops bob 修改已有用户 UID 和主组 GID(需同步修正文件归属:find / -uid 1005 -exec chown -h 1006 {} \;)
- 修改必须用 useradd/usermod/groupadd/groupmod 等工具,不要直接改 /etc/passwd 或 /etc/group


















