1. 项目概述
在虚拟化环境中管理Linux系统时,密码重置是最基础但也是最重要的运维技能之一。最近我在部署RHEL 9虚拟机集群时,就遇到了一个典型场景:某台测试机的root密码被多人修改后遗忘,导致维护工作无法进行。这种情况在企业开发测试环境中其实相当常见——团队成员交替使用虚拟机时容易造成密码混乱,或者自动化部署时预设的密码未被正确记录。
RHEL 9作为Red Hat新一代企业级操作系统,在密码安全策略上比前代更为严格,这也使得传统Linux密码重置方法需要做针对性调整。本教程将详解在VMware虚拟化平台下,对RHEL 9系统进行root密码重置和普通用户密码修改的完整流程,包含GRUB2引导参数修改、SELinux上下文修复等关键技术点,这些方法同样适用于其他基于RHEL 9的发行版(如CentOS Stream 9)。
2. 核心原理与准备工作
2.1 密码重置的本质原理
Linux系统的密码信息存储在/etc/shadow文件中,但系统运行时该文件处于被保护状态。重置密码的核心思路是通过单用户模式(runlevel 1)绕过身份验证,直接获得修改密码文件的权限。在RHEL 9中,这一过程涉及:
- GRUB2引导中断:在系统启动时编辑内核参数
- 临时根挂载:以rw(读写)模式重新挂载文件系统
- SELinux上下文维护:确保密码修改后安全标签正确
2.2 VMware环境特殊注意事项
与物理机相比,VMware虚拟机在密码重置时有两个关键差异点:
- 键盘输入时机:VMware的BIOS界面停留时间较短,需要快速按下ESC键进入GRUB菜单
- 虚拟硬件兼容性:某些VMware版本可能需要先关闭"EFI安全启动"选项
重要提示:生产环境操作前务必创建虚拟机快照,密码修改完成后应立即删除快照以避免安全风险。
3. 详细操作步骤
3.1 进入GRUB编辑模式
- 启动VMware中的RHEL 9虚拟机
- 在VMware BIOS界面出现时(通常有1-2秒窗口期),快速按ESC键
- 看到GRUB菜单后,光标选中默认启动项,按
e键进入编辑模式
3.2 修改内核启动参数
在linux开头的行末尾追加(注意空格):
bash复制rd.break enforcing=0
关键参数说明:
rd.break:在initramfs阶段中断启动流程enforcing=0:临时禁用SELinux(必须步骤)
3.3 进入紧急模式操作
- 按Ctrl+X启动到紧急模式
- 依次执行以下命令:
bash复制mount -o remount,rw /sysroot
chroot /sysroot
passwd root
此时会提示输入新的root密码(注意:RHEL 9默认要求密码至少8位且包含大小写字母和数字)
3.4 修复SELinux上下文
密码修改后必须执行:
bash复制touch /.autorelabel
exit
reboot
此操作会在下次启动时重建所有文件的安全上下文,避免SELinux策略导致登录失败。
4. 普通用户密码修改方法
4.1 已知root密码的情况
如果root密码可用,登录后直接运行:
bash复制passwd 用户名
RHEL 9会强制进行密码复杂度检查,常见错误提示及对策:
| 错误提示 | 原因 | 解决方案 |
|---|---|---|
| "BAD PASSWORD: it is too short" | 密码少于8字符 | 增加密码长度 |
| "BAD PASSWORD: it does not contain enough different characters" | 字符种类不足 | 混合大小写字母+数字 |
4.2 无root权限时的sudo方式
对于有sudo权限的普通用户:
bash复制sudo passwd 用户名
注意:此操作需要在/etc/sudoers中有对应的权限配置。
5. 高级场景处理
5.1 加密LVM分区的特殊处理
如果RHEL 9采用了加密LVM(安装时的默认选项),需要在rd.break阶段先解密:
bash复制cryptsetup open /dev/mapper/rhel-root sysroot
然后再执行常规的mount操作。
5.2 企业环境下的批量处理
对于需要批量重置密码的场景,可以结合VMware PowerCLI实现自动化:
powershell复制$vm = Get-VM -Name "RHEL9-*"
$vm | Restart-VMGuest -Confirm:$false
# 通过VMware Tools发送按键指令
6. 安全加固建议
完成密码重置后,建议立即执行:
- 检查/var/log/secure日志中的认证记录
- 更新所有已知用户的密码
- 重建SSH主机密钥(如果存在安全疑虑):
bash复制rm -f /etc/ssh/ssh_host_*
ssh-keygen -A
7. 常见问题排查
7.1 启动后无法登录新密码
可能原因及解决方案:
- SELinux未正确标记:确认执行了/.autorelabel创建
- 文件系统只读:检查/etc/fstab中的挂载选项
- 密码策略限制:查看/etc/security/pwquality.conf配置
7.2 VMware键盘输入失效
典型表现为无法进入GRUB菜单,可尝试:
- 在虚拟机设置中启用"键入时捕获键盘"
- 改用VMware Web Console进行操作
- 临时添加
nomodeset内核参数
我在实际运维中发现,RHEL 9的密码策略比RHEL 8更为严格,特别是在企业域环境中。建议将重置后的密码记录在加密密码管理器中,避免频繁重置触发账户锁定策略。对于需要定期更换密码的场景,可以考虑配置pam_pwquality模块调整复杂度要求。