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
相关推荐
神秘的土鸡3 分钟前
Centos搭建Tomcat服务器:我的实战经验分享(成功版本 详细!)
linux·开发语言·python·tomcat·web
IT小饕餮29 分钟前
linux 基础网络配置文件
linux·服务器·网络
未来之窗软件服务1 小时前
lite_avatar 数字人命令行-安装故障解决
linux·运维·服务器·数字人
IT大头娃娃1 小时前
配置银河麒麟V10高级服务器操作系统安装vmware tools。在您的计算机上尚未找到用于此虚拟机的 VMwareTools。安装将无法继续。
运维·服务器
m0_694845571 小时前
什么是站群服务器?站群服务器应该怎么选?
linux·运维·服务器·云计算·github
xdpcxq10291 小时前
CentOS 8 停止维护后通过 rpm 包手动安装 docker
linux·docker·centos
lisw052 小时前
【Linux】Bash是什么?怎么使用?
linux·开发语言·bash
夜璨如炽2 小时前
CentOS 7 设置 Nginx 开机自启(使用 Systemd)
linux·nginx·centos
yscript2 小时前
linux系统安装和激活conda
linux·运维·人工智能·python·深度学习·conda
绝顶少年2 小时前
nginx请求限流设置:常见的有基于 IP 地址的限流、基于请求速率的限流以及基于连接数的限流
运维·tcp/ip·nginx