首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Linux 用户和组的创建机制

Linux 用户和组的创建机制

作者头像
一个平凡而乐于分享的小比特
发布2026-02-02 16:57:09
发布2026-02-02 16:57:09
750
举报

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

在这里插入图片描述
在这里插入图片描述

Linux 用户和组的创建机制

问题提出

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

问题是我并没有创建zhangsan组呀!更没有把zhangsan用户添加到zhangsan组下!通过问deepseek才了解到根本原因。分享给大家。

为什么显示的是 zhangsan 组而不是 linux 组?

查看用户信息
在这里插入图片描述
在这里插入图片描述
逐部分解析:
  1. uid=1001(zhangsan)
    • uid:用户ID(User ID)
    • 1001:系统分配给 zhangsan用户数字ID
    • zhangsan:用户名
  2. gid=1002(zhangsan)
    • gid:主组ID(Group ID)
    • 1002zhangsan主组数字ID
    • zhangsan:主组名(默认与用户名相同)
  3. 组=1002(zhangsan),1001(linux)
    • 用户 zhangsan 所属的所有组
    • 1002(zhangsan):主组
    • 1001(linux):附加组(你通过 -G linux 添加的)

可视化表示:

代码语言:javascript
复制
用户:zhangsan
├── 用户ID(uid):1001
├── 主组ID(gid):1002(组名:zhangsan)
└── 所属的所有组:
    ├── 主组:zhangsan(1002)
    └── 附加组:linux(1001)

这意味着什么?

  1. 主组zhangsan
    • 这是系统自动创建的默认主组
    • 新创建的文件默认属于这个组
    • 命令 newgrp linux 可以临时切换主组
  2. 附加组linux
    • 用户可以访问 linux 组拥有的资源
    • 比如:如果某个文件/目录的组权限是 linux 组,zhangsan 可以访问
方法一:修改现有用户的主组
代码语言:javascript
复制
# 修改主组
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 创建文件
代码语言:javascript
复制
su - zhangsan
touch myfile.txt
ls -l myfile.txt

输出会是:

代码语言:javascript
复制
-rw-r--r-- 1 zhangsan zhangsan 0 Dec 29 09:00 myfile.txt
# ↑ 文件的组是 "zhangsan"(主组),不是 "linux"
情况2:临时切换主组
代码语言:javascript
复制
# zhangsan 用户执行
newgrp linux  # 临时切换到 linux 组
touch linuxfile.txt
ls -l linuxfile.txt

输出会是:

代码语言:javascript
复制
-rw-r--r-- 1 zhangsan linux 0 Dec 29 09:01 linuxfile.txt
# ↑ 文件的组现在是 "linux"
情况3:访问权限验证

假设有一个文件夹:

代码语言:javascript
复制
# root 用户执行
sudo mkdir /shared
sudo chown root:linux /shared  # 所有者 root,组 linux
sudo chmod 770 /shared         # root 和 linux 组成员可读写

现在:

  • zhangsan 可以访问 /shared(因为它是 linux 组成员)
  • 其他非 linux 组成员不能访问

你的 zhangsan 用户可以:

  1. 作为 zhangsan 组的一员
    • 创建文件时默认属于 zhangsan
    • 访问 zhangsan 组有权限的资源
  2. 作为 linux 组的一员
    • 访问 linux 组有权限的资源
    • 当需要时,可以用 newgrp linux 切换到 linux 组创建文件

查看当前用户的所有组信息

代码语言:javascript
复制
# 当前用户(zhangsan)查看自己所在组
groups

# 查看详细组信息
id

# 查看具体某个用户的组
groups zhangsan

总结:

  • zhangsan 确实同时在两个组里zhangsan 组(主组)和 linux 组(附加组)
  • 区别在于:新建文件默认使用主组,但用户可以访问所有组(主组+附加组)的资源
  • 实际意义:用户可以拥有多个身份,访问不同组的资源

这是 Linux 权限管理的灵活之处:一个用户可以通过加入不同的组,获得对多个资源的访问权限,而无需单独为每个用户设置权限。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux 用户和组的创建机制
    • 问题提出
    • 为什么显示的是 zhangsan 组而不是 linux 组?
      • 查看用户信息
      • 逐部分解析:
    • 可视化表示:
    • 这意味着什么?
      • 方法一:修改现有用户的主组
      • 方法二:创建时同时设置主组和附加组
      • 区别
    • 主组 vs 附加组
      • 1. 数量区别
      • 2. 作用区别
    • 实际例子解释:
      • 情况1:zhangsan 创建文件
      • 情况2:临时切换主组
      • 情况3:访问权限验证
    • 你的 zhangsan 用户可以:
    • 查看当前用户的所有组信息
    • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档