🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习
🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发
❄️作者主页:一个平凡而乐于分享的小比特的个人主页
✨收录专栏:Linux,本专栏目的在于,记录学习Linux操作系统的总结
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

Linux 用户和组的创建机制
问题提出

从图中,可以看出,我创建了一个张三的用户,并添加到Linux组里

查看Linux组,也存在张三的用户。但是我检查当前家目录权限时,显示zhangsan用户,在zhangsan组下:

问题是我并没有创建zhangsan组呀!更没有把zhangsan用户添加到zhangsan组下!通过问deepseek才了解到根本原因。分享给大家。
为什么显示的是 zhangsan 组而不是 linux 组?
查看用户信息

逐部分解析:
uid=1001(zhangsan)uid:用户ID(User ID)1001:系统分配给zhangsan的用户数字IDzhangsan:用户名
gid=1002(zhangsan)gid:主组ID(Group ID)1002:zhangsan的主组数字IDzhangsan:主组名(默认与用户名相同)
组=1002(zhangsan),1001(linux)- 用户
zhangsan所属的所有组 1002(zhangsan):主组1001(linux):附加组(你通过-G linux添加的)
- 用户
可视化表示:
text
用户:zhangsan
├── 用户ID(uid):1001
├── 主组ID(gid):1002(组名:zhangsan)
└── 所属的所有组:
├── 主组:zhangsan(1002)
└── 附加组:linux(1001)
这意味着什么?
- 主组 :
zhangsan- 这是系统自动创建的默认主组
- 新创建的文件默认属于这个组
- 命令
newgrp linux可以临时切换主组
- 附加组 :
linux- 用户可以访问
linux组拥有的资源 - 比如:如果某个文件/目录的组权限是
linux组,zhangsan可以访问
- 用户可以访问
方法一:修改现有用户的主组
bash
# 修改主组
sudo usermod -g linux zhangsan
# 检查
id zhangsan

可以看到修改后zhangsan用户的主组更变为Linux组
方法二:创建时同时设置主组和附加组
区别
| 参数 | 含义 | 示例 |
|---|---|---|
-g |
设置主组 | -g linux |
-G |
设置附加组 | -G linux |
| 同时使用 | 主组+附加组 | -g linux -G sudo |
所以你现在的情况是:
- 主组:
zhangsan(系统自动创建的) - 附加组:
linux(你通过-G添加的)
这是正常的 Linux 用户管理行为。如果你希望 linux 是主组,需要明确指定 -g linux。
主组 vs 附加组
1. 数量区别
- 主组 :每个用户有且只有1个主组
- 附加组 :每个用户可以有0个或多个附加组
2. 作用区别
| 特性 | 主组(Primary Group) | 附加组(Supplementary Group) |
|---|---|---|
| 创建文件时 | 文件的默认所属组 | 不影响文件所属组 |
| 必须有 | 是,每个用户必须有一个 | 不是必须的,可以有0个或多个 |
| 默认值 | 创建用户时自动创建同名组 | 需要手动指定 |
| 查看方式 | id 命令的 gid= 部分 |
id 命令的 组= 部分 |
实际例子解释:
情况1:zhangsan 创建文件
bash
su - zhangsan
touch myfile.txt
ls -l myfile.txt
输出会是:
text
-rw-r--r-- 1 zhangsan zhangsan 0 Dec 29 09:00 myfile.txt
# ↑ 文件的组是 "zhangsan"(主组),不是 "linux"
情况2:临时切换主组
bash
# zhangsan 用户执行
newgrp linux # 临时切换到 linux 组
touch linuxfile.txt
ls -l linuxfile.txt
输出会是:
text
-rw-r--r-- 1 zhangsan linux 0 Dec 29 09:01 linuxfile.txt
# ↑ 文件的组现在是 "linux"
情况3:访问权限验证
假设有一个文件夹:
bash
# root 用户执行
sudo mkdir /shared
sudo chown root:linux /shared # 所有者 root,组 linux
sudo chmod 770 /shared # root 和 linux 组成员可读写
现在:
zhangsan可以访问/shared(因为它是linux组成员)- 其他非
linux组成员不能访问
你的 zhangsan 用户可以:
- 作为
zhangsan组的一员 :- 创建文件时默认属于
zhangsan组 - 访问
zhangsan组有权限的资源
- 创建文件时默认属于
- 作为
linux组的一员 :- 访问
linux组有权限的资源 - 当需要时,可以用
newgrp linux切换到linux组创建文件
- 访问
查看当前用户的所有组信息
bash
# 当前用户(zhangsan)查看自己所在组
groups
# 查看详细组信息
id
# 查看具体某个用户的组
groups zhangsan
总结:
- ✅ zhangsan 确实同时在两个组里 :
zhangsan组(主组)和linux组(附加组) - ✅ 区别在于:新建文件默认使用主组,但用户可以访问所有组(主组+附加组)的资源
- ✅ 实际意义:用户可以拥有多个身份,访问不同组的资源
这是 Linux 权限管理的灵活之处:一个用户可以通过加入不同的组,获得对多个资源的访问权限,而无需单独为每个用户设置权限。