在介绍破解 Linux 系统 root 密码之前先了解一下 linux 系统的启动过程
- 1开机自检(POST),初始化部分硬件2搜素可用于引导的启动设备(如磁盘的MBR)3读取并将控制权交给系统启动加载器(grub2)4启动加载器加载器配置,显示可用配置菜单5启动加载器加载内核及initramfs,置入内存6启动加载器将控制权交给内核7由内核查找initramfs中的硬件驱动,作为PID = 1从initramfs执行 / sbin / init(在RHEL7中,为systemd,并包含udev守护进程8 Systemd执行initrd.target的所有单元(包含将文件系统挂载到 / sysroot)9内核root文件系统从initramfsroot文件系统切换到 / sysroot上的系统root文件系统10 Systemd查找默认目标(target),然后启动该target的所有单元
其中,以上第 10 步的 "Systemd 查找默认目标(target),然后启动该 target 的所有单元" 中的 target 指的是如下启动加载单元
破解 root 密码的大致思路为,linux 系统启动时会加载 Initramfs 文件系统,而 Initramfs 文件系统其实就是压缩的仅包含开机引导所必须的一小部分系统命令,在我们进入磁盘系统之前会有系统启动加载器 grub2 来加载内核和 Initramfs 文件系统,因为磁盘系统的 root 密码忘记了,所以我们必须修改步骤 3 的启动部分,告诉系统加载完内核后就停止,让我们进入 Initramfs 文件系统进行相关操作。当我们进入到 initramfs 文件系统后,因为当前的 / sysroot 为只读挂载,而重置 passwd 的话肯定需要写入权限,所以我们需要重新以写入权限挂载。最后切换根目录为 / sysroot 目录后在使用 passwd 命令就是对我们的磁盘系统进行密码重置了,具体操作如下:
实验环境:在 Linux 系统上通过 KVM 安装了一个 rhel7 系统,针对该虚拟机 中的系统进行 root 密码破解
1. 设置系统的 root 密码为一个任意值,模拟你不知道 root 密码的情况
2. 现在开始进入破解,在上一步结束后重启系统,在启动选单中(以下截图页面)按下 "e" 键
进入编辑页面
3. 修改 linux16 行中的 ro 以后的部分内容 (就是红色线标记的部分),然后替换为 rd.break
变更为如下所示,然后 ctrl+x 保存,继续下一步
4. 然后进入到 initramfs 文件系统,重新挂载 / sysroot,使用 rw 方式进行挂载
5. 使用 chroot 命令,将 shell 切换到 / sysroot 下
6. 此时使用 passwd 命令,将密码修改成你要修改的密码即可。最后创建 /.autorelabel 文件,告诉 SELinux 重新进行文件标记
7. 连续两个 exit,退出并重启系统
8. 至此,root 的密码已被重置成功,尝试重新登录。
来源: http://www.bubuko.com/infodetail-1860761.html