在 Linux 系统管理中,有效地管理用户和组是一项基础且至关重要的任务。通常,只有具备管理员权限(如 root 用户或使用 sudo)才能执行将用户添加到组的操作。理解 Linux 中的组类型是第一步:
- 主组(Primary Group):每个用户在创建时都会有一个与之同名的主组。当用户创建新文件时,该文件的默认组属性即为用户的主组。主组信息记录在
/etc/passwd 文件中。
- 次级组(Secondary/Supplementary Group):用户可以被加入一个或多个次级组,以获得对特定软件、文件或目录的额外访问权限。这为精细化的权限控制提供了可能,例如在 运维/DevOps/SRE 场景中管理服务账户权限。
每个用户必须属于一个主组,同时可以隶属于多个次级组。本文将详细介绍在 Ubuntu 24.04 系统中,如何运用多种命令行工具来完成用户与组的管理操作。
查看现有用户与组
在执行任何添加操作之前,你可能需要先确认系统中已有的用户和组。
使用以下命令可以列出所有系统用户(仅显示用户名):
cat /etc/passwd | awk -F: '{print $1}'

要查看所有现有的组,可以运行:
cut -d: -f1 /etc/group

将现有用户添加到组
对于已存在的用户,你可以使用 adduser、gpasswd 或 usermod 命令将其加入新的组。
1. 使用 adduser 命令
adduser 命令不仅用于创建用户,也能方便地将现有用户添加到指定组。其基本语法如下:
sudo adduser <用户名> <组名>
例如,将用户 sys 添加到 adm 组:
sudo adduser sys adm
2. 使用 gpasswd 命令
gpasswd 命令专门用于管理 /etc/group 文件,是另一个添加用户到组的实用工具。
添加单个用户:
sudo gpasswd -a <用户名> <组名>
示例:将用户 backup 添加到 voice 组。
sudo gpasswd -a backup voice
一次性添加多个用户到同一个组:
-M 选项允许你指定一个逗号分隔的用户列表来设置组的成员(注意:这会覆盖组现有的成员列表)。
sudo gpasswd -M <用户1>,<用户2>,<用户3> <组名>
示例:将用户 news、mail 和 lp 设置为 proxy 组的成员。
sudo gpasswd -M news,mail,lp proxy
3. 使用 usermod 命令
usermod 命令功能强大,常用于修改用户的各项属性,包括其所属的组。这是最常用且推荐的方法之一。
添加用户到一个次级组:
sudo usermod -aG <组名> <用户名>
-a (append):表示将用户追加到组,而不移除该用户原有的其他组身份。
-G:指定一个或多个次级组。
一个非常常见的实际应用是,在安装 Docker 后,为了避免每次执行 Docker 命令都需要 sudo,需要将当前用户添加到 docker 组:
sudo usermod -aG docker $USER
执行此命令后,通常需要注销并重新登录,或启动新的 shell 会话,组更改才会生效。
添加用户到多个次级组:
你可以在一条命令中将用户加入多个组,组名之间用逗号分隔,不要有空格。
sudo usermod -aG <组1>,<组2>,<组3> <用户名>
示例:将用户 uucp 同时添加到 floppy 和 cdrom 组。
sudo usermod -aG floppy,cdrom uucp
创建新用户时直接指定组
除了管理现有用户,在创建新用户时,你也可以直接指定其主组或次级组。
创建用户并指定主组 (-g):
sudo useradd -g <组名> <新用户名>
创建用户并指定一个或多个次级组 (-G):
sudo useradd -G <组名> <新用户名>
示例:创建一个名为 devops 的新用户,并使其成为 man 组的成员。
sudo useradd -G man devops
验证用户所属的组
操作完成后,如何确认用户是否已被成功添加到目标组呢?
-
使用 groups 命令查看用户所在的所有组:
groups <用户名>
-
使用 id 命令获取更详细的用户身份信息,包括用户ID(Uid)、主组ID(Gid)以及所属的所有组ID(Groups):
id <用户名>
总结
在 Ubuntu 24.04 等 Linux 发行版中,熟练地将用户添加到组是进行权限控制和系统管理的基础技能。本文介绍了三种核心命令:
usermod -aG:最常用、最安全的方式,用于为现有用户添加次级组。
gpasswd:适合专门管理组成员,尤其是一次性设置多个成员。
adduser:语法简单直观,同样适用于现有用户。
理解主组与次级组的区别,并正确运用这些命令,可以帮助你更好地配置服务器权限、管理软件访问控制,是每位系统管理员或开发者在处理 网络/系统 基础架构时必须掌握的技巧。记住,涉及组变更后,通常需要用户重新登录才能使新的组权限生效。