Grub2加密----"禁止"修改启动菜单
2018-03-03 10:03
405 查看
Grub2加密—-“禁止”修改启动菜单
自己的机子装了双系统,改用 Grub2 引导 Windows.这就带来一个问题: Linux 的 root 密码可以通过进入单用户模式重置(大家都知道).
可以把整个Grub2加密,但这样每次都要输入密码,很麻烦.
如果只在修改启动参数时才要输入密码,而正常引导不用,问题就解决了.
查了一下资料,参考了别人的做法,笔记如下.
系统为 Ubuntu 16.04 LTS,UEFI 引导
仅供参考,请结合实际情况谨慎操作
修改前,建议预先备份文件
如有错误,欢迎指正,谢谢
E-mail:tophf4@126.com
大概流程:
1. 设置超级用户
2. 对相应菜单项设置限制
3. 更新grub.cfg
Grub2加密—-“禁止”修改启动菜单
设置Grub2超级用户
添加脚本文件
设置用户及密码加密至脚本文件中
对相应菜单项进行加密
找到引导界面中的菜单项在相应生成脚本的位置
添加菜单项参数
更新grub.cfg
其他
设置Grub2超级用户
注意,这里的用户不是系统中的用户添加脚本文件
要启用加密认证支持,必须设置超级用户,其拥有拥有所有系统菜单进入、修改、启动权限. 普通用户可以不设置.我把超级用户的名字和密码都写在用于生成grub2的脚本文件中,而不是直接修改
/boot/grub/grub.cfg.
脚本文件在
/etc/grub.d/下,
update-grub命令执行时会读取此目录下的文件,并将配置合并至grub.cfg中,grub.cfg中的菜单顺序是由此目录中的文件顺序决定的,文件开头数字较小的会先执行,全英文名字的文件将会在最后执行,自定义选项在40_custom中定义,或者建立一个新文件,此目录下的文件必须有执行权限才会被update-grub读取,并把配置合并到grub.cfg中
我新建一个文件,
01_users(也可用别的名字)用于放置用户信息,权限改成和别的脚本一样.
设置用户及密码加密至脚本文件中
将下列文本写入至01_users:
#!/bin/sh cat <<EOF set superusers="root" # 超级用户的名字,可以改成别的 password_pbkdf2 root grub.pbkdf2.sha512.10000.0D0D4315C73E55A4DE1DEE449E84076E00F1C1430E85862DA91F0D559871DADE672A13301136DAB2442257F688BB6895FA6DE0A55C1F43FFB941E8CF2AA21951.03A0C55676177F6C7387DDE0DFC24B4E8E7C4854BF72CA239A754613F0EF4D7E1ADED0EE89081A6C8DBD30D1F8860FB835B4211E5F8BE99196867FAA529F15EA # root 密码的哈希值,待会说如何生成 #password root 12345 #明文密码 EOF
生成密码的哈希值:
grub-mkpasswd-pbkdf2
对相应菜单项进行加密
只要在引导界面中的菜单项中添加–unrestricted,
就可以让任何人都可以boot,但是不能‘e’,即修改启动参数
参数要在生成脚本中添加,而不是直接修改
grub.cfg,
不然每次内核更新就会将
grub.cfg打回无保护的状态.
不过生成脚本贼复杂,如果嫌麻烦可以看文章最后的方法(有风险).
找到引导界面中的菜单项在相应生成脚本的位置
为得到自己系统的引导菜单,可以:a. 引导时记录下来
b. 查看
/boot/grub/grub.cfg
若是查看
/boot/grub/grub.cfg,
则找到
menuentry后面的用单引号括起的字串, 和
submenu后面的用单引号括起的字串:
例如上图的
'Ubuntu'.
下图的
'Ubuntu 高级选项'.
menuentry表示这是一个启动项,而
submenu表示这是一个子菜单,里头包含很多启动项.
然后找到它们分别属于那个生成脚本:
例如上图的
'Windows Boot Manager (on /dev/sdb1)'就包含在
/etc/grub.d/30_os-prober中,其他的也一样.
接下来就找到菜单项在生成脚本的位置:匹配菜单项的参数
例如,从以下俩图显然能看出来第一张为生成脚本,它生成的菜单项就是第二张图的内容
这个就是我机子中的Windows引导项.
添加菜单项参数
建议预先备份相应文件关于菜单项加密参数的用法有很多,我只需要可以实现禁止’e’菜单项的:
在生成脚本中添加
--unrestricted.
位置就是刚才找到的位置,例如
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
在后面添加
--unrestricted:
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' --unrestricted {" | sed "s/^/$submenu_indentation/" #####################################################################################################################这里
子菜单
submenu也一样.
更新grub.cfg
建议预先备份相应文件生成新的grub.cfg:
sudo update-grub2
ok.
其他
若是怕麻烦,一般情况下,生成引导菜单项的生成脚本为/etc/grub.d/10_linux:定位当前操作系统使用中的root设备内核的位置
/etc/grub.d/30_os-prober用来搜索其他系统
然后在所有的菜单项中添加参数(一刀切),不过可能会带来问题.
相应文件要备份好,特别是
/boot/grub/grub.cfg.
参考链接:
GNU GRUB Manual 2.02:https://www.gnu.org/software/grub/manual/grub/grub.html
GRUB2配置文件”grub.cfg”详解(GRUB2实战手册:http://www.jinbuguo.com/linux/grub.cfg.html
Linux GRUB2 配置简介 :https://linux.cn/article-8603-1.html
Grub2加密:http://blog.csdn.net/ztq157677114/article/details/52788765
Ubuntu下Grub配置详解:https://www.linuxidc.com/Linux/2016-10/135741.htm
相关文章推荐
- 正确修改Ubuntu12.04的grub2启动背景图片和菜单颜色的方法,这次是真的!
- 修改Ubuntu12.04 开机启动菜单,包括系统启动等待时间,系统启动顺序
- 关于Ubuntu开机启动菜单grub2(选择内核、删除内核、调整内核启动顺序)
- 如何编辑修改Windows NT/2000/XP启动菜单“BOOT.INI”文件
- Ubuntu 10.04 修改启动菜单默认系统的的方法
- 系统启动菜单过后出现"硬件配置文件/硬件恢复"菜单
- 如何修改Win7系统的多系统启动菜单。
- 修改grub2默认启动顺序
- Ubuntu 10.04 修改启动菜单默认系统的的方法
- [技巧]记事本修改c://boot.ini打造个性启动菜单
- 修改XP/Win7双系统启动菜单显示名称
- [CrunchBang]修改win+ubuntu 双 系统菜单的 启动顺序 引导
- windows7修改启动菜单选项
- 修改linux启动菜单
- 修改windows启动菜单
- Ubuntu 10.04 修改启动菜单默认系统的的方法
- 收集"琥珀无限级联动菜单-AJAX版 [睿翔网络科技修改"
- windows7启动菜单修改
- 技巧:修改boot.ini产生彩色的启动菜单
- 修改Ubuntu12.04启动菜单,图形界面软件grub-customizer