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 一致。