如何在 Linux 上管理用户组

组是Linux上实施自主访问控制(DAC)的重要部分,在一般情况下也适用于任何基于Unix的操作系统。创建、修改和删除组是相对简单的操作,可以使用默认安装的一些实用程序来完成。

在本教程中,我们将学习如何使用groupadd、groupmod和groupdel实用程序在Linux上创建、修改和删除组。

在本教程中,您将学习:

  • 如何使用groupadd在Linux上创建组
  • 如何检查哪些用户是组的成员
  • 如何使用groupmod修改组
  • 如何使用groupdel删除组

主组与附加组

在了解如何在Linux上创建、修改和删除组之前,我们应该澄清主组和附加/额外组之间的区别以及其存在的原因。如今,几乎所有的Linux发行版都采用了UPG(用户专用组)策略:每次添加用户到系统时,该用户会成为一个名为其用户名的组的成员,并自动创建这个组:这就是用户的主组。用户创建的所有文件都属于该主组。

采用这种策略可以使用umask 002,确保目录以775模式创建,文件以664模式创建:这为用户和他们所属的组赋予了读取和写入权限,并且结合使用了设置组ID位,简化了设置共享目录以进行协作。

正如我们所说,用户的主组在用户添加到系统时会自动创建。可以使用“groupadd”、“groupmod”和“groupdel”工具轻松创建、修改和删除附加组。让我们来看看如何操作。

创建一个组

为了在Linux上创建一个组,我们使用groupadd实用程序。命令的语法非常简单:在最基本的情况下,我们只需将要创建的组名作为参数传递。例如,假设我们要创建一个名为“93139”的新组。我们可以运行:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo groupadd 93139

新创建的组的条目将添加到/etc/group文件中:

93139:x:1002: 

/etc/group中的每个条目有4个字段:第一个包含组名,第二个包含组密码(大多数情况下,组不使用密码,因此该字段为空);第三个包含GID(组ID-在本例中为1002),第四个包含逗号分隔的组成员列表(如果组是用户的主组,则该用户不在此字段中列出)。

手动分配组ID(GID)

在创建组时,会自动分配一个GID给该组。默认策略是为组分配最低可用的GID。非系统组可分配的GID范围在/etc/login.defs文件中定义,通过GID_MIN和GID_MAX变量。前者的值通常是1000,而后者通常设置为60000:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ grep -E "^GID_(MIN|MAX)" /etc/login.defs
GID_MIN			 1000
GID_MAX			60000

如果我们想在创建组时提供特定的GID,可以使用“groupadd”命令加上-g(–gid)选项,将要使用的数字ID作为参数传递。在下面的示例中,我们创建一个名为“kungfu”的新组,并手动为其分配GID 1003:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo groupadd -g 1003 kungfu

创建系统组

在基于Unix的系统上,因此也包括Linux,我们像对待用户一样区分系统组和非系统组。系统组与普通组并没有本质上的区别:区别在于它们分配了不同范围的GID,并且主要用于系统服务。要创建系统组,我们使用“groupadd”命令,添加-r选项(简写形式是–system):

sudo groupadd -r kungfu

自动分配给系统组的GID范围是通过SYS_GID_MIN和SYS_GID_MAX变量定义的:

$ grep -E "^SYS_GID_(MIN|MAX)" /etc/login.defs
SYS_GID_MIN 201
SYS_GID_MAX 999

在创建组时填充组成员

当我们创建一个组时,我们可以指定应该包含哪些用户。我们只需使用-U(–users)选项,并将以逗号分隔的用户名列表作为参数传递;要使命令成功,指定的用户必须存在。例如,要创建“kungfu”组并将“yoga”和“wushu”用户添加为成员,我们可以运行:

$ sudo groupadd -U yoga,wushu kungfu

修改组

要修改组的定义,我们使用groupmod实用程序,使用方式与groupadd类似。我们来看一些示例。

更改组的GID

为了更改组的GID,我们使用groupmod实用程序,并使用-g选项,将要使用的新GID作为参数。例如,要将“kungfu”组的GID更改为1006,我们会运行:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo groupmod -g 1006 kungfu

当我们更改作为用户主组的组的GID时,用户定义会相应地更新。例如,假设我们创建了一个名为“linuxmi”的用户,其主组是“linuxmi”;“linuxmi”用户和“linuxmi”组都分配了ID 1001:

$ grep linuxmi /etc/group
linuxmi:x:1001:

$ grep linuxmi /etc/passwd
linuxmi:x:1001:1001::/home/linuxmi:/bin/bash

如果我们更改“linuxmi”组的GID,比如说到1003,用户的定义会自动更新:

我们将“linuxmi”组的GID更改为1003

$ sudo groupmod -g 1003 linuxmi

验证用户条目已更新

$ grep linuxmi /etc/passwd
linuxmi:x:1002:1003::/home/linuxmi:/bin/bash

然而,与旧组GID相关的文件必须手动更新以反映这些更改。

更改组名

要更改组名,操作方式类似:我们只需使用-n选项,并将新的组名作为参数。假设我们想将“kungfu”组的名称更改为“wushu”,我们会运行:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo groupmod -n wushu kungfu

更改组成员

要重新定义组的成员,我们使用-U选项,操作方式与使用“groupadd”实用程序时相同。请注意,使用此选项时,如果现有成员未在列表中明确指定,则将从组中删除现有成员。

删除组

如果我们想要删除一个组,我们需要使用groupdel实用程序。要删除一个组,只需将其名称作为参数传递:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo groupdel wushu

如果我们尝试删除的组是某个用户的主组,则命令将失败。在下一个示例中,我们尝试删除“linuxmi”组,它是“linuxmi”用户的主组:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo groupdel linuxmi
[sudo] linuxmi 的密码:
groupdel:不能移除用户“linuxmi”的主组

我无法想象有什么情况下需要删除用户的主组:当删除用户时,它的主组也会被删除,除非它没有其他成员(而且实际上不应该有)。但是,如果出于某种原因我们仍然想删除主组,命令可以使用-f(–force)选项进行强制:

$ sudo groupdel -f linuxmi

执行此操作后,用户仍将与已删除的主组的GID相关联。要解除此关联,我们需要为用户分配一个新的主组。我们可以通过运行以下命令来实现:

$ sudo usermod -g linuxmi

如果我们删除一个既不是任何用户的主组,且拥有成员的组,那么这些成员将自动从该组中移除。

结论

在本教程中,我们了解了Linux上主组和附加组之间的区别。我们了解了如何添加组以及如何列出其成员,如何修改它以及如何使用groupadd、groupmod和groupdel实用程序分别删除它。组也可以通过直接修改/etc/group文件,使用“vigr”实用程序进行“手动”管理。

The post 如何在 Linux 上管理用户组 first appeared on Linux迷.

版权声明:
作者:lichengxin
链接:https://www.techfm.club/p/90088.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>