我需要为 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
能够启动和编辑列表中的所有其他条目。
也可以看看: