Linux基础知识 ·

grub安装与加密

Grub 安装修复

如果 grub 被损坏或者需要通过 grub-install (grub2为:grub2-install)命令重新安装 grub,因为 boot loader 有两个 stage ,而配置文件得要放置到适当的地方。 这个 grub-install 就是在安装配置文件 (包括文件系统定义文件与 menu.lst 等等) 而已! 如果要将 grub 的 stage1 主程序安装起来,就得要使用 grub shell 的功能!

grub为:grub-install [--root-directory=DIR] INSTALL_DEVICE

grub2为:grub2-install [--root-directory=DIR] INSTALL_DEVICE 

选项与参数:

--root-directory=DIR:那个 DIR 为实际的目录,使用 grub-install 默认会将grub 所有的文件都复制到 /boot/grub/* ,如果想要复制到其他目录与装置去,就得要用这个参数。
INSTALL_DEVICE:安装的装置代号!

范例:将grub2安装在目前系统的MBR底下,我的系统为/dev/sda:

grub 与 grub2 在这里都是一样的。

范例:如果系统的 grub 损坏无法进入系统,我们进行修复该怎么办呢?

首先重启挂载光盘,进入救援模式。

在 centos 中救援模式会自动搜寻文件系统内 /etc/fstab 并根据其内容,将各文件系统挂载于 /mnt/sysimage/,若是无法正确自动挂载与识别,可手动挂载 Linux 根分区,然后检查修复 /etc/fstab 内容,之后再重启让系统自动识别,或者手动按顺序挂载其Linux分区(首先挂载根文件系统,然后再挂载其他有独立分区的文件系统,swap分区可以不用挂载)。

当 Linux 的分区被正确挂载于指定目录后(Centos默认自动挂载与光盘/mnt/sysimag/,若手动挂载可自行指定),我们就可以使用 chroot 命令切换根目录,将根目录切换为我们将要修复的 Linux 系统。

当我们切换过来之后,先查看一下内核文件有没有损坏丢失,如果丢失,就需要将光盘内或预先准备的内核文件 cp 至 Linux 的 /boot/ 目录下,一般内核文件名为 vmlinuz+内核版本信息。

然后检查 /boot/initramfs 文件有没有损坏,如果 initramfs 文件损坏的话,我们可以通过 mkinitrd(Centos6)命令或 dracut(Centos7)命令,来重建 initramfs,其文件名一般为  initramfs+内核版本信息。

然后就可以使用各个grub版本对应的安装命令来安装 grub 程序了,grub-install 或 grub2-install。

安装完成后,若是 grub 版本,我们需要手动建立 /boot/grub/grub.cfg,而 grub2 版本我们需要使用其对应命令来建立 /boot/grub/grub.cfg ,然后重启就可以了。

grub加密设置

启动的过程里面提供口令保护首先必须要创建口令,而且还需要是加密过后的! 否则人家跑到 /boot/grub/menu.lst 就可以探查到你的启动口令了。

那如何创建加密的口令呢? 我们可以通过 grub 提供的 md5 编码来处理的,如下所示:

上面产生的最后一行,由 $ 开始到 . 结束的那行,就是你的口令经过 md5 编码过后的字符串! 将这个口令复制下来!假设我们要将第一个选项加入这个口令,而第四个选项加入另外的口令, 那你应该要这样做:

上表的案例中,我们两个菜单进入的口令并不相同,可以进行分类了!不过这样也造成一个问题, 那就是一定要输入口令才能够进入启动流程,如果你在远程使用 reboot 重新启动,并且主机前面并没有任何人的话.... 你的主机并不会主动进入启动程序!

你必须要注意的是:password 这个项目一定要在 title 底下的第一行。 不过,此项功能还是可能被破解的,因为使用者可以通过编辑模式 (e) 进入菜单,并删除口令栏位并按下 b 就能够进行启动流程了!

那怎办?只好通过整体的 password (放在所有的 title 之前) , 然后在 title 底下的第一行配置 lock ,那使用者想要编辑时,也得要输入口令才行!配置有点像这样:

那么重新启动后,画面会像这样:

你可以看到最下方仅出现 p 的功能,由于 2, 3, 4 菜单并没有使用 lock ,因此这三个菜单使用者还是可以运行启动程序, 但是第一个菜单由于有 lock 项目,因此除非你输入正确的口令,否则第一个菜单是无法被加载运行的。 另外,这个项目也能够避免你的 menu.lst 在启动的过程中被乱改,是具有保密 menu.lst 的功能啦! 与刚刚的菜单口令功能不同。

grub2 的帐号、密码与选单设定

grub2 有点在模拟Linux 的帐号管理方案!因为在grub2 的选单管理中,有针对两种身份进行密码设定:

  • superusers: 设定系统管理员与相关参数还有密码等,使用这个密码的用户,将可在grub2 内具有所有修改的权限。但一旦设定了这个superusers 的参数,则所有的指令修改将会被变成受限制的!
  • users: 设定一般帐号的相关参数与密码,可以设定多个用户!使用这个密码的用户可以选择要进入某些选单项目。不过,选单项目也得要搭配相对的帐号才行!(一般来说,使用这种密码的帐号并不能修改选单的内容,仅能选择进入选单去开机而已)

这样说可能你不是很容易看得懂,我们使用底下的一个范例来说明你就知道怎么处理了。另外,底下的范例是单纯给读者们看看而已的~ 不能够直接用在我们的测试机器里面!

范例:假设你的系统有三个各别的作业系统,分别安装在 (hd0,1), (hd0,2), (hd0,3) 当中。假设 (hd0,1) 是所有人都可以选择进入的系统, (hd0,2) 是只有系统管理员可以进入的系统,(hd0,3) 则是另一个一般用户与系统管理员可以进入的系统。另外,假设系统管理员的帐号/密码设定为 vbird/abcd1234, 而一般帐号为 dmtsai/dcba4321 ,那该如何设定?

如上表所示,你得要使用 superuses 来指定哪个帐号是管理员!另外,这个帐号与 Linux 的实体帐号无关,这仅是用来判断密码所代表的意义而已。而密码的给予有两种语法:

  • password_pbkdf2 帐号『使用grub2-mkpasswd-pbkdf2所产生的密码』
  • password 帐号『没加密的明码』

有了帐号与密码之后,在来就是在个别的选单上面加上是否要取消限制 (--unrestricted) 或者是给予哪个用户 (--users) 的设定项目。同时请注意,所有的系统管理员所属的密码应该是能够修改所有的选单,因此你无须在第三个选单上面加入 vbird 这个管理员帐号!这样说你就可以了解了吧?

你很可能会这样说:『了解个头啦!怎么可能会了解!前面不是才说过:「不要手动去修改grub.cfg 」吗?这里怎么直接列出grub.cfg 的内容?上面这些项目我是要在哪些环境配置文件里面修改啦?』呵呵~您真内行,没有被骗耶~好厉害~好厉害!

grub2 密码设定的文件位置与加密的密码

还记得我们在前几小节谈到主要的环境设定是在/etc/grub.d/* 里面吧?里面的文件文件名有用数字开头,那些数字照顺序,就是grub.cfg 的来源顺序了。因此最早被读的应该是00_header,但是那个文件的内容挺重要的,所以CentOS 7 不建议你改它~那要改谁?就自己建立一个名为01_users 的文件即可!要注意是两个数字开头接着底线的文件名才行!然后将帐号与密码参数给它补进去!

现在让我们将vbird 与dmtsai 的密码加密,实际在我们的测试机器上面建置起来吧!

很快的,你就已经将密码配置妥当了!

为个别的选单设定帐号密码的使用模式

回想一下我们之前的设定,目前测试机器的Linux 系统选单应该有五个:

  • 来自/etc/grub.d/10_linux 这个文件主动侦测的两个menuentry;
  • 来自/etc/grub.d/40_custom 这个我们自己设定的三个menuentry

在40_custom 内的设定,我们可以针对每个menuentry 去调整,而且该调整是固定的,不会随便被更改。至于10_linux 文件中, 则每个menuentry 的设定都会依据10_linux 的资料去变更,也就是由10_linux 侦测到的核心开机选单都会是相同的意思。

因为我们已经在01_users 文件内设定了set superusers="vbird" 这个设定值,因此每个选单内的参数除了知道vbird 密码的人之外, 已经不能随便修改了!所以,选择10_linux 制作出来的选单开机,应该就算正常开机,所以,我们预设不要使用密码好了!刚刚好10_linux 的menuentry 设定值就是这样:

现在我们假设在40_custom 里面要增加一个可以进入救援模式(rescue) 的环境,并且放置到最后一个选单中,同时仅有知道dmtsai 的密码者才能够使用, 那你应该这样作:

最后一步当然不要忘记重建你的grub.cfg 啰!然后重新开机测试一下,如果一切顺利,你会发现如下的画面:

你直接在1, 2, 3 选单上面按下enter 就可以顺利的继续开机,而不用输入任何的密码,这是因为有--unrestricted 参数的关系。第4, 5 选单中,如果你按下enter 的话,就会出现如下画面:

你可能会怀疑,怪了!为啥4, 5需要输入密码才行?而且一定要vbird这个系统管理员的密码才可接受?使用dmstai就不可以! 这是因为我们在4, 5忘记加上--users也忘记加上--restricted了!因此这两个项目『一定要系统管理员』才能够进入与修改。

最后,你在第6 个选单上面输入e 来想要修改参数时,输入的帐密确实是dmtsai 的帐密,但是,就是无法修改参数耶!怎么回事?我们前面讲过了, grub2 两个基本的功能(1)修改参数与(2)进入选单开机模式,只有系统管理员能够修改参数,一般用户只能选择可用的开机选单啦!这样说,终于理解了吧?哈哈!

我的预设选单里面没有加上--unrestricted 项目,同时已经设定了set superusers="vbird" 了,这表示『 grub.cfg 内的所有参数都已经受到限制』了, 所以,当倒数读秒结束后,系统会叫出帐号密码输入的视窗给你填写,如果没有填写就会一直卡住了!因此无法顺利开机!


以上部分内容摘自的Linux私房菜,本人只做简体转换。

参与评论