Archlinux基于sbctl及grub进行安全启动的可行办法
阿墨SisselMO233
编辑于 2026年04月13日 23:35

本人因工作及游戏需要,不希望每次启动win都要进那个破联想BIOS(独立显卡模式是真的卡的一比)修改安全启动。现向频道的各位提供一个我目前使用的可行办法。

首先感谢up主林长枫Shorin709 林长枫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%行之有效的攻略,忽略了一些动作,也搞得我云里雾里的。现在自己跑通了一个方法,就写个教程,说明以下原理和做法,分享给大家。

如果遇到奇奇怪怪的问题,欢迎在下面询问,如果不是这两个软件组合,也可以在下面沟通哦。