如何轻松设置GRUB2密码?
我需要在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密码的简洁方法? 也许除了我在这篇文章中链接的文档之外,还有一些精彩的文档
根据保护条目部分 :
目前没有添加用户或指定要保护的菜单项的自动方法。 用户必须手动编辑GRUB 2脚本。 GRUB 2菜单是几个脚本输入的汇编。 /etc/grub.d/10_linux文件负责将默认的Ubuntu OS添加到GRUB 2菜单。 […]这些部分中的大多数专门用于编辑位于/etc/grub.d/文件夹中的默认脚本。
在下一节中 :
GRUB 2菜单包括通过/etc/grub.d/30_os-prober脚本为默认Ubuntu OS以外的操作系统选择。 […]这将包括其他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程序还没有内置支持来生成带有身份validation的配置文件。
(无论那是什么意思。)
高达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
和heredocs:
# 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
所以你可以在menuentry结束之前(在大括号打开之前)将--user ""
部分粘贴在某处。
请记住备份您修改的任何文件,并在修改后运行update-grub
。
配置superusers
。 为此,例如, /etc/grub.d/00_header
添加到/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中)。 在其原始forms,它应如下所示:
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
在此处,在CLASS变量之后添加--unrestricted
选项以完成配置行:
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
才能启动和编辑列表中的所有其他条目。
也可以看看: