学习Linux——组管理
组管理(Group Management)2025年10月28日
一、核心理论
1.组管理的底层原理与核心价值
1.为什么需要组管理?
在上篇用户管理中我们指出“Linux是多用户操作系统”,当多个用户需要共享资源(如文件、目录等),单独的为每个用户配置权限将会非常繁琐。通过组管理将用户进行归类,实现“一次配置,多用户共享权限”,大幅度简化权限管理。例如:
- 开发团队成员需要的权限币普通用户要高,当成员人数过多时,一个一个修改会浪费大量时间。此时我们可以创建一个组并设置其权限,只需要把所有开成员规划到这个组中就可以完成上序操作。
- 对于一个保密文件,只允许开发组成员查看修改时,只需要设置限制其他用户的权限,无需逐个处理用户文件
2.组、用户、权限三者关系:
- 用户(User):通过 UID 唯一标识,必须属于至少一个组(基本组),可加入多个附加组。
- 组(Group):通过 GID 唯一标识,是用户的集合,关联文件的 “所属组权限”。
- 权限(Permission):文件的
r(读)、w(写)、x(执行)权限分三级:所有者(u)、所属组(g)、其他用户(o),组权限直接作用于组内所有用户。 - 当某个用户想要使用一个不属于自己的文件时(即GID值不一),查看其组归属(GID),同时查看文件所属组(GID),确定GID是否一致,如果不一致就只能使用该文件的其他用户权限(O)
三者关系图示:
用户(UID)→ 属于 → 组(GID)↓
文件 → 所属组(GID)→ 关联 → 组权限(g: rwx)
2.组类型及其GID范围
1.基本组(Primary Group)
- 定义:用户创建时默认所属的组,用户的文件默认归属此组。
- 特点:
- 每个用户有且仅有一个基本组(
/etc/passwd的 GID 字段指定); - 默认与用户名同名(如用户
lisi的基本组默认是lisi); - 无法删除正在被用户作为基本组的组。
- 每个用户有且仅有一个基本组(
2.附加组(Supplementary Group)
- 定义:用户额外加入的组,用于获取该组的权限(不影响用户默认文件的归属)。
- 特点:
- 一个用户可加入多个附加组(无数量限制);
- 附加组用户列表记录在
/etc/group的最后一个字段; - 删除组时,只需确保它不是任何用户的基本组(附加组不影响)。
3.组ID(GID):
- 0:
root组(超级用户组,权限最高); - 1-499:系统组(预定义组或系统服务组,如
bin、daemon、mysql); - 1000 及以上:自定义组(用户创建的组);
二、核心配置文件
组的所有信息存储在两个关键文件中,修改这些文件会直接影响组行为
1./etc/group:组基本信息文件
存储所有组的名称、GID、附加组用户列表。格式:组名:密码占位符:GID:附加组用户列表
[root@localhost ~]# tail -1 /etc/group
dev:x:1001:zhangsan,lisi
解读:
组名为"dev":密码占位符(实际密码在/etc/gshadow,x表示密码存在):GID值为"1001"(自定义组):以dev作为附加组的用户"zhangsan , lisi "(基本组用户不出现在这)
2./etc/gshadow:组密码与管理员文件
储存组的加密密码、组管理员(可管理组成员)格式:组名:加密密码:组管理员:附加组用户列表
[root@localhost ~]# tail -1 /etc/gshadow
dev:$6$abc123$xxx:zhangsan:lisi
解读:
组名为"dev":密码为"$6$abc123$xxx"SHA-512 加密的组密码(若为!或*表示无密码):组管理员为"zhangsan":附加用户"lisi"
加密密码拓展可看用户管理-/etc/shadow-拓展内容:密码加密)
3.辅助文件/etc/passwd(用户基本组关联)
用户的基本组在/etc/passwd中记录,格式:用户名:x:UID:GID:注释:家目录:shell。
[root@localhost ~]# tail -10 /etc/passwd
zhangsan:x:1000:1001:张三:/home/zhangsan:/bin/bash
解读:
用户名为zhangsan:密码位:x(表示密码存储在 /etc/shadow 中):UID为1000:GID为1001(即该用户的基本组GID为1001(dev)):注释:张三(用户备注信息): 家目录为/home/zhangsan(用户登录后默认的工作目录):shell为/bin/bash(用户默认使用的命令解释器)
三、常用操作命令
组管理的命令围绕 “创建 - 查询 - 修改 - 删除 - 用户关联 - 密码管理” 展开,每个命令的选项需熟练掌握。
1.创建组groupadd
语法:groupadd [选项] 组名
实例:
#创建一个指定GID为444的系统文件
[root@bogon ~]# groupadd -g 444 -r group_444
[root@bogon ~]# getent group group_444
group_444:x:444:
选项:
-g GID:指定组的 GID(必须唯一,非负整数)-r:创建系统组(GID 在 1-499,用于系统服务)-f:强制创建(若组已存在,不报错,仅提示 “组已存在”)o: 允许 GID 重复(与-g配合,极不推荐,会导致权限混乱)
2.查看组groups、id、getent、grep
常用示例:
- 查看当前用户所属组:
groups(输出当前用户的基本组和附加组) - 查看指定用户的详细组信息:
id lisi(显示lisi的 UID、基本组 GID 及所有附加组 GID)
常用命令语法:
-
groups:列出用户所属的所有组(基本组 + 附加组)语法:
groups [user]实例:
[root@bogon ~]# groups lisi lisi : lisi user1 group_444 解读: 用户lisi:基本组lisi + 附加组user1 group_444 -
id:显示用户的UID、基本组GID、附加组GIDs语法:
id [user]实例:
[root@bogon ~]# id lisi uid=1002(lisi) gid=1004(lisi) groups=1004(lisi),1003(user1),444(group_444) 解读: 用户的UID=1002、基本组GID=1004、附加组GIDs=1004(lisi),1003(user1),444(group_444) -
getent group:查询指定组的详细信息(含成员)语法:
getent group [组名]实例:
[root@bogon ~]# getent group lisi lisi:x:1004:user1 解读: 组名lisi : 有密码 :GID值为1004 :组内其他成员 user1 -
grep:直接从配置文件中查找组记录语法:
grep "组名" /etc/group实例:
[root@bogon ~]# grep "lisi" /etc/group user1:x:1003:lisi lisi:x:1004:user1 group_444:x:444:lisi
3.删除组groupdel
功能:从/etc/group和/etc/gshadow中删除组记录。
语法:groupdel 组名
限制:
- 不能删除用户的基本组(报错:
cannot remove the primary group of user 'xxx'); - 若组是附加组,删除后不影响用户基本组,但用户会失去该组的权限。
示例:
[root@bogon ~]# grep ":444:" /etc/group
group_444:x:444:lisi
[root@bogon ~]# groupdel group_444
[root@bogon ~]# grep ":444:" /etc/group
[root@bogon ~]#
注意事项:在删除组时如果该组为其他用户的基本组则会报错、所以我们采用以下策略。
查询组的 GID(确认组信息)
[root@bogon ~]# grep "lisi" /etc/group
user1:x:1003:lisi
lisi:x:1004:user1
查询绑定该 GID 的用户(确认基本组成员)
[root@bogon ~]# grep ":1004:" /etc/passwd
lisi:x:1002:1004::/home/lisi:/bin/bash
查看用户 ID 值(验证当前组归属)
[root@bogon ~]# id lisi
uid=1002(lisi) gid=1004(lisi) groups=1004(lisi),1003(user1)
更改用户的GID(解除基本组绑定)
[root@bogon ~]# usermod -g user1 lisi
更新查看用户ID值
[root@bogon ~]# id lisi
uid=1002(lisi) gid=1003(user1) groups=1003(user1)
删除组
[root@bogon ~]# groupdel lisi
修改(文件\目录)所属组chgrp
修改文件所属组的核心作用是:将文件的 GID 与指定组绑定,让该组的 “组权限”(g: rwx)对文件生效。
语法:chgrp [选项] 目标组(组名或GID) 文件/目录
选项:
-
-R:递归修改:对目录及其下所有子文件、子目录生效(必须用于目录)chgrp -R dev /opt/project将/opt/project目录及所有内容的所属组改为dev -
-h:仅修改符号链接本身的所属组,不跟随链接指向的原始文件(默认会跟随链接)chgrp -h dev link_to_log 修改符号链接link_to_log的所属组为dev,原始文件不变 -
-c:仅显示被修改的文件(静默模式,未修改的文件不输出)chgrp -c dev *.txt 只显示哪些.txt文件的所属组被改为dev -
-v:详细输出:显示所有操作的文件(包括未修改的)chgrp -v dev report.txt 输出 “report.txt 的所属组已改为 dev” 或 “report.txt 的所属组已是 dev”
常用实例:
递归修改目录文件所属组:将./d1目录下所有文件及其子目录所属组改为user1
#更改前先查看其权限
[root@bogon ~]# ll d1 d1/d2 d1/d2/t.txt
-rw-r--rw-. 1 root root 7 Oct 26 22:36 d1/d2/t.txtd1:
total 0
drwxr-xr-x. 2 root root 19 Oct 28 21:34 d2d1/d2:
total 4
-rw-r--rw-. 1 root root 7 Oct 26 22:36 t.txt
#递归更改所属组
[root@bogon ~]# chgrp -R user1 ./d1
#更新查看权限
[root@bogon ~]# ll d1 d1/d2 d1/d2/t.txt
-rw-r--rw-. 1 root user1 7 Oct 26 22:36 d1/d2/t.txtd1:
total 0
drwxr-xr-x. 2 root user1 19 Oct 28 21:34 d2d1/d2:
total 4
-rw-r--rw-. 1 root user1 7 Oct 26 22:36 t.txt
5.修改用户组归属(usermod / gpasswd)
修改用户组归属的核心作用是:调整用户与组的关联关系(基本组 / 附加组),或配置组的管理规则(成员、密码、管理员),最终实现用户权限的精准控制。
1.usermod:修改用户的基本组 / 附加组
语法:usermod [选项] 用户名
选项:
-
-g 组名/GID:修改用户的基本组(替换原有基本组)usermod -g develop zhangsan 将`zhangsan`的基本组改为`develop`,原基本组关联被替换。 -
-G 组1,组2:设置用户的附加组(覆盖原有附加组,仅保留指定组)usermod -G test,ops zhangsan 将`zhangsan`的附加组重置为`test`和`ops`,原有附加组全部移除。 -
-aG 组1,组2:向附加组中追加新组(保留原有附加组,新增指定组)usermod -aG dev zhangsan 给`zhangsan`新增`dev`附加组,不影响已有的其他附加组。
2.gpasswd:组密码与成员管理(更灵活)
语法:gpasswd [选项] 组名
选项:
-
-a 用户名:向组中添加用户(用户以附加组身份加入)gpasswd -a lisi dev 将`lisi`加入`dev`组,`dev`成为`lisi`的附加组。 -
-d 用户名:从组中删除用户(解除用户与组的附加关联)gpasswd -d lisi dev 将`lisi`从`dev`组中移除,`lisi`不再拥有该组的附加组权限。 -
-M 用户1,用户2:设置组的附加用户列表(覆盖原有成员)gpasswd -M zhangsan,lisi dev 将`dev`组的附加成员重置为`zhangsan`和`lisi`,原有成员全部移除。 -
-A 用户名:指定组管理员(非 root 用户也可执行组管理操作)gpasswd -A zhangsan dev 让`zhangsan`成为`dev`组管理员,可执行`-a`(加成员)、`-d`(删成员)操作。 -
-r:移除组密码(取消用户加入组时的密码验证)gpasswd -r dev 删除`dev`组的密码,后续用户加入该组无需输入组密码。 -
无选项:为组设置密码(用户加入组时需输入密码验证)
gpasswd dev 交互模式下为`dev`组设置密码,后续用户通过`newgrp dev`切换到该组时需输入密码。六、组权限与文件操作的联动(核心应用)
组的最终目的是控制文件访问权限,需结合
chgrp(修改文件所属组)和chmod(修改组权限)使用。1. 组权限配置:
chmod功能:设置文件对所属组的
r(读)、w(写)、x(执行)权限。语法:chmod [选项] 权限值 文件名-
字母模式:
g+权限(添加)、g-权限(移除)、g=权限(设置)。示例:
chmod g+w project.txt(给所属组添加写权限)。 -
数字模式:组权限对应中间数字(r=4,w=2,x=1)。
示例:
chmod 664 project.txt(组权限为6→rw-)。
场景示例:开发团队共享目录
/opt/dev,需让dev组有读写执行权限:chgrp -R dev /opt/dev # 所属组改为dev(用chgrp实现) chmod -R g+rwx /opt/dev # 组权限设为rwx -
七、总结:组管理的核心脉络
本质:通过 GID 将用户分组,简化多用户权限分配,核心是/etc/group和/etc/gshadow配置文件。
操作闭环:
- 创建(
groupadd)→ 查询(groups/id)→ 修改(groupmod)→ 删除(groupdel); - 用户关联(
usermod -aG/gpasswd -a)→ 权限生效(newgrp/ 重新登录); - 权限联动(
chgrp改所属组 +chmod改组权限)。
关键原则:
- 基本组唯一,附加组可多个;
- GID 必须唯一(除非强制
-o,不推荐); - 组权限仅作用于组内用户,与其他用户隔离。
