23·用户与权限进阶

用户组管理

groupsgroupadd

第23课:用户组管理

学习目标

完成本课学习后,你将能够:

  1. 理解用户组在 Linux 系统中的作用,以及“主组”与“附加组”的区别。
  2. 熟练使用 groupadd, groupdel, usermod 等命令进行用户组的创建、删除和成员管理。
  3. 通过查看 /etc/group 文件来理解并验证用户组的配置。
  4. 掌握配置新用户默认所属组以及将现有用户添加到新组的方法。

核心概念

1. 为什么需要用户组?

在 Linux 中,权限是基于“用户(User)”和“组(Group)”来分配的。想象一个项目团队:你需要给整个团队(组)统一的文件读写权限,而不是逐一给每个成员(用户)设置。用户组就是这样一个用于简化权限管理的“团队”容器。

2. 主组 vs. 附加组

每个用户必须属于一个且只有一个主组(Primary Group)。通常,创建用户时会自动创建一个同名的主组(例如,用户 alice 的主组也是 alice)。 除此之外,用户还可以属于多个附加组(Secondary Groups)。这是为了赋予用户额外的权限。例如,用户 alice 的主组是 alice,但她也可以同时是 developerssudo 组的成员。

3. /etc/group 文件

这是用户组的核心配置文件。每行代表一个组,格式为: 组名:组密码占位符:GID:组成员列表

developers:x:1001:alice,bob
testers:x:1002:charlie
alice:x:1003:
  • developers 组的 GID 是 1001,成员有 alicebob
  • alice 组是用户 alice 的主组,没有其他附加成员。

代码示例

1. 创建用户组

# 使用 groupadd 命令创建一个新的用户组
sudo groupadd developers
# 创建组时可以指定 GID(组ID),确保唯一性
sudo groupadd -g 2000 testers

# 查看创建的组
grep 'developers\|testers' /etc/group
# 输出示例:developers:x:1001:
#          testers:x:2000:

2. 将用户添加到组中

# 假设系统上已有用户 alice, bob, charlie
# 使用 usermod 命令将 alice 和 bob 添加到 developers 附加组中
# -a 选项表示“追加”(append),与 -G 选项一起使用,避免覆盖该用户已有的其他附加组
sudo usermod -aG developers alice
sudo usermod -aG developers bob

# 将 charlie 添加到 testers 附加组
sudo usermod -aG testers charlie

# 验证 alice 的组成员关系
groups alice
# 输出示例:alice : alice developers
# 表示 alice 属于主组 alice 和附加组 developers

# 查看 /etc/group 文件,此时 developers 行会显示成员列表
grep developers /etc/group
# 输出示例:developers:x:1001:alice,bob

3. 创建新用户并指定其主组和附加组

# 创建一个新用户 david,指定其主组为 developers (需要 -g 选项指定GID或组名)
# -m 选项用于创建用户主目录
sudo useradd -m -g developers david
# 或者,指定组名
sudo useradd -m -g developers david

# 验证 david 的主组
id david
# 输出示例:uid=1004(david) gid=1001(developers) 组=1001(developers)
# 这里显示 gid 是 developers,表示主组是 developers。

# 当然,也可以同时为其指定附加组
sudo useradd -m -g developers -G testers david2

4. 删除用户组

# 删除 testers 组
sudo groupdel testers
# 注意:如果某个组是某个用户的主组,则不能直接删除该组。

实践练习

练习1:基础组管理

  1. 创建一个名为 admins 的用户组。
  2. 创建一个名为 monitoring 的用户组。
  3. 查看 /etc/group 文件,确认两个组已创建。 预期输出:文件末尾应有 admins:x:...monitoring:x:... 两行。

练习2:用户与组的关联

  1. 创建一个新用户 user1,并将其主组设置为 admins
  2. 将现有用户 user1 同时添加到 monitoringadm (系统通常存在的组) 附加组中。
  3. 使用 id user1 命令验证其 UID、主组(GID)和所有附加组。 预期输出id 命令的输出应显示 user1 的 GID 对应 admins,并且 groups 列表中包含 admins, monitoring, adm

练习3:综合场景

假设你的公司有“开发部”和“运维部”两个团队。

  1. 分别创建 dev-teamops-team 两个组。
  2. 创建用户 developer1developer2,他们只属于 dev-team(主组)。
  3. 创建用户 ops1ops2,他们只属于 ops-team(主组)。
  4. 假设项目需要 developer1ops1 能共同访问一个共享目录。最简单的权限管理方式是创建一个新组(如 project-x),然后将这两个用户添加进去。请模拟这个过程。 预期输出:最后使用 groups developer1groups ops1,应该都能看到 project-x 在他们的组列表中。

常见错误

  1. 使用 usermod -G 时忘记 -a 选项

    # 错误!这会将 alice 的附加组列表替换为只有 `monitoring`,之前的 `developers` 组将丢失。
    sudo usermod -G monitoring alice
    
    # 正确!追加方式。
    sudo usermod -aG monitoring alice
    
  2. 试图删除某个用户的主组: 直接运行 sudo groupdel developers 会失败,如果 developers 是某个用户(如 david)的主组。必须先修改该用户的主组或删除该用户,才能删除组。

  3. 混淆主组和附加组在文件创建时的作用: 当用户创建一个新文件时,文件的所属组默认是该用户的主组,而不是附加组。这是需要注意的权限管理细节。

  4. 手动编辑 /etc/group 文件: 虽然可行,但容易出错(如格式错误、忘记通知系统数据库更新)。强烈推荐使用 usermod, groupadd 等管理工具,它们会自动处理底层细节。

小结

  • 用户组是 Linux 权限管理的基石,它允许你将权限批量授予一组用户。
  • 每个用户有一个主组和多个附加组。主组通常在创建用户时自动建立。
  • 管理用户组的核心命令包括:groupadd(创建)、groupdel(删除)、usermod -aG(将用户追加到附加组)。
  • 配置信息存储在 /etc/group 文件中,可以通过 groupsid 命令快速查看用户所属的组。
  • 务必谨慎操作,特别是使用 usermod -G(不带 -a)时,它会覆盖用户已有的附加组列表。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「密码管理与 /etc/shadow」 以巩固所学知识。