Linux---用户组

1. 用户组的基本概念

在 Linux 系统里,用户组是具有相同特征的用户集合。系统通过用户组对资源的访问权限进行管理,这意味着属于同一用户组的用户可以共享该组所拥有的权限。比如,一个项目团队的成员可以被划分到同一个用户组中,这样他们就可以共同访问项目相关的文件和目录。

2. 用户组的分类

2.1 基本用户组(Primary Group)

每个用户都必须属于一个基本用户组。当创建用户时,如果没有特别指定,系统会自动创建一个与用户名相同的用户组作为该用户的基本用户组。基本用户组的主要作用是为用户提供默认的文件和目录创建权限。例如,当用户创建一个新文件时,该文件的所属用户组就是用户的基本用户组。

2.2 附加用户组(Supplementary Group)

除了基本用户组外,用户还可以属于一个或多个附加用户组。附加用户组可以让用户获得额外的权限。例如,一个用户可能同时属于开发组和测试组,这样他就可以访问开发组和测试组所拥有的资源。

3. 用户组相关的配置文件

3.1 /etc/group

这是 Linux 系统中存储用户组信息的主要文件。文件中的每一行代表一个用户组,每行的格式如下:

plaintext 复制代码
group_name:password:GID:user_list
  • group_name:用户组的名称,是用户组的唯一标识。
  • password:用户组的密码,一般为空或使用 x 表示密码存储在 /etc/gshadow 文件中。
  • GID:用户组的唯一标识符,是一个整数。
  • user_list:属于该用户组的用户列表,多个用户之间用逗号分隔。

例如:

plaintext 复制代码
developers:x:1001:john,mary

表示名为 developers 的用户组,GID 为 1001,包含用户 johnmary

3.2 /etc/gshadow

该文件用于存储用户组的加密密码和组管理员信息,是一个加密的用户组信息文件,只有 root 用户可以访问。每行的格式如下:

plaintext 复制代码
group_name:password:admin_list:user_list
  • group_name:用户组的名称。
  • password:用户组的加密密码。
  • admin_list:组管理员列表,多个管理员之间用逗号分隔。
  • user_list:属于该用户组的用户列表,多个用户之间用逗号分隔。

4. 用户组的管理命令

4.1 groupadd

用于创建新的用户组,基本语法如下:

bash 复制代码
groupadd [选项] 组名

常见选项:

  • -g:指定用户组的 GID。
  • -r:创建系统用户组,其 GID 通常小于 1000。

例如,创建一个名为 designers 的用户组,并指定 GID 为 1002:

bash 复制代码
sudo groupadd -g 1002 designers
4.2 groupdel

用于删除指定的用户组,基本语法如下:

bash 复制代码
groupdel 组名

需要注意的是,不能删除当前有用户属于该组的用户组,除非先将用户从该组中移除。例如,删除名为 testers 的用户组:

bash 复制代码
sudo groupdel testers
4.3 groupmod

用于修改用户组的属性,基本语法如下:

bash 复制代码
groupmod [选项] 组名

常见选项:

  • -g:修改用户组的 GID。
  • -n:修改用户组的名称。

例如,将用户组 developers 的名称修改为 programmers

bash 复制代码
sudo groupmod -n programmers developers
4.4 usermod

除了管理用户信息外,还可以用于修改用户所属的用户组。使用 -a -G 选项可以将用户添加到指定的附加用户组中,而不会影响用户的基本用户组。例如,将用户 alice 添加到 designers 用户组:

bash 复制代码
sudo usermod -a -G designers alice
4.5 gpasswd

用于管理用户组的密码和成员,基本语法如下:

bash 复制代码
gpasswd [选项] 组名

常见选项:

  • -a:将用户添加到指定的用户组。
  • -d:将用户从指定的用户组中移除。
  • -M:指定属于该用户组的用户列表。

例如,将用户 bob 添加到 testers 用户组:

bash 复制代码
sudo gpasswd -a bob testers

5. 用户组的权限管理

在 Linux 系统中,文件和目录的权限分为读(r)、写(w)和执行(x)三种,并且可以针对文件和目录的所有者、所属用户组以及其他用户分别设置不同的权限。通过修改用户组的权限,可以控制属于该用户组的用户对文件和目录的访问权限。

5.1 chgrp

用于修改文件或目录的所属用户组,基本语法如下:

bash 复制代码
chgrp [选项] 组名 文件或目录名

常见选项:

  • -R:递归地修改指定目录及其子目录下所有文件和目录的所属用户组。

例如,将文件 project.txt 的所属用户组修改为 developers

bash 复制代码
sudo chgrp developers project.txt
5.2 chmod

用于修改文件或目录的权限,基本语法如下:

bash 复制代码
chmod [选项] 权限模式 文件或目录名

权限模式可以使用数字表示(如 755),也可以使用符号表示(如 u+rwx,g+rx,o-rw)。例如,将文件 report.txt 的所属用户组的权限设置为读和写:

bash 复制代码
chmod g+rw report.txt

6. 用户组的应用场景

6.1 团队协作

在企业或项目开发中,不同的团队成员可以被划分到不同的用户组中,每个用户组拥有不同的权限。例如,开发团队可以访问项目的源代码目录,而测试团队只能访问测试相关的文件和目录。

6.2 系统安全

通过合理设置用户组和权限,可以增强系统的安全性。例如,将普通用户添加到特定的用户组中,使其只能访问必要的系统资源,从而减少系统被攻击的风险。

6.3 资源共享

属于同一用户组的用户可以方便地共享文件和目录。例如,一个部门的员工可以被划分到同一个用户组中,他们可以在共享目录下共同编辑和管理文件。

7. 用户组的查看和验证

7.1 groups

用于查看当前用户或指定用户所属的用户组,基本语法如下:

bash 复制代码
groups [用户名]

如果不指定用户名,则默认查看当前用户所属的用户组。例如,查看用户 john 所属的用户组:

bash 复制代码
groups john
7.2 id

可以显示用户的详细信息,包括用户的 UID、GID 以及所属的附加用户组,基本语法如下:

bash 复制代码
id [用户名]

如果不指定用户名,则默认显示当前用户的信息。例如,查看用户 mary 的信息:

bash 复制代码
id mary
相关推荐
路溪非溪4 分钟前
Linux的gpio子系统
linux·运维·服务器
夫子3965 分钟前
OnlyOffice的高可用方案如何做
运维·架构
范紫涵-19期-工职大7 分钟前
虚拟机之CentOS、网络设置的有趣问题
linux·网络·centos
梅孔立18 分钟前
服务器不支持node.js16以上版本安装?用Docker轻松部署Node.js 20+环境运行Strapi项目
服务器·docker·node.js
Linux运维技术栈38 分钟前
Terraform 从入门到实战:历史、原理、功能与阿里云/Azure 上手指南
运维·阿里云·kubernetes·azure·terraform
wdfk_prog40 分钟前
[Linux]学习笔记系列 -- lib/dump_stack.c 栈回溯打印(Stack Trace Dumping) 内核调试与错误诊断的基石
linux·运维·服务器·c语言·笔记·学习
不可能的是1 小时前
Docker与Ubuntu环境下apt-get报错完全解决指南
运维
蓝倾9761 小时前
小红书获取用户作品列表API接口操作指南
java·服务器·前端·python·电商开放平台·开放api接口
bantinghy1 小时前
RPC内核细节(转载)
linux·服务器·网络·网络协议·rpc
雨季西柚1 小时前
Docker网络模式解析
linux·运维·kubernetes