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
相关推荐
cocologin17 分钟前
RIP 技术深度解析
运维·网络·网络协议
cv高级工程师YKY28 分钟前
SRE - - PV、UV、VV、IP详解及区别
大数据·服务器·uv
庸子35 分钟前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins
眠修1 小时前
Kuberrnetes 服务发布
linux·运维·服务器
好奇的菜鸟2 小时前
Docker 配置项详解与示例
运维·docker·容器
xcs194052 小时前
集运维 麒麟桌面版v10 sp1 2403 aarch64 离线java开发环境自动化安装
运维·自动化
BAOYUCompany2 小时前
暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目
运维·服务器
超龄超能程序猿3 小时前
Bitvisse SSH Client 安装配置文档
运维·ssh·github
奈斯ing3 小时前
【Redis篇】数据库架构演进中Redis缓存的技术必然性—高并发场景下穿透、击穿、雪崩的体系化解决方案
运维·redis·缓存·数据库架构
鳄鱼皮坡4 小时前
仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器
运维·服务器