跳转到内容

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+)供人工登录使用;
  • 按用户/用户组粒度管控权限,提升系统安全性。

Linux_user_groups

2. 用户组管理命令

用户组管理聚焦组的创建、删除和成员维护,以下是核心命令详解:

2.1 创建用户组 - groupadd

创建新的用户组,默认分配未使用的GID(1000+)。

命令语法

bash
groupadd 组名

示例

bash
# 创建名为gaokun的用户组
root@localhost:~# groupadd gaokun

2.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 gaokun

3. 用户管理命令

用户管理涵盖用户的创建、删除、属性修改及信息查询,是日常运维高频操作:

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 test2

3.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 successfully

3.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 test

3.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

输出说明(冒号分隔):

  1. 用户名
  2. 密码(x表示加密存储在/etc/shadow)
  3. UID(用户ID)
  4. GID(主组ID)
  5. 描述信息(备注)
  6. home目录
  7. 登录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/sh

4.2 查看系统用户组 - getent group

列出所有用户组的详细属性,输出共4个字段。

命令语法

bash
getent group

输出说明(冒号分隔):

  1. 组名
  2. 密码(x表示加密存储)
  3. GID(组ID)
  4. 组成员(多个用户用逗号分隔,可选)

示例

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. 常见问题排查

  1. 创建用户失败:提示“UID已存在”→ 用useradd -u 自定义UID 用户名指定未使用的UID;
  2. 删除组失败:提示“group is the primary group of user”→ 先用usermod -g 新主组 用户名修改用户主组,再删组;
  3. 用户无法登录:创建用户后未设置密码→ 执行passwd 用户名补充密码;
  4. 附加组添加失效:忘记加-a参数→ usermod -a -G是正确用法,否则会覆盖原有附加组。

课程总结

用户和用户组是Linux权限管理的核心基础,核心要点如下:

  • 每个用户有且仅有一个主组,可拥有多个附加组id命令可清晰区分二者;
  • useradd -g指定主组,usermod -a -G添加附加组(必加-a避免覆盖);
  • 牢记passwd设置密码的必要性,userdel -r清理用户目录的安全性;
  • 用户和用户组管理是权限控制的基础,文件归属和权限控制将在后续课程详细讲解。 掌握这些命令和逻辑,可满足日常Linux用户权限管理的绝大部分场景需求。

课后练习

  1. 创建一个名为dev的用户组;
  2. 创建三个用户:user1user2user3
  3. user1user2加入到dev用户组(作为附加组);
  4. 查看user1的用户信息,区分主组和附加组;
  5. 删除user3用户及其home目录;
  6. 查看系统中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

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径