第23课:用户组管理
学习目标
完成本课学习后,你将能够:
- 理解用户组在 Linux 系统中的作用,以及“主组”与“附加组”的区别。
- 熟练使用
groupadd,groupdel,usermod等命令进行用户组的创建、删除和成员管理。 - 通过查看
/etc/group文件来理解并验证用户组的配置。 - 掌握配置新用户默认所属组以及将现有用户添加到新组的方法。
核心概念
1. 为什么需要用户组?
在 Linux 中,权限是基于“用户(User)”和“组(Group)”来分配的。想象一个项目团队:你需要给整个团队(组)统一的文件读写权限,而不是逐一给每个成员(用户)设置。用户组就是这样一个用于简化权限管理的“团队”容器。
2. 主组 vs. 附加组
每个用户必须属于一个且只有一个主组(Primary Group)。通常,创建用户时会自动创建一个同名的主组(例如,用户 alice 的主组也是 alice)。
除此之外,用户还可以属于多个附加组(Secondary Groups)。这是为了赋予用户额外的权限。例如,用户 alice 的主组是 alice,但她也可以同时是 developers 和 sudo 组的成员。
3. /etc/group 文件
这是用户组的核心配置文件。每行代表一个组,格式为:
组名:组密码占位符:GID:组成员列表
developers:x:1001:alice,bob
testers:x:1002:charlie
alice:x:1003:
developers组的 GID 是 1001,成员有alice和bob。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:基础组管理
- 创建一个名为
admins的用户组。 - 创建一个名为
monitoring的用户组。 - 查看
/etc/group文件,确认两个组已创建。 预期输出:文件末尾应有admins:x:...和monitoring:x:...两行。
练习2:用户与组的关联
- 创建一个新用户
user1,并将其主组设置为admins。 - 将现有用户
user1同时添加到monitoring和adm(系统通常存在的组) 附加组中。 - 使用
id user1命令验证其 UID、主组(GID)和所有附加组。 预期输出:id命令的输出应显示user1的 GID 对应admins,并且groups列表中包含admins,monitoring,adm。
练习3:综合场景
假设你的公司有“开发部”和“运维部”两个团队。
- 分别创建
dev-team和ops-team两个组。 - 创建用户
developer1和developer2,他们只属于dev-team(主组)。 - 创建用户
ops1和ops2,他们只属于ops-team(主组)。 - 假设项目需要
developer1和ops1能共同访问一个共享目录。最简单的权限管理方式是创建一个新组(如project-x),然后将这两个用户添加进去。请模拟这个过程。 预期输出:最后使用groups developer1和groups ops1,应该都能看到project-x在他们的组列表中。
常见错误
-
使用
usermod -G时忘记-a选项:# 错误!这会将 alice 的附加组列表替换为只有 `monitoring`,之前的 `developers` 组将丢失。 sudo usermod -G monitoring alice # 正确!追加方式。 sudo usermod -aG monitoring alice -
试图删除某个用户的主组: 直接运行
sudo groupdel developers会失败,如果developers是某个用户(如david)的主组。必须先修改该用户的主组或删除该用户,才能删除组。 -
混淆主组和附加组在文件创建时的作用: 当用户创建一个新文件时,文件的所属组默认是该用户的主组,而不是附加组。这是需要注意的权限管理细节。
-
手动编辑
/etc/group文件: 虽然可行,但容易出错(如格式错误、忘记通知系统数据库更新)。强烈推荐使用usermod,groupadd等管理工具,它们会自动处理底层细节。
小结
- 用户组是 Linux 权限管理的基石,它允许你将权限批量授予一组用户。
- 每个用户有一个主组和多个附加组。主组通常在创建用户时自动建立。
- 管理用户组的核心命令包括:
groupadd(创建)、groupdel(删除)、usermod -aG(将用户追加到附加组)。 - 配置信息存储在
/etc/group文件中,可以通过groups或id命令快速查看用户所属的组。 - 务必谨慎操作,特别是使用
usermod -G(不带-a)时,它会覆盖用户已有的附加组列表。
练习编辑器
rust
Loading...