Quantcast
Viewing all articles
Browse latest Browse all 11063

GRUB加密、修复和破解密码实战指南

GRUB加密、修复和破解密码实战指南

GRUB(Boot Loader )

从系统启动流程可以得知,在BIOS读取相关信息之后,接下来是去第一个可以启动的设备当中的MBR中读取Boot Loader信息,Boot Loader提供具有菜单功能、直接加载内核信息,以及相关的控制权转交功能。所以说系统启动必须要有 Boot Loader,然后才能去加载内核。

Boot Loader存储于MBR当中,MBR只有512bytes,其中446bytes存储Boot Loader,但是Boot Loader功能很强大,所以446bytes是远远不够的,所以就用到了grub,并将Boot Loader的程序运行与配置项加载分成三个阶段(stage)来运行。

grub: GRand Unified Bootloader

一、版本如下:

grub 0.x: grub legacy

grub 1.x: grub2

二、grub legacy: 1.分为三个阶段 ⊙ stage1: 运行Boot Loader主程序,这个程序必须要安装在启动区,即MBR中。因为MBR空间有限,因此在MBR当中仅安装Boot Loader的最小程序,并没有安装Boot Loader的相关配置文件;
⊙ stage1_5: 在MBR随后的扇区中存放,让stage1中的bootloader能识别stage2所在的分区上的文件系统(相当于文件系统的驱动);
⊙ stage2:通过Boot Loader加载所有配置文件及相关的环境变量参数信息,这些配置文件及相关的环境参数都存放于磁盘分区上的/boot/grub目录下。
2.配置文件:

/boot/grub/grub.conf< /etc/grub.conf


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

3. stage2及内核等通常放置于一个基本磁盘分区(boot分区) ⊙ boot单独分区是用来存放与linux系统启动有关的程序,比如,内核文件、启动引导装载程序,启动菜单配置文件等;
⊙ boot作为一个单独的分区,也就意味着这个单独分区下有一个grub,因为grub刚启动的时候,操作系统还没有启动(真正的根文件系统还没有被加载),所以,不能通过访问/boot/grub来实现,但是我们又需要访问这个文件来执行stage2 阶段。所以,grub中就有一个root命令,指明的就是把stage2 阶段直设为根,而grub自带有文件系统驱动(stage 1.5),所以就可以直接访问分区及根下的所有文件即kernel,initrd等来选择内核启动;
⊙ boot目录,有没有单独分区(或者说引导分区是不是一个独立的分区),决定了在grub中的访问路径是否一样。而grub中的root命令,指明的就是这个根分区是谁,如果boot被单独分区了,那么就直接指向这个新分区,访问路径就直接把boot给去掉了;如果boot没有被单独分区,就是挂在根分区上,那就意味着/boot目录是绕不过去的,访问的时候只能先访问根,在访问根下的boot。
⊙ grub要想访问某一分区,这个分区必须是基本磁盘分区,不可能是提供了非常复杂的驱动程序(如RAID,LVM)。如果想把根做的复杂些(比如LVM)但又不对boot做单独分区,那把逻辑卷往分区上一放,就找不到grub中的stage2阶段了,所以,要想把根做的复杂,就只能把boot作为一个单独的基本磁盘分区;
⊙ 如果不使用逻辑卷,boot是可以不用单独分区的。

4.grub功用 :

提供启动菜单、并提供交互式接口;

e: 编辑模式,用于编辑菜单

c: 命令模式,交互式接口


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

加载用户选择的内核或操作系统;

允许传递参数给内核

可隐藏启动菜单

为菜单提供了保护机制;

为编辑启动菜单进行认证

为启用内核或操作系统进行认证

5.识别硬盘设备:

(hd#,#)表示第几块磁盘的第几块分区

硬盘代号以小括号()括起来

hd#: 磁盘编号 ,用数字表示;从0开始编号;

#: 分区编号 ,用数字表示; 从0开始编号;

如: (hd0,0)表示 第一块硬盘,第一个分区

6.grub的命令行接口

help: 获取帮助列表

help KEYWORD: 详细帮助信息

find (hd#,#)/PATH/TO/SOMEFILE:

root (hd#,#)

kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可添加许多内核支持使用的cmdline参数

例如:max_loop=100 selinux=0 init=/path/to/init

initrd/PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;

boot: 引导启动选定的内核

cat /proc/cmdline 内核参数

内核参数文档:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt

7.手动在CentOS 6 grub命令行接口启动系统:

grub> root (hd#,#)这里的根为grub的根,而非根文件系统的根(真正的文件系统还没有加载)

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE (文件系统的跟)

grub> initrd/initramfs-VERSION-RELEASE.img

grub> boot # 启动


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

如果每次都手动编辑,并不是所有人都能够完成的, 所以就加了一个菜单项,菜单上显示的内容其实也就是grub配置文件中的设置,如下所示:


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

三、 grub legacy:配置文件 1.查看配置文件/boot/grub/grub.conf如下: 1 # grub.conf generated by anaconda
2 #
3 # Note that you do not have to rerun grub after making changes to this file
4 # NOTICE: You have a /boot partition. This means that
5 # all kernel and initrd paths are relative to /boot/, eg.
6 # root (hd0,0)
7 # kernel /vmlinuz-version ro root=/dev/mapper/vg0-root
8 # initrd /initrd-[generic-]version.img
9 #boot=/dev/sda
10 default=0
11 timeout=5
12 splashimage=(hd0,0)/grub/splash.xpm.gz
13 hiddenmenu
14 title CentOS 6 (2.6.32-642.el6.x86_64)
15 root (hd0,0)
16 kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun
16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto
17 initrd /initramfs-2.6.32-642.el6.x86_64.img 2.每行含义如下:

default=#: 设定默认启动的菜单项;假如同时装有多个操作系统,0表示定义的第一个title系统,1表示定义的第二个title系统,以此类推;

timeout=#: 表示可供选择的等待时间,如果超出5秒,则使用默认的启动条目default定义的;

splashimage=(hd#,#)/PATH/TO/XPM_FILE:菜单背景图片文件路径;
hiddenmenu:隐藏菜单,默认是不显示菜单信息,如果要想显示菜单,可以将该配置信息注释即可;
password [ md5] STRING: 启动菜单编辑认证

title TITLE: 定义菜单项“标题”(操作系统名称), 可出现多次,用来引导不同的操作系统或内核;

◎ root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub“根”。也就是说,表示的是内核文件的存放位置,这里指的是分区位置,而非根目录;
◎ kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]: 内核的名称,以及一些启动时的核心参数。由于启动过程中需要挂载根目录,因此就需要指定根目录所在的分区。rhgb表示色彩显示,quiet表示静默模式加载内核。
◎ initrd/PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件,虚拟文件系统;
◎password [ md5] STRING: 启动选定的内核或操作系统时进行认证。

=================================================================================

3.生成密码的命令:

grub-md5-crypt

openssl passwd -1


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

[实验1 : 为编辑启动菜单进行认证;为启用内核或操作系统进行认证] 操作步骤及过程如下:

1)复制一份内核文件,改名为Tao Linux,并分别在第一个title之前和第二个title之后添加生成的加盐密码,保存并退出,并重启系统;


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

2)重启系统之后发现要为进行编辑启动菜单的认证,效果如下:


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

3)按“p”键输入密码之后,可以发现原来的提示信息又回来了,这是我们就可以编辑了


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

4)选择第二个内核作为启动程序,按回车键发现要想启动内核,要输入密码认证,说明我们为内核设置的密码,起作用了。


Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

Image may be NSFW.
Clik here to view.
GRUB加密、修复和破解密码实战指南

4.破解root口令:

启动系统时,设置其运行级别1

5. 进入单用户模式 :

编辑grub菜单(选定要编辑的title,而后使用e命令);

Viewing all articles
Browse latest Browse all 11063

Trending Articles