在Linux虚拟机管理中,偶尔会遇到忘记登录密码的情况,尤其是在多系统环境或长时间未使用时,破解密码需确保在合法授权的前提下进行(如个人虚拟机或企业授权场景),以下介绍几种常用方法,涵盖不同Linux发行版和场景,操作前建议备份虚拟机快照以防数据丢失。
常见场景与前提
破解Linux虚拟机密码的前提是能访问虚拟机的控制台(如VMware的“虚拟机设置-选项-高级-启动时BIOS”进入文本模式,或VirtualBox的“设备-显示-图形控制台”),且虚拟机未启用全盘加密(如LUKS)或GRUB密码保护,若为远程SSH登录,需确保能通过物理控制台或VNC登录到虚拟机系统。
破解方法详解
单用户模式(Single User Mode)—— 最常用方法
单用户模式是Linux的维护模式,默认以root权限启动,无需密码即可执行命令,适用于大多数基于Debian/Ubuntu、RHEL/CentOS的系统。
操作步骤:
- 重启虚拟机:在开机启动界面(GRUB菜单出现时),快速按下
Shift
或Esc
键(不同虚拟机可能略有差异,若GRUB未显示,可尝试在BIOS中设置“启动时显示GRUB菜单”)。 - 编辑GRUB启动项:在GRUB菜单中选中要进入的系统(通常第一个),按
e
键进入编辑模式。 - 修改内核参数:找到以
linux
或linux16
开头的行(末尾可能是ro quiet splash
),将ro
改为rw init=/bin/bash
(rw
表示以读写模式挂载,init=/bin/bash
指定启动后直接进入bash shell)。 - 启动系统:按
Ctrl+X
或F10
启动,此时会直接进入root shell,无需密码。 - 重置密码:输入
passwd
命令,按提示输入新密码(两次),完成后执行exec /sbin/init
或reboot -f
重启系统(避免直接关机导致文件系统损坏)。
注意事项:
- 部分系统(如Ubuntu 18.04+)可能需要修改
linux
行末尾为systemd.unit=rescue.target
,因为新版系统默认使用systemd,单用户模式对应rescue.target
。 - 若提示“Permission denied”,需确认修改的参数是否正确,或尝试
mount -o remount,rw /
重新挂载根分区。
GRUB修改root权限—— 单用户模式失效时的备选
若单用户模式被禁用(如通过GRUB_DISABLE_RECOVERY=true
禁用恢复模式),可通过修改GRUB参数直接获取root权限。
操作步骤:
- 进入GRUB编辑模式:同单用户模式步骤1-2。
- 修改内核参数:将
linux
行末尾的ro
改为rw
,并添加init=/bin/sh
(或sysrq
触发,但需内核支持)。 - 挂载根分区并重置密码:启动后执行
mount -o remount,rw /
,然后passwd
重置密码,最后exec /sbin/init
重启。
风险提示:此方法可能绕过部分安全限制,若系统开启了SELinux,重启后可能需进入 enforcing 模式(执行setenforce 1
)。
Live CD/USB方法—— 无需GRUB权限
若无法修改GRUB(如GRUB菜单被隐藏或无法编辑),可通过Linux Live启动盘(如Ubuntu Live、CentOS Live)挂载虚拟机硬盘并修改密码文件。
操作步骤:
- 准备Live介质:用另一台机器制作Linux Live启动盘(如使用Rufus或Ventoy)。
- 启动虚拟机并选择Live系统:将虚拟机启动顺序设置为从Live盘启动,进入Live系统桌面。
- 挂载虚拟机硬盘:打开终端,执行
lsblk
查看虚拟机硬盘(通常为/dev/sda
或/dev/vda
),挂载根分区(如mount /dev/sda2 /mnt
,需确认分区类型为ext4/xfs等)。 - 修改密码文件:编辑
/mnt/etc/shadow
文件,找到root用户行(以root:
开头),将密码字段(第二个冒号后)改为空(root::...
),或使用chroot /mnt passwd
重置密码(需先挂载/mnt/dev
、/mnt/proc
等:mount --bind /dev /mnt/dev; mount -t proc /proc /mnt/proc; chroot /mnt passwd
)。 - 卸载并重启:执行
umount -R /mnt
,重启虚拟机并移除Live盘。
注意事项:
- 挂载时需确认分区正确,避免挂载错误导致数据损坏。
- 若系统使用LVM逻辑卷,需先执行
vgchange -ay
激活卷组,再通过lvdisplay
查看逻辑卷路径。
使用密码重置工具—— 适用于图形化环境
部分Linux发行版提供图形化密码重置工具(如chntpw
,但主要用于Windows;Linux下可尝试recovery-mode
或systemd-rescue
)。
示例(Ubuntu系统):
- 进入GRUB菜单后,按
e
编辑,将linux
行末尾改为systemd.unit=rescue.target
,启动进入救援模式。 - 选择“root shell”,执行
passwd
重置密码,reboot
重启。
方法对比与选择
为方便选择,以下为上述方法的对比表格:
方法名称 | 适用场景 | 操作难度 | 风险等级 | 所需工具 |
---|---|---|---|---|
单用户模式 | 大多数Linux系统,GRUB可编辑 | 低 | 低 | 无 |
GRUB修改root权限 | 单用户模式被禁用 | 中 | 中 | GRUB编辑权限 |
Live CD/USB | GRUB无法编辑或无权限 | 高 | 中 | Linux Live启动盘 |
密码重置工具 | 支持图形化救援模式的系统 | 低 | 低 | 系统内置救援工具 |
注意事项
- 合法合规:仅对拥有所有权的虚拟机操作,禁止用于非法入侵。
- 数据备份:操作前务必备份虚拟机快照,避免误操作导致系统崩溃。
- 系统差异:不同发行版(如Arch Linux、Gentoo)的GRUB或救援模式可能不同,需提前查阅文档。
- 安全加固:破解后建议重新设置GRUB密码(如
grub2-mkpasswd-pbkdf2
生成密码哈希,添加到/etc/grub.d/00_header
),避免类似问题再次发生。
相关问答FAQs
Q1:破解密码后如何防止遗忘?
A1:可通过以下方式预防:
- 设置密码提示:在
/etc/passwd
中添加用户备注(如root:password:...:::/root:/bin/bash
,但需配合其他工具); - 使用密码管理器:如KeePass、Bitwarden,存储复杂密码;
- 启用双因素认证(2FA):如Google Authenticator,即使密码泄露也能保障安全;
- 定期重置密码:设置
chage -M 90 username
强制90天更换密码。
Q2:破解时遇到“Permission denied”或“mount: /mnt: device is busy”怎么办?
A2:
- Permission denied:检查GRUB编辑的参数是否正确(如
rw
和init=/bin/bash
是否在同一行),或尝试su
切换到root(若进入的是普通用户shell); - device is busy:执行
fuser -km /mnt
强制卸载(谨慎使用,可能导致数据丢失),或umount -l /mnt
(延迟卸载),确保无程序占用挂载点。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35695.html