前言
在上一篇文章中,我们学习了Linux用户管理和权限控制的基础概念。本文将深入实战操作,详细讲解用户和组的创建、修改、删除等完整管理流程,以及软链接的基础使用。通过本文的学习,你将能够熟练地进行Linux系统的用户和组管理操作,为后续的系统管理打下坚实基础。
文章目录
- 前言
- 一、用户管理完整操作流程
- 1.1 创建用户完整示例
- 1.2 查看用户信息
- 二、用户修改操作
- 2.1 修改用户名 - usermod -l
- 2.2 锁定用户账户 - usermod -L
- 2.3 解锁用户账户 - usermod -U
- 2.4 其他用户修改命令
- 三、用户删除操作
- 3.1 删除用户 - userdel
- 3.2 删除用户注意事项
- 四、组管理完整操作
- 4.1 查看系统组信息
- 4.2 创建组 - groupadd
- 4.3 修改组 - groupmod
- 4.4 删除组 - groupdel
- 五、组成员管理
- 5.1 添加用户到组 - gpasswd -a
- 5.2 从组中移除用户 - gpasswd -d
- 5.3 设置组管理员 - gpasswd -A
- 5.4 使用usermod管理组成员
- 六、组管理实战案例
- 6.1 创建开发团队组结构
- 6.2 创建共享项目目录
- 6.3 管理sudo权限
- 七、软链接入门
- 7.1 软链接基本概念
- 7.2 创建软链接 - ln -s
- 7.3 软链接实用示例
- 7.4 软链接注意事项
- 八、综合实战案例
- 8.1 完整的用户组管理流程
- 8.2 用户离职清理流程
- 总结
- 核心知识点回顾
- 学习建议
- 下一步学习
一、用户管理完整操作流程
1.1 创建用户完整示例
回顾上一篇文章中创建用户的命令:
sudouseradd-u1020-g1000-c"Test User Description"-d /home/user1 -Gsudouser1参数详解:
-u 1020: 指定用户ID为1020-g 1000: 指定主组ID为1000(kali组)-c "Test User Description": 添加用户描述信息-d /home/user1: 指定家目录-G sudo: 指定附加组为sudo(拥有管理员权限)user1: 要创建的用户名
设置用户密码:
sudopasswduser1系统提示:
New password: (输入密码,不显示) Retype new password: (再次确认) passwd: password updated successfully1.2 查看用户信息
查看用户账户信息:
cat/etc/passwd找到创建的用户:
cat/etc/passwd|grepuser1输出示例:
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
查看密码信息:
sudocat/etc/shadow|grepuser1输出示例:
user1:$6$xyz...(哈希密码):19000:0:99999:7:::密码加密说明:
- Linux使用SHA-512哈希算法加密密码
- 密码以
$6$开头表示SHA-512加密 - 不可逆加密,即使管理员也无法看到明文密码
- Windows密码在内存中可通过Mimikatz等工具提取(安全风险)
查看用户所属组:
cat/etc/group|grepuser1iduser1输出示例:
uid=1020(user1) gid=1000(kali) groups=1000(kali),27(sudo)这表明user1的主组是kali(GID=1000),附加组是sudo(GID=27)。
二、用户修改操作
2.1 修改用户名 - usermod -l
基本语法:
sudousermod-l 新用户名 旧用户名实际操作:
# 将user1改名为user11sudousermod-l user11 user1验证修改:
cat/etc/passwd|grepuser11输出:
user11:x:1020:1000:Test User Description:/home/user1:/bin/bash注意:
- 用户名已改为user11
- 家目录仍然是
/home/user1(需要手动修改) - UID和GID保持不变
同步修改家目录(可选):
# 修改家目录路径sudousermod-d /home/user11 -m user11# 或手动重命名sudomv/home/user1 /home/user112.2 锁定用户账户 - usermod -L
锁定用户(禁止登录):
sudousermod-L user11查看锁定状态:
sudocat/etc/shadow|grepuser11输出示例:
user11:!$6$xyz...(哈希密码):19000:0:99999:7:::关键变化: 密码字段前多了一个感叹号!,表示账户已被锁定。
锁定效果:
- 用户无法通过密码登录(SSH、本地登录都会失败)
- 但不影响该用户已经运行的进程
- 不影响通过SSH密钥登录(如果配置了)
尝试登录(会失败):
suuser11# Password:# su: Authentication failure2.3 解锁用户账户 - usermod -U
两种解锁方法:
方法一: 使用usermod -U(推荐)
sudousermod-U user11方法二: 重新设置密码
sudopasswduser11这会自动移除密码前的!,同时更新密码。
验证解锁:
sudocat/etc/shadow|grepuser11输出:
user11:$6$xyz...(哈希密码):19001:0:99999:7:::密码字段前的!已消失,账户可以正常登录。
测试登录:
suuser11# Password: (输入密码)# 成功切换到user11用户2.4 其他用户修改命令
修改用户UID:
sudousermod-u2000user11修改用户主组:
sudousermod-g1001user11添加附加组:
sudousermod-aGdockeruser11# 不会移除现有附加组修改家目录:
sudousermod-d /home/newdir -m user11# -m会移动文件修改Shell:
sudousermod-s /bin/zsh user11修改用户描述:
sudousermod-c"New Description"user11三、用户删除操作
3.1 删除用户 - userdel
基本语法:
sudouserdel[选项]用户名常用选项:
| 选项 | 功能 |
|---|---|
| 无选项 | 删除用户,保留家目录和邮件 |
-r | 删除用户及其家目录、邮件(推荐) |
-f | 强制删除,即使用户已登录 |
标准删除(保留数据):
sudouserdeluser11效果:
- 从
/etc/passwd删除用户记录 - 从
/etc/shadow删除密码记录 - 从
/etc/group删除用户组成员关系 - 保留家目录
/home/user11 - 保留邮件
/var/mail/user11
彻底删除(常用):
sudouserdel-r user11效果:
- 删除用户记录(同上)
- 删除家目录
/home/user11 - 删除用户邮件
- 删除用户cron任务
强制删除(即使用户在线):
sudouserdel-rf user11验证删除:
# 检查用户记录cat/etc/passwd|grepuser11# (无输出,表示已删除)# 检查家目录ls/home/# (user11目录不存在)# 检查IDiduser11# id: 'user11': no such user3.2 删除用户注意事项
删除前检查:
# 1. 检查用户是否在线who|grepuser11 w|grepuser11# 2. 检查用户进程psaux|grepuser11# 3. 检查用户文件find/ -user user112>/dev/null# 4. 备份重要数据sudotar-czf user11_backup.tar.gz /home/user11删除后清理:
# 查找并处理用户遗留文件sudofind/ -user10202>/dev/null# 使用UID查找sudofind/ -nouser2>/dev/null# 查找无主文件四、组管理完整操作
4.1 查看系统组信息
查看所有组:
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)- 最后字段: 该组的成员用户(逗号分隔,不包括以该组为主组的用户)
查看特定组:
cat/etc/group|grepsudo# sudo:x:27:kali,admin4.2 创建组 - groupadd
基本语法:
sudogroupadd[选项]组名创建组示例:
sudogroupaddplaygame验证创建:
cat/etc/group|grepplaygame# playgame:x:1008:系统自动分配了GID=1008。
指定GID创建组:
sudogroupadd-g2000testgroup创建系统组:
sudogroupadd-r sysgroup系统组的GID通常小于1000。
4.3 修改组 - groupmod
修改组ID:
sudogroupmod-g1009playgame验证修改:
cat/etc/group|grepplaygame# playgame:x:1009:GID已从1008改为1009。
修改组名:
sudogroupmod-n newgame playgame验证:
cat/etc/group|grepnewgame# newgame:x:1009:4.4 删除组 - groupdel
删除组:
sudogroupdelplaygame验证删除:
cat/etc/group|grepplaygame# (无输出,表示已删除)注意事项:
- 不能删除用户的主组
- 必须先删除以该组为主组的所有用户,或修改其主组
- 附加组可以直接删除
删除主组示例(会失败):
sudogroupdelkali# groupdel: cannot remove the primary group of user 'kali'正确做法:
# 1. 修改用户主组sudousermod-g1000kali# 2. 然后删除原主组sudogroupdeloldgroup五、组成员管理
5.1 添加用户到组 - gpasswd -a
基本语法:
sudogpasswd -a 用户名 组名实际操作:
# 将kali用户添加到playgame组sudogpasswd -a kali playgame输出:
Adding user kali to group playgame验证添加:
# 方法1: 查看组文件cat/etc/group|grepplaygame# playgame:x:1008:kali# 方法2: 查看用户信息idkali# uid=1000(kali) gid=1000(kali) groups=1000(kali),27(sudo),1008(playgame)批量添加用户:
sudogpasswd -a user1 playgamesudogpasswd -a user2 playgamesudogpasswd -a user3 playgame验证:
cat/etc/group|grepplaygame# playgame:x:1008:kali,user1,user2,user35.2 从组中移除用户 - gpasswd -d
基本语法:
sudogpasswd -d 用户名 组名实际操作:
# 将kali从playgame组中移除sudogpasswd -d kali playgame输出:
Removing user kali from group playgame验证移除:
# 查看组成员cat/etc/group|grepplaygame# playgame:x:1008:# 查看用户组信息idkali# uid=1000(kali) gid=1000(kali) groups=1000(kali),27(sudo)# (playgame已不在组列表中)5.3 设置组管理员 - gpasswd -A
设置组管理员:
sudogpasswd -A admin playgame组管理员可以添加或删除该组的成员(无需sudo权限)。
组管理员操作:
# admin用户可以直接操作playgame组gpasswd -a user1 playgame gpasswd -d user1 playgame5.4 使用usermod管理组成员
添加附加组(推荐):
sudousermod-aGdockerkali注意: 必须使用-aG(append group),如果只用-G会覆盖所有附加组。
错误示例(危险):
sudousermod-Gdockerkali# 这会移除kali的所有其他附加组,只保留docker组!正确示例:
# 保留现有组,添加新组sudousermod-aG docker,sudo,playgame kali替换主组:
sudousermod-g developers kali六、组管理实战案例
6.1 创建开发团队组结构
场景: 创建一个开发团队,包含开发组、测试组和管理组
# 1. 创建组sudogroupadddeveloperssudogroupaddtesterssudogroupaddmanagers# 2. 创建用户并分配组sudouseradd-m -G developers dev1sudouseradd-m -G developers dev2sudouseradd-m -G testers test1sudouseradd-m -G managers,developers manager1# 3. 设置密码sudopasswddev1sudopasswddev2sudopasswdtest1sudopasswdmanager1# 4. 验证cat/etc/group|grep-E"developers|testers|managers"6.2 创建共享项目目录
# 1. 创建项目目录sudomkdir/opt/project# 2. 设置组所有权sudochown:developers /opt/project# 3. 设置权限(组成员可读写执行)sudochmod775/opt/project# 4. 设置SGID(新文件自动继承组)sudochmodg+s /opt/project# 5. 验证ls-ld /opt/project# drwxrwsr-x 2 root developers 4096 Jan 15 16:00 /opt/project# 6. 测试sudev1touch/opt/project/test.txtls-l /opt/project/test.txt# -rw-r--r-- 1 dev1 developers 0 Jan 15 16:01 test.txt# (自动继承了developers组)6.3 管理sudo权限
# 1. 查看sudo组成员cat/etc/group|grepsudo# sudo:x:27:kali,admin# 2. 添加用户到sudo组sudogpasswd -a dev1sudo# 3. 验证权限sudev1sudowhoami# root# (dev1现在可以使用sudo了)# 4. 移除sudo权限sudogpasswd -d dev1sudo七、软链接入门
7.1 软链接基本概念
软链接(Symbolic Link):
- 也叫符号链接,类似Windows的快捷方式
- 是一个特殊文件,指向另一个文件或目录
- 删除软链接不影响原文件
- 删除原文件会导致软链接失效(断链)
硬链接vs软链接:
- 软链接可以跨文件系统,硬链接不能
- 软链接可以指向目录,硬链接通常不能
- 软链接有自己的inode,硬链接共享inode
7.2 创建软链接 - ln -s
基本语法:
ln-s 源文件路径 链接名称创建文件软链接:
# 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(实际权限由源文件决定) - 箭头
->指向源文件 - 文件大小是源文件路径的字符数
使用软链接:
# 通过链接读取内容catlink.txt# Original content# 通过链接修改内容echo"Modified">>link.txt# 查看原文件catoriginal.txt# Original content# Modified7.3 软链接实用示例
为常用目录创建快捷方式:
# 创建到项目目录的链接ln-s /var/www/html/myproject ~/project# 快速访问cd~/project# 等同于 cd /var/www/html/myproject为程序创建快捷命令:
# 将自定义脚本链接到系统路径sudoln-s /opt/myapp/bin/mycommand /usr/local/bin/mycommand# 现在可以直接运行mycommand配置文件管理:
# 链接配置文件到home目录ln-s /etc/nginx/nginx.conf ~/nginx.conf# 编辑更方便vim~/nginx.conf多版本软件切换:
# 安装了多个Python版本ls-l /usr/bin/python*# /usr/bin/python3.8# /usr/bin/python3.9# /usr/bin/python3.10# 创建默认版本链接sudoln-s /usr/bin/python3.10 /usr/bin/python3# 切换版本sudorm/usr/bin/python3sudoln-s /usr/bin/python3.9 /usr/bin/python37.4 软链接注意事项
使用绝对路径(推荐):
# 推荐(绝对路径)ln-s /home/user/file.txt link.txt# 不推荐(相对路径,移动链接可能失效)ln-s../file.txt link.txt删除软链接:
# 正确删除(不要加斜杠)rmlink.txt# 错误(会删除目标目录内容!)rmlink.txt/检查断链:
# 查找断链(源文件不存在的链接)find.-type l!-exectest-e{}\;-print更新软链接:
# 方法1: 先删除再创建rmlink.txtln-s newfile.txt link.txt# 方法2: 使用-f强制覆盖ln-sf newfile.txt link.txt八、综合实战案例
8.1 完整的用户组管理流程
场景: 为新员工创建账户并配置权限
# 1. 创建用户sudouseradd-m -c"John Doe, Developer"-s /bin/bash john# 2. 设置密码sudopasswdjohn# 3. 添加到开发组sudogpasswd -a john developers# 4. 添加到sudo组(如需管理权限)sudogpasswd -a johnsudo# 5. 创建项目链接sujohnln-s /opt/projects/webapp ~/webapp# 6. 验证idjohnls-l ~/webapp# 7. 测试权限cd~/webapptouchtest.txt8.2 用户离职清理流程
# 1. 锁定账户sudousermod-L john# 2. 终止用户进程sudopkill-u john# 3. 备份用户数据sudotar-czf john_backup_$(date+%Y%m%d).tar.gz /home/john# 4. 检查用户文件sudofind/ -user john2>/dev/null>john_files.txt# 5. 从关键组移除sudogpasswd -d johnsudosudogpasswd -d john developers# 6. 彻底删除(确认备份后)sudouserdel-r john# 7. 清理遗留文件sudofind/ -nouser2>/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用户体系。下一篇将介绍进程管理和链接文件的高级应用。