主题
Linux用户和用户组管理
课程介绍
Linux作为多用户操作系统,用户和用户组管理是系统运维的核心基础能力。本课程将详细讲解用户组、用户的创建、删除、修改及信息查询等核心操作,涵盖groupadd/useradd/usermod等高频命令的用法,掌握这些内容可实现Linux系统用户权限的精细化管理。所有管理命令均需root权限执行。
1. 用户和用户组核心概念
Linux系统通过用户(User)和用户组(Group)实现权限隔离,核心特性如下:
1.1 基础定义
- 用户(User):系统中每个使用者的唯一身份标识,对应唯一UID(用户ID)。
- 用户组(Group):多个用户的集合,便于批量分配权限,对应唯一GID(组ID)。
- 权限控制:基于用户/用户组维度,对文件、目录等资源分配读(r)、写(w)、执行(x)权限。
1.2 主组与附加组
这是Linux用户组管理的核心区分,每个用户必然关联“主组”,可选关联“附加组”:
| 类型 | 定义 | 特点 |
|---|---|---|
| 主组 | 用户默认所属的组,创建用户时若不指定(-g),会自动创建同名主组 | 1. 每个用户只能有一个主组; 2. id命令中gid=后的组即为主组;3. 无法直接移除,只能通过 usermod -g修改 |
| 附加组 | 用户额外加入的组,用于获取该组的权限 | 1. 每个用户可以有多个附加组; 2. id命令中groups=后除主组外的均为附加组;3. 通过 usermod -a -G添加、gpasswd -d移除 |
1.3 关键特点
- 支持多用户同时登录,互不干扰;
- 系统用户(UID 0-999)用于运行服务,普通用户(UID 1000+)供人工登录使用;
- 按用户/用户组粒度管控权限,提升系统安全性。

2. 用户组管理命令
用户组管理聚焦组的创建、删除和成员维护,以下是核心命令详解:
2.1 创建用户组 - groupadd
创建新的用户组,默认分配未使用的GID(1000+)。
命令语法:
bash
groupadd 组名示例:
bash
# 创建名为gaokun的用户组
root@localhost:~# groupadd gaokun2.2 删除用户组 - groupdel
删除指定的用户组,需注意主组与附加组的区别。
命令语法:
bash
groupdel 组名示例:
bash
# 删除名为test的用户组
root@localhost:~# groupdel test注意事项:
- 不能删除“用户主组”(需先通过
usermod -g修改用户主组,或删除该用户); - 若组仅为用户的附加组,即使包含用户也可直接删除。
2.3 管理用户组成员 - gpasswd
专门用于添加/移除用户组中的附加组成员,补充usermod -a -G的用法。
命令语法:
bash
gpasswd [选项] 用户名 组名常用选项:
| 选项 | 功能描述 |
|---|---|
-a | 将用户添加到指定附加组 |
-d | 将用户从指定附加组移除 |
示例1:添加用户到附加组
bash
# 将test4添加到gaokun组(附加组)
root@localhost:~# gpasswd -a test4 gaokun
Adding user test4 to group gaokun示例2:移除用户从附加组
bash
# 将test4从gaokun组移除
root@localhost:~# gpasswd -d test4 gaokun
Removing user test4 from group gaokun3. 用户管理命令
用户管理涵盖用户的创建、删除、属性修改及信息查询,是日常运维高频操作:
3.1 创建用户 - useradd
创建新用户账户,可指定主组、home目录等自定义配置。
命令语法:
bash
useradd [选项] 用户名常用选项:
| 选项 | 功能描述 |
|---|---|
-g | 指定用户的主组(默认创建同名主组) |
-d | 指定用户的home目录(默认/home/用户名) |
-s | 指定用户的登录shell(默认/bin/bash) |
-m | 强制创建home目录(部分发行版默认不创建) |
示例1:创建默认配置的用户
bash
# 创建名为test的用户,自动创建同名主组test,home目录为/home/test
root@localhost:~# useradd test示例2:指定主组和自定义home目录
bash
# 创建test2用户,主组为gaokun,home目录为/home/test222,强制创建home目录
root@localhost:~# useradd -g gaokun -d /home/test222 -m test23.2 设置用户密码 - passwd
创建用户后默认无密码(无法登录),需通过passwd设置密码。
命令语法:
bash
passwd [用户名]示例1:修改当前登录用户密码
bash
root@localhost:~# passwd
Enter new UNIX password: # 输入密码(无回显)
Retype new UNIX password: # 确认密码
passwd: password updated successfully示例2:修改指定用户密码
bash
# 为test2设置登录密码
root@localhost:~# passwd test2
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully3.3 删除用户 - userdel
删除指定用户账户,可选是否清理home目录。
命令语法:
bash
userdel [选项] 用户名常用选项:
| 选项 | 功能描述 |
|---|---|
-r | 同时删除用户的home目录和邮件目录 |
示例1:仅删除用户账户(保留home目录)
bash
# 删除test2用户,手动清理home目录
root@localhost:~# userdel test2
root@localhost:~# rm -rf /home/test222示例2:删除用户及所有关联目录
bash
# 删除test用户及其home目录
root@localhost:~# userdel -r test3.4 修改用户 - usermod
修改用户的主组、附加组、home目录等属性。
命令语法:
bash
usermod [选项] 用户名常用选项:
| 选项 | 功能描述 |
|---|---|
-g | 修改用户的主组 |
-a -G | 将用户添加到附加组(必须加-a,否则覆盖原有附加组) |
-d | 修改用户的home目录 |
-s | 修改用户的登录shell |
示例1:添加用户到附加组(正确用法)
bash
# 将test4添加到gaokun组(附加组),保留原有附加组
root@localhost:~# usermod -a -G gaokun test4示例2:修改用户主组
bash
# 将test4的主组从test4改为gaokun
root@localhost:~# usermod -g gaokun test4
# 验证:主组已变更,附加组保留
root@localhost:~# id test4
uid=1004(test4) gid=1001(gaokun) groups=1001(gaokun),1005(other)3.5 查看用户信息 - id
快速查询用户的UID、GID及所属所有组(主组+附加组)。
命令语法:
bash
id [用户名]示例1:查看当前用户信息
bash
root@localhost:~# id
uid=0(root) gid=0(root) groups=0(root)示例2:查看指定用户信息(区分主组/附加组)
bash
# 查看test4的UID、GID和所属组:
# gid=1004(test4) → 主组为test4
# groups=1004(test4),1001(gaokun) → 附加组为gaokun
root@localhost:~# id test4
uid=1004(test4) gid=1004(test4) groups=1004(test4),1001(gaokun)4. 系统用户和组查询
查看系统中所有用户/用户组的完整信息,便于全局管控:
4.1 查看系统用户 - getent passwd
列出所有用户(含系统用户)的详细属性,输出共7个字段。
命令语法:
bash
getent passwd输出说明(冒号分隔):
- 用户名
- 密码(x表示加密存储在/etc/shadow)
- UID(用户ID)
- GID(主组ID)
- 描述信息(备注)
- home目录
- 登录shell
示例:
bash
root@localhost:~# getent passwd
root:x:0:0:root:/root:/bin/bash
yege:x:1000:1000:yege:/home/yege:/bin/bash
test4:x:1004:1004::/home/test4:/bin/sh4.2 查看系统用户组 - getent group
列出所有用户组的详细属性,输出共4个字段。
命令语法:
bash
getent group输出说明(冒号分隔):
- 组名
- 密码(x表示加密存储)
- GID(组ID)
- 组成员(多个用户用逗号分隔,可选)
示例:
bash
root@localhost:~# getent group
root:x:0:
gaokun:x:1001:test3,test4 # test3、test4是该组的附加组成员
test4:x:1004: # test4是该组的主组用户(无附加成员)5. 完整实操演示
串联核心命令,完成“创建组→创建用户→修改属性→查询→删除”全流程:
bash
# 1. 创建用户组
root@localhost:~# groupadd gaokun
# 2. 创建用户并指定主组
root@localhost:~# useradd -g gaokun test3
root@localhost:~# passwd test3 # 为test3设置密码
# 3. 创建用户并自定义home目录
root@localhost:~# useradd -g gaokun -d /home/test222 test2
root@localhost:~# passwd test2
# 4. 查看test3用户信息(主组为gaokun)
root@localhost:~# id test3
uid=1003(test3) gid=1001(gaokun) groups=1001(gaokun)
# 5. 创建test4并添加到附加组
root@localhost:~# useradd test4 # 主组为test4
root@localhost:~# passwd test4
root@localhost:~# usermod -a -G gaokun test4 # 添加gaokun为附加组
root@localhost:~# id test4
uid=1004(test4) gid=1004(test4) groups=1004(test4),1001(gaokun)
# 6. 删除用户(保留/清理home目录)
root@localhost:~# userdel test2 # 仅删用户
root@localhost:~# rm -rf /home/test222 # 手动删home目录
root@localhost:~# userdel -r test3 # 删用户+home目录
# 7. 全局查询验证
root@localhost:~# getent passwd | grep test4 # 查test4用户
root@localhost:~# getent group | grep gaokun # 查gaokun组6. 核心命令总结
| 类别 | 命令 | 功能 | 示例 |
|---|---|---|---|
| 用户组管理 | groupadd | 创建用户组 | groupadd gaokun |
| 用户组管理 | groupdel | 删除用户组 | groupdel test |
| 用户组管理 | gpasswd | 管理组内附加组成员 | gpasswd -a test4 gaokun |
| 用户管理 | useradd | 创建用户(指定主组/目录) | useradd -g gaokun test3 |
| 用户管理 | passwd | 设置/修改用户密码 | passwd test4 |
| 用户管理 | userdel | 删除用户 | userdel -r test3 |
| 用户管理 | usermod | 修改主组/附加组 | usermod -a -G gaokun test4 |
| 信息查询 | id | 查看用户UID/GID/主组/附加组 | id test4 |
| 全局查询 | getent passwd | 查看所有用户信息 | getent passwd |
| 全局查询 | getent group | 查看所有用户组信息 | getent group |
7. 常见问题排查
- 创建用户失败:提示“UID已存在”→ 用
useradd -u 自定义UID 用户名指定未使用的UID; - 删除组失败:提示“group is the primary group of user”→ 先用
usermod -g 新主组 用户名修改用户主组,再删组; - 用户无法登录:创建用户后未设置密码→ 执行
passwd 用户名补充密码; - 附加组添加失效:忘记加
-a参数→usermod -a -G是正确用法,否则会覆盖原有附加组。
课程总结
用户和用户组是Linux权限管理的核心基础,核心要点如下:
- 每个用户有且仅有一个主组,可拥有多个附加组,
id命令可清晰区分二者; useradd -g指定主组,usermod -a -G添加附加组(必加-a避免覆盖);- 牢记
passwd设置密码的必要性,userdel -r清理用户目录的安全性; - 用户和用户组管理是权限控制的基础,文件归属和权限控制将在后续课程详细讲解。 掌握这些命令和逻辑,可满足日常Linux用户权限管理的绝大部分场景需求。
课后练习
- 创建一个名为
dev的用户组; - 创建三个用户:
user1、user2、user3; - 将
user1和user2加入到dev用户组(作为附加组); - 查看
user1的用户信息,区分主组和附加组; - 删除
user3用户及其home目录; - 查看系统中
dev用户组的信息,确认user1/user2为组成员。
点击查看参考答案
bash
# 1. 创建dev用户组
root@localhost:~# groupadd dev
# 2. 创建三个用户(并设置密码)
root@localhost:~# useradd user1 && passwd user1
root@localhost:~# useradd user2 && passwd user2
root@localhost:~# useradd user3 && passwd user3
# 3. 将user1、user2加入dev组(附加组)
root@localhost:~# usermod -a -G dev user1
root@localhost:~# usermod -a -G dev user2
# 4. 查看user1信息(区分主组/附加组)
root@localhost:~# id user1
uid=1005(user1) gid=1005(user1) groups=1005(user1),1002(dev)
# 说明:gid=1005(user1)是主组,1002(dev)是附加组
# 5. 删除user3及home目录
root@localhost:~# userdel -r user3
# 6. 查看dev组信息
root@localhost:~# getent group dev
dev:x:1002:user1,user2