前言
在上一篇文章中,我们学习了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
总结
核心知识点回顾
- 用户管理命令 :
usermod -l: 修改用户名usermod -L/-U: 锁定/解锁用户userdel -r: 彻底删除用户
- 组管理命令 :
groupadd: 创建组groupmod: 修改组groupdel: 删除组gpasswd -a/-d: 添加/删除组成员
- 重要文件 :
/etc/passwd: 用户信息/etc/shadow: 密码信息(加密)/etc/group: 组信息
- 软链接 :
ln -s: 创建软链接- 类似快捷方式,指向原文件
- 下篇文章将详细介绍硬链接和软链接的区别
学习建议
- 实践操作: 在虚拟机中反复练习用户和组管理
- 理解关系: 清楚用户、主组、附加组的关系
- 注意安全: 删除前备份,修改前确认
- 善用验证: 每次操作后使用id、cat等命令验证结果
- 记录操作: 重要操作记录日志,便于追溯
下一步学习
掌握了用户和组管理后,下一篇文章将深入学习:
- 进程管理: 进程查看、控制和调度
- 链接文件详解: 硬链接vs软链接,inode概念
- SSH配置: 远程登录和密钥认证
用户和组管理是Linux系统管理的核心技能。通过本文的系统学习和实战演练,相信你已经能够熟练地进行用户和组的日常管理操作。继续深入学习,成为专业的Linux系统管理员!
系列文章说明: 本文是"Linux零基础入门系列"的第六部分,专注于用户和组管理的实战操作。建议结合前面的权限管理知识,系统掌握Linux用户体系。下一篇将介绍进程管理和链接文件的高级应用。