背景:
以前一直想把 Debian 系统中 Secure Boot 开启,苦于网上没有找到成功 0-1 案例,没成功过
最近刚好大龄失业闲置在家,沉下心来花了一天时间终于搞好了,很有成就感
虽然 80 后,但热情不减当年,哈哈
A. 创建用于内核模块验证的证书
openssl req -newkey rsa:4096 -nodes -keyout debian-xyz.pem -new -x509 -sha256 -days 3650 -subj "/CN=debian.xyz" -outform PEM -out debian-xyz.pem
并在 BIOS 设置的 Secure Boot 中 enroll 你的 der 格式的证书
B. 配置你的 kernel .config
CONFIG_MODULE_SIG_KEY="/home/kernel/debian-xyz.pem"
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_SYSTEM_TRUSTED_KEYS="/home/kernel/debian-xyz.pem"
CONFIG_EFI=y
CONFIG_EFI_STUB=y
假如后面 UEFI 启动内核有问题,把 EXT4 这个文件系统模块编译进内核
C, 编译及安装 linux 内核
make CC=clang-20 LD=ld.lld-20 -j12 bindeb-pkg
D. 签名你的 vmlinuz
sbsign --key debian-xyz.key --cert debian-xyz-cert.pem /boot/vmlinuz-6.14.6 --output /boot/efi/EFI/debian/vmlinuz
E, BIOS 设置里开启 Secure Boot, 然后重启电脑, 没有问题,UEFI 就可以成功加载你的 kernel
F. 确认 Secure Boot 是否成功开启
使用 mokutil 以及 dmesg
root@debian:/home # mokutil --sb-state
SecureBoot enabled
root@debian:/home #
and
root@debian:/home # dmesg|grep -ni secure
71:[ 0.004032] Secure boot enabled
![]() |
1
beyondstars 32 天前
其实我感觉 secure boot 更多是 firmware 和 kernel 层面的东西,和 debian 直接关联性不是那么的强。
|
![]() |
2
zsj950618 32 天前 via Android
debian 已经有微软签过名的 shim 了啊,不需要你自己搞证书、编译内核,你看的是哪年过时的文档。。。
|
![]() |
4
ruanimal 32 天前
secure boot 开了有啥好处吗
|
![]() |
5
wuruxu OP @ruanimal 简单来说,开启 Secure Boot 就像给你的电脑启动过程增加了一道安全门,只有拥有正确“钥匙”(有效签名)的“访客”(启动组件)才能通过,从而有效地保护你的系统免受启动阶段恶意软件的侵害
|
6
julyclyde 32 天前
那这个安全性其实就取决于“在 BIOS 里 enroll 这个证书”步骤了?其他都是从这一步派生出来的
我记得前几年好像说还需要微软签名什么的,是咋回事?当时是不是 BIOS 不许用户自己加证书? |
7
julyclyde 32 天前
其次,你这里没给 bootloader 签名,那是不是直接用 UEFI 加载内核启动了?那内核的命令行参数咋传递给内核?
|
![]() |
8
wuruxu OP @julyclyde 电脑都是你自己的,BIOS 里可以 enroll 自己的证书,跟 MS 的在一个 db 里。bootloader 就是 BIOS 中 UEFI 模块启动内核的
|
14
julyclyde 31 天前
@wuruxu 为什么呢,这么神奇
按说开启 secure boot 之后,EFI 只会运行它承认的签名的 EFI executable 吧?不给 efibootmgr 签名应该会被拒绝? |
19
anytk 29 天前
用 rEFind 会更简单,而且可以直接绕过 grub 直接 boot 内核。但是 SB 这个东西吧,做开发的意义不是很大,而且开了 SB 就不能休眠了,DKMS ( N 卡驱动) 和 Out-of-Tree 模块都不能用了。
|
![]() |
20
wuruxu OP @anytk 刚刚测试了,开启了 Secure Boot , 可以正常休眠的 (Suspend to RAM)
开启 Secure Boot 适用于开源支持比较好的电脑 |
22
qbqbqbqb 15 天前
@anytk 限制休眠是 linux 的另外一个特性 lockdown (这个特性会禁用几乎所有直接访问内核内存、影响内核内存完整性的特性,比如说休眠,因为硬盘上的内存映像有可能被篡改)。
Secure boot, kernel module signing, lockdown 这些内核安全特性不是必须一起启用的,只是说 ubuntu 这类商业公司维护的发行版魔改了内核让它们联动开启而已。 你用原生不支持 Secureboot 的社区发行版(比如 Arch Linux ),或者自己编译内核的话,不是非要启动所有安全特性。比如我自己的 Linux 工作站就是只启用 Secure boot (给 systemd-boot 和 uki 签名),不开 kernel module signing ( NVIDIA 等第三方驱动无需签名),不开 lockdown (其它功能基本都不受影响) |