1.3.1 用户与组基础概念(UID/GID、主组与附加组)
用户与组是 Linux 权限体系的核心。系统基于 UID/GID 判断权限,而非用户名/组名本身。理解 UID/GID、主组与附加组的关系,是后续权限、运维隔离与审计的基础。
概念要点#
- UID 类型与约定
- 0:root 超级用户
- 1–999:系统用户/服务账户(发行版不同略有差异)
-
1000+:普通登录用户
-
GID 类型与约定
- 系统组通常在较小 GID 范围
-
普通用户主组常与用户名同名,GID 与 UID 对应
-
主组与附加组
- 主组(Primary Group):创建文件的默认所属组
- 附加组(Supplementary Groups):授予额外访问权限
工具准备(安装示例)#
多数发行版已内置,但最小化系统可能缺少基础工具:
# RHEL/CentOS/Rocky
sudo yum install -y shadow-utils
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y passwd
关键命令与示例#
1) 查看 UID/GID 与组列表
# 查看当前用户 UID/GID/组
id
# 查看指定用户
id nginx
# 查看用户名到 UID/GID 的映射
getent passwd nginx
getent group nginx
2) 验证主组与附加组对权限的影响
# 准备用户与目录(示例用户 dev)
sudo useradd -m dev
sudo mkdir -p /data/shared
sudo chown root:dev /data/shared
sudo chmod 2770 /data/shared # 2=SGID,确保新文件继承组
# 切换用户创建文件
sudo -iu dev
touch /data/shared/file_by_dev
ls -l /data/shared
预期效果:file_by_dev 的属组为 dev,且权限继承组写入。
3) 使用数字方式查看真实 UID/GID(排查时很关键)
ls -ln /data/shared
预期效果:显示数字 UID/GID,避免因同名用户导致误判。
排错思路(权限问题常见点)#
- 用户名一致但 UID 不一致(常见于多机环境)
bash id dev getent passwd dev - 文件属组与用户附加组不匹配
bash id dev ls -l /data/shared - 组权限不生效(未设置 SGID/目录权限)
bash chmod 2770 /data/shared
实战练习#
1) 创建用户 ops1,确认其 UID/GID 并记录。
2) 创建目录 /srv/ops,设置属组为 ops1 主组,允许组内写入并继承组。
3) 验证 ops1 创建文件后属组是否正确。
4) 使用 ls -ln 验证数字 UID/GID 与 /etc/passwd 一致。