实验目的:

  • 需要能够正常登录,使用ubuntu
  • 在进入GRUB编辑启动参数、shell的时候,我们需要进行一个密码验证
Ubuntu24.04启动保护实验
实验环境如上图

正常情况下,我们的ubuntu系统并不会对grub中进行密码设置,所以可以通过按shift或者是Esc进入设置界面然后按e对启动参数进行修改,从而直接进入到root shell。所以我们需要对此情况进行防护。

一、生成GRUB密码

首先我们可以执行这串代码:

sudo grub-mkpasswd-pbkdf2

执行 sudo grub-mkpasswd-pbkdf2 的目的是生成一个加密的密码哈希值,用于在 GRUB 引导加载程序中设置密码保护。这个命令会交互式地要求你输入两次密码,然后输出一段以 grub.pbkdf2.sha512.10000. 开头的长字符串.

然后我们就可以得到一个类似于:

Ubuntu24.04启动保护实验
输出结果如图

二、创建GRUB用户配置

我们可以使用如下代码:

sudo nano /etc/grub.d/01_users

这是用于创建或编辑一个 GRUB 配置脚本文件,该文件的作用是在生成最终的 GRUB 配置文件时,定义用户和密码信息,从而实现 GRUB 引导菜单的访问控制。

然后在打开的文件中写入:

#!/bin/sh
cat << EOF
set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.xxxxxxxxxxxxxxxxx
export superusers
EOF

当这个脚本被 /etc/grub.d/ 机制执行时,它会输出这些 GRUB 配置命令到标准输出,最终被合并到 /boot/grub/grub.cfg 文件中。其目的是在 GRUB 中设置一个名为 admin 的超级用户及其密码哈希,从而启用密码保护。

三、赋予执行权限

使用如下指令来赋予执行权限:

sudo chmod 755 /etc/grub.d/01_users

赋予执行权限

四、修改启动项

首先执行修改10_linux的命令:

sudo nano /etc/grub.d/10_linux

然后将 menuentry 修改为:

在 linux_entry() 初做修改为:
if [ x$type != xsimple ] ; then
    case $type in
        recovery)
            title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
            ;;
        *)
            title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")"
            ;;
    esac

    case $type in
        recovery)
            echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
            ;;
        *)
            echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} --unrestricted \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
            ;;
    esac
else
    echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --unrestricted \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
fi

此代码的目的为在启用 GRUB 密码保护的环境下,为不同类型的 Linux 内核启动项定制化地设置访问权限,使得普通用户无需密码即可正常启动系统,而恢复模式等需要更高权限的选项则要求密码验证,从而提升系统安全性,同时保持菜单的易读性和结构的完整性。

最后我们执行:

sudo update-grub

就设置完毕了,接下来进行验证

reboot之后我们按住shift,然后按e可以看见如下情况:

Ubuntu24.04启动保护实验

有图可知我们设置成功了,进行输入密码尝试一下

Ubuntu24.04启动保护实验

输入我们的账号密码之后发现设置成功了。


核桃大魔王