菜鸟科技网

Linux分组命令有哪些?

Linux 系统中的分组命令是系统管理中非常重要的工具,主要用于对用户和用户组进行集中管理,从而简化权限控制、资源分配和安全策略的实施,在 Linux 中,用户组(Group)是一组用户的集合,通过将用户添加到不同的组中,可以实现对多个用户统一授权,例如允许某个组的用户访问特定目录、执行特定命令或使用特定设备,下面将详细介绍 Linux 中与分组管理相关的命令、配置文件及实际应用场景。

Linux分组命令有哪些?-图1
(图片来源网络,侵删)

用户组的基本概念

Linux 系统中的每个用户都必须属于至少一个主组(Primary Group),同时可以属于多个附加组(Supplementary Groups),主组在创建用户时自动创建,与用户名同名,而附加组允许用户临时获得其他组的权限,用户组的配置信息主要存储在 /etc/group 文件中,该文件包含组名、组密码占位符(通常为 x,表示密码存储在 /etc/gshadow 中)、组 ID(GID)和组成员列表。

root:x:0:
sudo:x:27:alice,bob
developers:x:1000:charlie,david

developers 组的 GID 为 1000,成员包括 charliedavid

常用的分组管理命令

groupadd:创建新组

groupadd 命令用于创建一个新的用户组,基本语法为 groupadd [选项] 组名,常用选项包括:

  • -g:指定 GID,避免系统自动分配。groupadd -g 2000 testgroup 会创建 GID 为 2000 的 testgroup
  • -r:创建系统组,GID 会自动选择小于 999 的值(具体取决于系统配置)。groupadd -r systemgroup 会创建一个系统组。

groupmod:修改组属性

groupmod 命令用于修改已存在组的属性,语法为 groupmod [选项] 组名,常用选项:

Linux分组命令有哪些?-图2
(图片来源网络,侵删)
  • -n:修改组名。groupmod -n newname oldnameoldname 组重命名为 newname
  • -g:修改 GID。groupmod -g 3000 developersdevelopers 组的 GID 改为 3000。

groupdel:删除组

groupdel 命令用于删除已存在的组,语法为 groupdel 组名,需要注意的是,只有当该组没有作为任何用户的主组时才能删除,如果组中有用户作为附加组成员,则可以安全删除,但不会影响用户的附加组属性。groupdel testgroup 会删除 testgroup 组。

groups:显示用户所属组

groups 命令用于查看当前用户或指定用户所属的所有组。groups alice 会显示用户 alice 的主组和所有附加组。

gpasswd:管理组成员和密码

gpasswd 是组管理的核心命令,用于添加/删除组成员、设置组密码等,语法为 gpasswd [选项] 组名,常用选项:

  • -a 用户名:将用户添加到组中。gpasswd -a eve developerseve 添加到 developers 组。
  • -d 用户名:从组中删除用户。gpasswd -d bob developersbobdevelopers 组移除。
  • -M 用户列表:一次性设置组的所有成员(覆盖原有成员)。gpasswd -M "eve,frank" developersdevelopers 组的成员设置为 evefrank
  • -A 用户列表:设置组管理员,允许管理员通过 gpasswd 管理组成员。gpasswd -A alice,frank developersalicefrank 设为 developers 组的管理员。
  • -r:删除组密码(如果组设置了密码,用于 newgrp 命令切换组)。
  • -R:禁止其他用户切换到该组。

newgrp:切换用户组

newgrp 命令允许用户临时切换到其他组,从而获得该组的权限,语法为 newgrp [组名]newgrp developers 会将当前用户的组切换为 developers,但需要该组有密码或用户是组成员,切换后,新创建的文件默认属于 developers 组。

Linux分组命令有哪些?-图3
(图片来源网络,侵删)

分组管理的实际应用场景

统一文件权限管理

假设有一个项目目录 /project/code,需要让开发团队的所有成员读写执行,而其他用户无权限,可以通过以下步骤实现:

  1. 创建 developers 组:groupadd developers
  2. 将开发团队成员添加到组:gpasswd -a alice developersgpasswd -a bob developers
  3. 设置目录的组所有者:chgrp developers /project/code
  4. 设置目录权限:chmod 2770 /project/code2 表示设置 setgid 位,使新文件继承目录的组所有者)。

限制命令执行权限

通过 sudo 配置,可以允许某个组的用户执行特定命令,在 /etc/sudoers 文件中添加:

%developers ALL=/usr/bin/systemctl restart nginx

这表示 developers 组的所有用户可以执行 systemctl restart nginx 命令。

磁盘配额管理

通过 setquota 命令,可以为某个组设置磁盘使用限制,限制 developers 组在 /home 分区最多使用 10GB:

setquota -g developers 10G 12G 0 0 /home

分组命令操作流程示例

以下是一个完整的分组管理操作流程,包括创建组、添加用户、修改组属性和删除组:

  1. 创建 project_team 组并指定 GID:groupadd -g 1500 project_team
  2. 将用户 user1user2 添加到组:gpasswd -a user1 project_teamgpasswd -a user2 project_team
  3. 查看组成员:grep project_team /etc/group,输出应为 project_team:x:1500:user1,user2
  4. 修改组名为 dev_teamgroupmod -n dev_team project_team
  5. 删除组:groupdel dev_team

常见问题与注意事项

  1. 无法删除组:如果删除组时提示 groupdel: cannot remove the primary group of user 'username',说明该组是某个用户的主组,需要先修改用户的主组(使用 usermod -g 新主组 用户名)或删除用户(使用 userdel -r 用户名)。
  2. 组密码的作用:组密码主要用于 newgrp 命令,当用户需要切换到非主组且该组设置了密码时,需要输入密码,一般情况下,附加组无需设置密码,直接通过 gpasswd 添加用户即可。

相关问答FAQs

Q1:如何查看系统中所有组的列表?
A1:可以通过以下两种方式查看所有组:

  1. 查看 /etc/group 文件:cat /etc/group,每行显示一个组的信息。
  2. 使用 getent 命令:getent group,该方法会查询系统数据库(包括本地文件和远程服务如 LDAP),适用于复杂环境。

Q2:如何批量将多个用户添加到同一个组?
A2:可以通过以下两种方法实现:

  1. 使用 gpasswd-M 选项一次性设置组成员:gpasswd -M "user1,user2,user3" 组名,注意用户名之间用逗号分隔且无空格。
  2. 结合循环命令(如 forwhile)逐个添加用户,for user in user1 user2 user3; do gpasswd -a $user 组名; done
分享:
扫描分享到社交APP
上一篇
下一篇