Linux零基础入门:用户和组管理实战详解

前言

在上一篇文章中,我们学习了Linux用户管理和权限控制的基础概念。本文将深入实战操作,详细讲解用户和组的创建、修改、删除等完整管理流程,以及软链接的基础使用。通过本文的学习,你将能够熟练地进行Linux系统的用户和组管理操作,为后续的系统管理打下坚实基础。

文章目录

  • 前言
  • 一、用户管理完整操作流程
    • [1.1 创建用户完整示例](#1.1 创建用户完整示例)
    • [1.2 查看用户信息](#1.2 查看用户信息)
  • 二、用户修改操作
    • [2.1 修改用户名 - usermod -l](#2.1 修改用户名 - usermod -l)
    • [2.2 锁定用户账户 - usermod -L](#2.2 锁定用户账户 - usermod -L)
    • [2.3 解锁用户账户 - usermod -U](#2.3 解锁用户账户 - usermod -U)
    • [2.4 其他用户修改命令](#2.4 其他用户修改命令)
  • 三、用户删除操作
    • [3.1 删除用户 - userdel](#3.1 删除用户 - userdel)
    • [3.2 删除用户注意事项](#3.2 删除用户注意事项)
  • 四、组管理完整操作
    • [4.1 查看系统组信息](#4.1 查看系统组信息)
    • [4.2 创建组 - groupadd](#4.2 创建组 - groupadd)
    • [4.3 修改组 - groupmod](#4.3 修改组 - groupmod)
    • [4.4 删除组 - groupdel](#4.4 删除组 - groupdel)
  • 五、组成员管理
    • [5.1 添加用户到组 - gpasswd -a](#5.1 添加用户到组 - gpasswd -a)
    • [5.2 从组中移除用户 - gpasswd -d](#5.2 从组中移除用户 - gpasswd -d)
    • [5.3 设置组管理员 - gpasswd -A](#5.3 设置组管理员 - gpasswd -A)
    • [5.4 使用usermod管理组成员](#5.4 使用usermod管理组成员)
  • 六、组管理实战案例
    • [6.1 创建开发团队组结构](#6.1 创建开发团队组结构)
    • [6.2 创建共享项目目录](#6.2 创建共享项目目录)
    • [6.3 管理sudo权限](#6.3 管理sudo权限)
  • 七、软链接入门
    • [7.1 软链接基本概念](#7.1 软链接基本概念)
    • [7.2 创建软链接 - ln -s](#7.2 创建软链接 - ln -s)
    • [7.3 软链接实用示例](#7.3 软链接实用示例)
    • [7.4 软链接注意事项](#7.4 软链接注意事项)
  • 八、综合实战案例
    • [8.1 完整的用户组管理流程](#8.1 完整的用户组管理流程)
    • [8.2 用户离职清理流程](#8.2 用户离职清理流程)
  • 总结

一、用户管理完整操作流程

1.1 创建用户完整示例

回顾上一篇文章中创建用户的命令:

bash 复制代码
sudo useradd -u 1020 -g 1000 -c "Test User Description" -d /home/user1 -G sudo user1

参数详解:

  • -u 1020: 指定用户ID为1020
  • -g 1000: 指定主组ID为1000(kali组)
  • -c "Test User Description": 添加用户描述信息
  • -d /home/user1: 指定家目录
  • -G sudo: 指定附加组为sudo(拥有管理员权限)
  • user1: 要创建的用户名

设置用户密码:

bash 复制代码
sudo passwd user1

系统提示:

复制代码
New password: (输入密码,不显示)
Retype new password: (再次确认)
passwd: password updated successfully

1.2 查看用户信息

查看用户账户信息:

bash 复制代码
cat /etc/passwd

找到创建的用户:

bash 复制代码
cat /etc/passwd | grep user1

输出示例:

复制代码
user1:x:1020:1000:Test User Description:/home/user1:/bin/bash

字段解释:

  • user1: 用户名
  • x: 密码占位符(实际密码在/etc/shadow)
  • 1020: UID(用户ID)
  • 1000: GID(主组ID)
  • Test User Description: 用户描述
  • /home/user1: 家目录
  • /bin/bash: 登录Shell

查看密码信息:

bash 复制代码
sudo cat /etc/shadow | grep user1

输出示例:

复制代码
user1:$6$xyz...(哈希密码):19000:0:99999:7:::

密码加密说明:

  • Linux使用SHA-512哈希算法加密密码
  • 密码以$6$开头表示SHA-512加密
  • 不可逆加密,即使管理员也无法看到明文密码
  • Windows密码在内存中可通过Mimikatz等工具提取(安全风险)

查看用户所属组:

bash 复制代码
cat /etc/group | grep user1
id user1

输出示例:

复制代码
uid=1020(user1) gid=1000(kali) groups=1000(kali),27(sudo)

这表明user1的主组是kali(GID=1000),附加组是sudo(GID=27)。


二、用户修改操作

2.1 修改用户名 - usermod -l

基本语法:

bash 复制代码
sudo usermod -l 新用户名 旧用户名

实际操作:

bash 复制代码
# 将user1改名为user11
sudo usermod -l user11 user1

验证修改:

bash 复制代码
cat /etc/passwd | grep user11

输出:

复制代码
user11:x:1020:1000:Test User Description:/home/user1:/bin/bash

注意:

  • 用户名已改为user11
  • 家目录仍然是/home/user1(需要手动修改)
  • UID和GID保持不变

同步修改家目录(可选):

bash 复制代码
# 修改家目录路径
sudo usermod -d /home/user11 -m user11

# 或手动重命名
sudo mv /home/user1 /home/user11

2.2 锁定用户账户 - usermod -L

锁定用户(禁止登录):

bash 复制代码
sudo usermod -L user11

查看锁定状态:

bash 复制代码
sudo cat /etc/shadow | grep user11

输出示例:

复制代码
user11:!$6$xyz...(哈希密码):19000:0:99999:7:::

关键变化 : 密码字段前多了一个感叹号!,表示账户已被锁定。

锁定效果:

  • 用户无法通过密码登录(SSH、本地登录都会失败)
  • 但不影响该用户已经运行的进程
  • 不影响通过SSH密钥登录(如果配置了)

尝试登录(会失败):

bash 复制代码
su user11
# Password:
# su: Authentication failure

2.3 解锁用户账户 - usermod -U

两种解锁方法:

方法一: 使用usermod -U(推荐)

bash 复制代码
sudo usermod -U user11

方法二: 重新设置密码

bash 复制代码
sudo passwd user11

这会自动移除密码前的!,同时更新密码。

验证解锁:

bash 复制代码
sudo cat /etc/shadow | grep user11

输出:

复制代码
user11:$6$xyz...(哈希密码):19001:0:99999:7:::

密码字段前的!已消失,账户可以正常登录。

测试登录:

bash 复制代码
su user11
# Password: (输入密码)
# 成功切换到user11用户

2.4 其他用户修改命令

修改用户UID:

bash 复制代码
sudo usermod -u 2000 user11

修改用户主组:

bash 复制代码
sudo usermod -g 1001 user11

添加附加组:

bash 复制代码
sudo usermod -aG docker user11  # 不会移除现有附加组

修改家目录:

bash 复制代码
sudo usermod -d /home/newdir -m user11  # -m会移动文件

修改Shell:

bash 复制代码
sudo usermod -s /bin/zsh user11

修改用户描述:

bash 复制代码
sudo usermod -c "New Description" user11

三、用户删除操作

3.1 删除用户 - userdel

基本语法:

bash 复制代码
sudo userdel [选项] 用户名

常用选项:

选项 功能
无选项 删除用户,保留家目录和邮件
-r 删除用户及其家目录、邮件(推荐)
-f 强制删除,即使用户已登录

标准删除(保留数据):

bash 复制代码
sudo userdel user11

效果:

  • /etc/passwd删除用户记录
  • /etc/shadow删除密码记录
  • /etc/group删除用户组成员关系
  • 保留 家目录/home/user11
  • 保留 邮件/var/mail/user11

彻底删除(常用):

bash 复制代码
sudo userdel -r user11

效果:

  • 删除用户记录(同上)
  • 删除 家目录/home/user11
  • 删除用户邮件
  • 删除用户cron任务

强制删除(即使用户在线):

bash 复制代码
sudo userdel -rf user11

验证删除:

bash 复制代码
# 检查用户记录
cat /etc/passwd | grep user11
# (无输出,表示已删除)

# 检查家目录
ls /home/
# (user11目录不存在)

# 检查ID
id user11
# id: 'user11': no such user

3.2 删除用户注意事项

删除前检查:

bash 复制代码
# 1. 检查用户是否在线
who | grep user11
w | grep user11

# 2. 检查用户进程
ps aux | grep user11

# 3. 检查用户文件
find / -user user11 2>/dev/null

# 4. 备份重要数据
sudo tar -czf user11_backup.tar.gz /home/user11

删除后清理:

bash 复制代码
# 查找并处理用户遗留文件
sudo find / -user 1020 2>/dev/null  # 使用UID查找
sudo find / -nouser 2>/dev/null     # 查找无主文件

四、组管理完整操作

4.1 查看系统组信息

查看所有组:

bash 复制代码
cat /etc/group

输出格式:

复制代码
组名:密码占位符:GID:组成员列表

实际示例:

复制代码
root:x:0:
sudo:x:27:kali,admin
docker:x:118:kali,user1
kali:x:1000:
playgame:x:1008:kali

字段说明:

  • root: 组名
  • x: 组密码占位符(很少使用)
  • 0: 组ID(GID)
  • 最后字段: 该组的成员用户(逗号分隔,不包括以该组为主组的用户)

查看特定组:

bash 复制代码
cat /etc/group | grep sudo
# sudo:x:27:kali,admin

4.2 创建组 - groupadd

基本语法:

bash 复制代码
sudo groupadd [选项] 组名

创建组示例:

bash 复制代码
sudo groupadd playgame

验证创建:

bash 复制代码
cat /etc/group | grep playgame
# playgame:x:1008:

系统自动分配了GID=1008。

指定GID创建组:

bash 复制代码
sudo groupadd -g 2000 testgroup

创建系统组:

bash 复制代码
sudo groupadd -r sysgroup

系统组的GID通常小于1000。

4.3 修改组 - groupmod

修改组ID:

bash 复制代码
sudo groupmod -g 1009 playgame

验证修改:

bash 复制代码
cat /etc/group | grep playgame
# playgame:x:1009:

GID已从1008改为1009。

修改组名:

bash 复制代码
sudo groupmod -n newgame playgame

验证:

bash 复制代码
cat /etc/group | grep newgame
# newgame:x:1009:

4.4 删除组 - groupdel

删除组:

bash 复制代码
sudo groupdel playgame

验证删除:

bash 复制代码
cat /etc/group | grep playgame
# (无输出,表示已删除)

注意事项:

  • 不能删除用户的主组
  • 必须先删除以该组为主组的所有用户,或修改其主组
  • 附加组可以直接删除

删除主组示例(会失败):

bash 复制代码
sudo groupdel kali
# groupdel: cannot remove the primary group of user 'kali'

正确做法:

bash 复制代码
# 1. 修改用户主组
sudo usermod -g 1000 kali

# 2. 然后删除原主组
sudo groupdel oldgroup

五、组成员管理

5.1 添加用户到组 - gpasswd -a

基本语法:

bash 复制代码
sudo gpasswd -a 用户名 组名

实际操作:

bash 复制代码
# 将kali用户添加到playgame组
sudo gpasswd -a kali playgame

输出:

复制代码
Adding user kali to group playgame

验证添加:

bash 复制代码
# 方法1: 查看组文件
cat /etc/group | grep playgame
# playgame:x:1008:kali

# 方法2: 查看用户信息
id kali
# uid=1000(kali) gid=1000(kali) groups=1000(kali),27(sudo),1008(playgame)

批量添加用户:

bash 复制代码
sudo gpasswd -a user1 playgame
sudo gpasswd -a user2 playgame
sudo gpasswd -a user3 playgame

验证:

bash 复制代码
cat /etc/group | grep playgame
# playgame:x:1008:kali,user1,user2,user3

5.2 从组中移除用户 - gpasswd -d

基本语法:

bash 复制代码
sudo gpasswd -d 用户名 组名

实际操作:

bash 复制代码
# 将kali从playgame组中移除
sudo gpasswd -d kali playgame

输出:

复制代码
Removing user kali from group playgame

验证移除:

bash 复制代码
# 查看组成员
cat /etc/group | grep playgame
# playgame:x:1008:

# 查看用户组信息
id kali
# uid=1000(kali) gid=1000(kali) groups=1000(kali),27(sudo)
# (playgame已不在组列表中)

5.3 设置组管理员 - gpasswd -A

设置组管理员:

bash 复制代码
sudo gpasswd -A admin playgame

组管理员可以添加或删除该组的成员(无需sudo权限)。

组管理员操作:

bash 复制代码
# admin用户可以直接操作playgame组
gpasswd -a user1 playgame
gpasswd -d user1 playgame

5.4 使用usermod管理组成员

添加附加组(推荐):

bash 复制代码
sudo usermod -aG docker kali

注意 : 必须使用-aG(append group),如果只用-G会覆盖所有附加组。

错误示例(危险):

bash 复制代码
sudo usermod -G docker kali
# 这会移除kali的所有其他附加组,只保留docker组!

正确示例:

bash 复制代码
# 保留现有组,添加新组
sudo usermod -aG docker,sudo,playgame kali

替换主组:

bash 复制代码
sudo usermod -g developers kali

六、组管理实战案例

6.1 创建开发团队组结构

场景: 创建一个开发团队,包含开发组、测试组和管理组

bash 复制代码
# 1. 创建组
sudo groupadd developers
sudo groupadd testers
sudo groupadd managers

# 2. 创建用户并分配组
sudo useradd -m -G developers dev1
sudo useradd -m -G developers dev2
sudo useradd -m -G testers test1
sudo useradd -m -G managers,developers manager1

# 3. 设置密码
sudo passwd dev1
sudo passwd dev2
sudo passwd test1
sudo passwd manager1

# 4. 验证
cat /etc/group | grep -E "developers|testers|managers"

6.2 创建共享项目目录

bash 复制代码
# 1. 创建项目目录
sudo mkdir /opt/project

# 2. 设置组所有权
sudo chown :developers /opt/project

# 3. 设置权限(组成员可读写执行)
sudo chmod 775 /opt/project

# 4. 设置SGID(新文件自动继承组)
sudo chmod g+s /opt/project

# 5. 验证
ls -ld /opt/project
# drwxrwsr-x 2 root developers 4096 Jan 15 16:00 /opt/project

# 6. 测试
su dev1
touch /opt/project/test.txt
ls -l /opt/project/test.txt
# -rw-r--r-- 1 dev1 developers 0 Jan 15 16:01 test.txt
# (自动继承了developers组)

6.3 管理sudo权限

bash 复制代码
# 1. 查看sudo组成员
cat /etc/group | grep sudo
# sudo:x:27:kali,admin

# 2. 添加用户到sudo组
sudo gpasswd -a dev1 sudo

# 3. 验证权限
su dev1
sudo whoami
# root
# (dev1现在可以使用sudo了)

# 4. 移除sudo权限
sudo gpasswd -d dev1 sudo

七、软链接入门

7.1 软链接基本概念

软链接(Symbolic Link):

  • 也叫符号链接,类似Windows的快捷方式
  • 是一个特殊文件,指向另一个文件或目录
  • 删除软链接不影响原文件
  • 删除原文件会导致软链接失效(断链)

硬链接vs软链接:

  • 软链接可以跨文件系统,硬链接不能
  • 软链接可以指向目录,硬链接通常不能
  • 软链接有自己的inode,硬链接共享inode

7.2 创建软链接 - ln -s

基本语法:

bash 复制代码
ln -s 源文件路径 链接名称

创建文件软链接:

bash 复制代码
# 1. 创建源文件
echo "Original content" > original.txt

# 2. 创建软链接
ln -s original.txt link.txt

# 3. 查看
ls -l
# -rw-r--r-- 1 kali kali   17 Jan 15 16:10 original.txt
# lrwxrwxrwx 1 kali kali   12 Jan 15 16:10 link.txt -> original.txt

软链接特征:

  • 文件类型是l(link)
  • 权限总是rwxrwxrwx(实际权限由源文件决定)
  • 箭头->指向源文件
  • 文件大小是源文件路径的字符数

使用软链接:

bash 复制代码
# 通过链接读取内容
cat link.txt
# Original content

# 通过链接修改内容
echo "Modified" >> link.txt

# 查看原文件
cat original.txt
# Original content
# Modified

7.3 软链接实用示例

为常用目录创建快捷方式:

bash 复制代码
# 创建到项目目录的链接
ln -s /var/www/html/myproject ~/project

# 快速访问
cd ~/project
# 等同于 cd /var/www/html/myproject

为程序创建快捷命令:

bash 复制代码
# 将自定义脚本链接到系统路径
sudo ln -s /opt/myapp/bin/mycommand /usr/local/bin/mycommand

# 现在可以直接运行
mycommand

配置文件管理:

bash 复制代码
# 链接配置文件到home目录
ln -s /etc/nginx/nginx.conf ~/nginx.conf

# 编辑更方便
vim ~/nginx.conf

多版本软件切换:

bash 复制代码
# 安装了多个Python版本
ls -l /usr/bin/python*
# /usr/bin/python3.8
# /usr/bin/python3.9
# /usr/bin/python3.10

# 创建默认版本链接
sudo ln -s /usr/bin/python3.10 /usr/bin/python3

# 切换版本
sudo rm /usr/bin/python3
sudo ln -s /usr/bin/python3.9 /usr/bin/python3

7.4 软链接注意事项

使用绝对路径(推荐):

bash 复制代码
# 推荐(绝对路径)
ln -s /home/user/file.txt link.txt

# 不推荐(相对路径,移动链接可能失效)
ln -s ../file.txt link.txt

删除软链接:

bash 复制代码
# 正确删除(不要加斜杠)
rm link.txt

# 错误(会删除目标目录内容!)
rm link.txt/

检查断链:

bash 复制代码
# 查找断链(源文件不存在的链接)
find . -type l ! -exec test -e {} \; -print

更新软链接:

bash 复制代码
# 方法1: 先删除再创建
rm link.txt
ln -s newfile.txt link.txt

# 方法2: 使用-f强制覆盖
ln -sf newfile.txt link.txt

八、综合实战案例

8.1 完整的用户组管理流程

场景: 为新员工创建账户并配置权限

bash 复制代码
# 1. 创建用户
sudo useradd -m -c "John Doe, Developer" -s /bin/bash john

# 2. 设置密码
sudo passwd john

# 3. 添加到开发组
sudo gpasswd -a john developers

# 4. 添加到sudo组(如需管理权限)
sudo gpasswd -a john sudo

# 5. 创建项目链接
su john
ln -s /opt/projects/webapp ~/webapp

# 6. 验证
id john
ls -l ~/webapp

# 7. 测试权限
cd ~/webapp
touch test.txt

8.2 用户离职清理流程

bash 复制代码
# 1. 锁定账户
sudo usermod -L john

# 2. 终止用户进程
sudo pkill -u john

# 3. 备份用户数据
sudo tar -czf john_backup_$(date +%Y%m%d).tar.gz /home/john

# 4. 检查用户文件
sudo find / -user john 2>/dev/null > john_files.txt

# 5. 从关键组移除
sudo gpasswd -d john sudo
sudo gpasswd -d john developers

# 6. 彻底删除(确认备份后)
sudo userdel -r john

# 7. 清理遗留文件
sudo find / -nouser 2>/dev/null

总结

核心知识点回顾

  1. 用户管理命令 :
    • usermod -l: 修改用户名
    • usermod -L/-U: 锁定/解锁用户
    • userdel -r: 彻底删除用户
  2. 组管理命令 :
    • groupadd: 创建组
    • groupmod: 修改组
    • groupdel: 删除组
    • gpasswd -a/-d: 添加/删除组成员
  3. 重要文件 :
    • /etc/passwd: 用户信息
    • /etc/shadow: 密码信息(加密)
    • /etc/group: 组信息
  4. 软链接 :
    • ln -s: 创建软链接
    • 类似快捷方式,指向原文件
    • 下篇文章将详细介绍硬链接和软链接的区别

学习建议

  1. 实践操作: 在虚拟机中反复练习用户和组管理
  2. 理解关系: 清楚用户、主组、附加组的关系
  3. 注意安全: 删除前备份,修改前确认
  4. 善用验证: 每次操作后使用id、cat等命令验证结果
  5. 记录操作: 重要操作记录日志,便于追溯

下一步学习

掌握了用户和组管理后,下一篇文章将深入学习:

  • 进程管理: 进程查看、控制和调度
  • 链接文件详解: 硬链接vs软链接,inode概念
  • SSH配置: 远程登录和密钥认证

用户和组管理是Linux系统管理的核心技能。通过本文的系统学习和实战演练,相信你已经能够熟练地进行用户和组的日常管理操作。继续深入学习,成为专业的Linux系统管理员!


系列文章说明: 本文是"Linux零基础入门系列"的第六部分,专注于用户和组管理的实战操作。建议结合前面的权限管理知识,系统掌握Linux用户体系。下一篇将介绍进程管理和链接文件的高级应用。

相关推荐
PyHaVolask1 天前
Linux零基础入门:用户管理与权限控制完全指南
用户管理·sudo·权限控制·linux用户管理·linux安全运维
PyHaVolask3 天前
Linux零基础入门:文件系统结构与文件管理命令详解
运维·文件管理·linux命令·linux文件系统·目录结构·fhs
2503_9469718611 天前
【BruteForce/Pruning】2026年度物理层暴力破解与神经网络剪枝基准索引 (Benchmark Index)
人工智能·神经网络·算法·数据集·剪枝·网络架构·系统运维
Johny_Zhao13 天前
黑客msfconsole渗透工具超详细使用说明
linux·python·网络安全·信息安全·渗透测试·云计算·系统运维·攻防演练
DeepVis Research14 天前
【InfoSec/Sanitization】2026年度非注册实体管控与内存安全擦除基准索引 (Benchmark Index)
网络安全·数据集·数据安全·虚拟化·系统运维
Peterrrr091121 天前
深入理解 Shell 编程:正则表达式与 sed 文本处理器
linux·运维·正则表达式·sed·linux命令
一个平凡而乐于分享的小比特25 天前
Linux系统下的软链接和硬链接的区别和使用
linux·硬链接·软链接
sulikey2 个月前
Linux基础指令与权限管理深度解析:从入门到精通
linux·运维·服务器·ubuntu·centos·linux命令·linux权限
WilsonPan2 个月前
【Kubernetes】集成ELK收集日志
系统运维