最高可达 Ubuntu 12.04

最高可达 Ubuntu 12.04

我需要为 Ubuntu 14.04 LTS amd64 上的 GRUB2 设置密码。我尝试达到的设置是让 [e]dit 和 [c]onsole 选项受密码保护,但操作系统条目(Ubuntu、Windows)的启动不受保护。

我学过Grub2/密码(顺便说一下,它已经过时了,相当混乱,几乎不可读)而且我似乎需要设置超级用户密码并向--unrestricted菜单项添加选项。好的,但我到底应该在哪里添加此--unrestricted选项?

如果在,/boot/grub/grub.cfg那么这不是最聪明的想法,因为每次grub-update运行时都会覆盖此文件。所以这对我来说不是一个选择,因为 - 让我们假设 - 我喜欢每周更改两次 GRUB 背景图像。此外,/boot/grub/grub.cfg可读性远非完美;仍然不清楚将--unrestricted选项放在哪里。

如果在菜单中的条目文件中/etc/grub.d/*,那么它甚至比编辑更糟糕/boot/grub/grub.cfg。这些文件在可读性方面相当混乱,因此编辑它们就更加困难了。

有没有像我描述的一样简洁易用的方法来设置 GRUB2 密码?除了我在这篇文章中链接的文档之外,也许还有一些出色的文档?

答案1

根据保护条目部分

目前没有自动添加用户或指定要保护的菜单项的方法。用户必须手动编辑 GRUB 2 脚本。GRUB 2 菜单是多个脚本输入的汇编。/etc/grub.d/10_linux 文件负责将默认的 Ubuntu 操作系统添加到 GRUB 2 菜单。[...] 这些部分的大部分内容用于编辑位于 /etc/grub.d/ 文件夹中的默认脚本。

并且在下一节

GRUB 2 菜单通过 /etc/grub.d/30_os-prober 脚本包含除默认 Ubuntu 操作系统之外的操作系统的选择。[...] 这将包括其他 Ubuntu 和 Linux 安装、Windows 等。

30_os-prober 脚本会查找特定类型的操作系统。用户可以通过单个命令对所有操作系统进行更改,也可以按照下面所述按操作系统类型单独进行更改。

因此,您似乎必须编辑 中的文件/etc/grub.d/。至少对于添加超级用户,您不需要编辑其中一个文件,但可以创建一个新文件

超级用户/用户信息和密码不必包含在 /etc/grub.d/00_header 文件中。只要该文件已合并到 grub.cfg 中,信息就可以放在任何 /etc/grub.d 文件中。用户可能更愿意将此数据输入自定义文件(例如 /etc/grub.d/40_custom),以便在 Grub 软件包更新时不会被覆盖。如果将信息放在自定义文件中,请不要包含“cat << EOF”和“EOF”行,因为内容会自动从这些文件添加。

以下段落仍然适用,除非官方 GRUB 文档另有说明:

grub-mkconfig 程序尚未内置对生成带有身份验证的配置文件的支持。

(不管那意味着什么。)


最高可达 Ubuntu 12.04

以下是保护菜单项的过时说明:

在 /etc/grub.d/10_linux 中,找到以下行:

printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

添加--users ''

printf "menuentry '${title}' ${CLASS} --users '' {\n" "${os}" "${version}"

对于 中的所有条目30_os-prober

sudo sed 's/--class os /--class os --users /' -i /etc/grub.d/30_os-prober

Ubuntu 软件包没有列出 Ubuntu 12.10,所以我不确定 12.10 是使用旧方法还是新方法。

Ubuntu 13.04 及更高版本

现在,该10_linux文件使用echo而不是printf

echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

30_os-prober文件使用cat以下文档:

# The minix entry
cat << EOF
menuentry "${LONGNAME} (on ${DEVICE}, Multiboot)" {
EOF
# The hurd entry
cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class hurd --class gnu --class os \$menuentry_id_option 'osprober-gnuhurd-/boot/gnumach.gz-false-$(grub_get_device_id "${DEVICE}")' {
EOF

因此,您可以--user ""在菜单项结束之前(大括号打开之前)将该部分粘贴到某处。

记住备份您修改的任何文件,并update-grub在修改后运行。

答案2

配置superusers。为此,例如,将以下行添加到/etc/grub.d/00_header

# Support user protection on entries
cat << EOF
set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000.8E51188BE7DF732DDF102C918DEC152087558E04DA843B4A74C3EA8374BAB1ECA493399D62E3F2779F55C5BE2E8B65B8636113A99C09BFB892DB64626337904C.3016474FE6B420DBE6371B41D9BE8471B135CDF4BE674AC1265D3BA123CD9E459E960AEC199AB8C7C1C1A6BAF45314C64591E85E404AB54F4777E032A50CC731
EOF

使用命令的输出更新加密密码grub-mkpasswd-pbkdf2。在我们的示例中,您需要更改以下信息:

grub.pbkdf2.sha512.10000.8E51188BE7DF732DDF102C918DEC152087558E04DA843B4A74C3EA8374BAB1ECA493399D62E3F2779F55C5BE2E8B65B8636113A99C09BFB892DB64626337904C.3016474FE6B420DBE6371B41D9BE8471B135CDF4BE674AC1265D3BA123CD9E459E960AEC199AB8C7C1C1A6BAF45314C64591E85E404AB54F4777E032A50CC731

编辑/etc/grub.d/10_linux文件并查找第 129 行(在 Ubuntu 14.04 LTS 中)。原始格式​​应如下所示:

echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id'     {" | sed "s/^/$submenu_indentation/"

这里,--unrestricted在 CLASS 变量后添加选项以完成配置行:

echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --unrestricted \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

重建/boot/grub/grub.cfg。为此,请运行sudo update-grub命令。

重新启动系统并尝试。

现在您应该有一个配置:

  • Ubuntu 操作系统主条目将正常启动,但除了它之外没有人superusers能够编辑列表中的相关条目。

  • 只有superusers能够启动和编辑列表中的所有其他条目。


也可以看看:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-GRUB_2_Password_Protection.html

相关内容