本人因工作及游戏需要,不希望每次启动win都要进那个破联想BIOS(独立显卡模式是真的卡的一比)修改安全启动。现向频道的各位提供一个我目前使用的可行办法。
首先感谢up主
林长枫Shorin709哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
的教学视频,让我走上了玩弄archlinux的道路。(bushi)有一说一,archlinux的低负载体验太好了。
其次感谢下面的两位老哥,你们的内容让我撮合撮合跑通了
archlinux 启用 Secure Boot (安全启动) 的最简单方法 -- sbctl - 知乎(贴链接失效,搞不懂为啥)
【在Arch Linux上启用UEFI/安全启动:sbctl】 网页链接
BTW:该行为存在潜在的安全风险,本教程不对此负责。同时请原谅我没有放图片,因为我没有采集卡,加上犯懒不想拍屏截图(我错了,放过我)
还有外面来的朋友也别放弃,按照教程一样可以操作,但是你前面生成的btrfs快照啥的类回档功能就不可用了,你回了档也得关安全启动才能正常回档进系统。所有的操作必须在生成回档前进行。
目的:
1、使用sbctl生成PK(密钥)将sbctl生成的PK导入BIOS
2、利用sbctl自签名grub的.efi文件、启动项的.efi文件和linux的内核文件
3、在生成启动项时加入相应的命令让BIOS承认密钥,不会被tpm拦截。
本教程只适用于sbctl+grub组合,使用其他软件组合的命令请自行百度。但是总体的操作目的和思路是一致的,其他软件应该也有相应的命令。
No.1 我有没有需求
如果你需要玩一些需要开启安全启动(FXXK ea,GC的战地6)的游戏,或者某些设备需要强制安全启动,同时厌烦每次双系统都要进BIOS改安全启动操作的朋友,这个教程值得一看。
No.2 我该从UP主林长枫的安装教程的哪一步开始
当你进行到up主的archlinux手动安装视频教程(【从LinuxMint入门到ArchLinux安装详解】 网页链接)的第34:35 处。实际安装流程中使用grub生成启动项的前一步。(其实也可以在之后再生成一次启动项,会覆盖之前生成的BIOS,有些时候如果你改动命名啥的ESP分区里就会多出一些没用的文件)
如果你不是从这位up视频来的也可以从grub-install开始(默认你懂这些内容哦,不懂可以去看这位up的视频)
No.3 接下来我该做什么
1、首先在up输入的grub-install命令的末尾 加上 以下内容执行生成uefi启动项(btw我也是抄作业带来的,所以对命令行的实际意思也不是非常懂,可以自行百度,反正至少我跑通了(手动狗头)):
--modules="tpm" --disable-shim-lock
同时强烈建议加上以下参数,以防你重置/升级BIOS的时候你自己的启动项被*
--removable
(按理来说再开一次设置模式导入就行了,但是我自己在一次升级BIOS后重新导入密钥,却失败了,win11却安然无恙,搞得我一头雾水)
这样你生成的启动项就会支持自签名了,不加的话,BIOS可不会认你的自签名(会直接弹因为安全政策不给启动,是这么翻译的吧)
然后执行后续的步骤生成你的grub启动项,然后继续执行up视频中的内容直到你重启你的电脑并连接网络(视频40:00处)你现在大概在享受你的代码雨(手动狗头)
此时重启你的电脑,进入你的BIOS,找到你的安全启动选项,下面会有一个选项叫做重置至设置模式(reset to setup mode)。
!!!!!!注意是你的安全启动(Serure Boot)选项,不是重置你的BIOS,请不要犯蠢!!!!!!
当你选择后,你的安全启动会被自动关闭(应该也是关着的,不然你重启进不去系统),保存并重启。
此时进入你的archlinux并以root账户登录(按照视频操作的话,你应该还没有创建用户账户),如果是自行安装的也请尽量在root账户下进行以下操作,如果是用户界面下请直接su root或者在所有命令前面加sudo(会有概率失败,强烈不建议)。
接下来就是sbctl的操作啦
2、安装sbctl(此时默认你已经生成好启动项并安装好os-prober):
pacman -S sbctl
3、安装完成后输入:
sbctl status
此时你应该可以看到
Installed:enabled
Setup mode:enabled
SecureBoot:disabled
Vendor keys:none
然后输入:
sbctl create-keys
生成你的密钥,同时有双系统的朋友请接着输入以下命令(有这需求的大概率都是双系统,谁arch单系统闲着没事干开安全启动):
sbctl enroll-keys -m
此时会导入你的微软密钥,接下来你可能会遇到以下情况(我遇到过不代表你会遇到),请按以下方法操作:
i、enroll-keys 会提示一些efiwars 不可写,请执行以下命令:
chattr -i /sys/firmware/efi/efivars/<不可执行的key的文件名,不需要括号>
让后重新执行enroll-keys
ii、如果此时发出了空间不足的报错(详看报错信息),请格式化你的efi分区并重新生成你的启动项,第一次操作遇到这个报错的可能性几乎为零(大概率无用密钥太多,有可能是你之前误操作啥的导致你的efi分区写了不少无用的内容在里面,别问我怎么知道的)或者扩容你的efi分区(100MB会概率报错,很奇怪,搞不懂为啥)
然后再看看输入:
sbctl status
此时你应该看到你的Vendor keys后面已经有内容了。
如果Vendor keys后面没有内容分的话请重新执行以上步骤,别往下继续了,如果从头开始执行,会遇到已经生成密钥和已经导入微软的key的报错,这些报错你可以无视。
如果你遇到前面ii里面的那些报错了,此时就麻烦了,你需要格式化你的/efi分区,重新插入你的启动盘U盘,重新chroot,重新挂载你的ESP分区,并重新从步骤1开始,强烈建议你在windows环境下格式化efi分区,沟槽的cfdisk就算用命令行强制格式化,他照样会把你里面的文件给恢复出来,前面哪些乱七八糟的问题大概率也是这个原因导致的(这种说法有可能不对,但是我遇到的就是这个情况)。
4、接下来就是检查你启动项的签名状态啦,输入以下的命令:
sbctl verify
这个时候会跳出一堆需要你签名的.efi文件路径(其中的确时候两个不用签名的,但是管他呢,签就完了,又不会出问题)
分叉注意:这个时候sbctl有时不会告诉你,你的内核文件没有签名,后面需要你手动的去找一找。
有些人用的时候会显示,有些人用的时候不会(不知道sbctl在发什么神经)
为了区分这两种情况请注意下面的分叉,请按照自己的情况进行操作:
分叉1:如果你的电脑在执行上一条命令时显示的路径中包含 /boot/vmlinuz-linux-<你对应的特化内核名称,如果你装的是linux默认内核就没有这个尾巴>
请注意他们的路径,以防被刷屏刷掉,可以拍个照或记一下,其实再执行一次上一条命令也能看
5、然后执行以下命令:
sbctl sign-all
这个破玩意儿不会告诉你有没有成功执行,你需要重新输入上一条命令去查验,输入完所有的启动项应该都会显示绿色的对勾。
6、如果还是一堆红色叉叉的话,请执行下面的手动命令:
sbctl sign -s <前面出现的路径,不要括号>
对着前面显示的所有红色叉叉的路径一个一个输入并全部执行一边,完成后再执行:
sbctl verify
检查一次,应该全部都是绿色对勾了。
接下来输入以下命令:
sbctl status
此时你会看到所有的项都应该是绿色的勾勾,接下来你就可以重启电脑,进入BIOS,开启安全启动保存并退出(此时BIOS会自动退出设置模式至用户模式),多内核用户请检查你的所有内核都能正常的进入系统,说明你成功啦,享受你的安全启动吧。
如果有红色叉叉,就重新执行分叉1步骤6,基本上没有遇到过,除非你漏了某个签名。我只能建议你休息一下,代码行的确让人眼花缭乱,认真检查自己有没有错过什么。
!!!!!!如果重启之后存在一个或多个内核安全启动失败的话,请进入BIOS重新启用安全启动设定模式并接着进行下面分叉2的操作!!!!!!
分叉2:如果你的电脑在执行上一天命令时显示的路径中不包含 /boot/vmlinuz-linux-<你对应的特化内核名称,如果你装的是linux默认内核就没有这个尾巴>
5、然后输入以下命令:
sbctl sign-all
这个破玩意儿不会告诉你有没有成功执行,你需要重新输入上一条命令去查验,输入完输入
sbctl verify
显示所有的启动项应该都会显示绿色的对勾。如果没有,请进行下面的操作。
6、输入命令:
sbctl sign -s <你输入sbctl verify后看到的所有efi文件完整路径,不需要括号>
请务必签完所有的.efi文件(我知道有两个不用,签就完了)
接下来我们手动签名内核文件 ,强烈建议你用yazi(看了视频的都知道这是啥)进自己的/boot目录看看自己的电脑有几个以vmlinuz开头的文件,尤其是多内核用户。
7、输入以下命令:
sbctl sign -s /boot/<所有以vmlinuz打头的文件的完整文件名,不要括号>
这个时候我们安装的所有archlinux内核应该都自签名完成了。
8、最后执行:
sbctl verify
检查是否已经全部绿色(其实其中有俩文件是不用签名的,但是管他呢,还是那句话签了又没事)。再输入:
sbctl status
此时应该也是全绿的
如果没有,检查对应的内容(如果你没有搞懂相关的步骤,请从步骤4重新开始)
最后重启电脑,开启安全启动模式,此时你的电脑会自动将安全启动从设定模式切换回用户模式,此时你的所有内核和win11都应该可以正常通过安全启动模式启动了。
写在最后:其实通过上面的步骤也能看出具体该做那些事情,设定启动项以便自签名会被承认、向BIOS导入自己生成的密钥、自签名内核和启动项文件。其实也就这三件事情,其他的bootloader和自签名软件大家可以自己查阅,倒腾倒腾。说不定自己就折腾出来了,我一开始查不到100%行之有效的攻略,忽略了一些动作,也搞得我云里雾里的。现在自己跑通了一个方法,就写个教程,说明以下原理和做法,分享给大家。
如果遇到奇奇怪怪的问题,欢迎在下面询问,如果不是这两个软件组合,也可以在下面沟通哦。