分享如何在 Debian 12 中开启 Secure Boot - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wuruxu
V2EX    Linux

分享如何在 Debian 12 中开启 Secure Boot

  •  2
     
  •   wuruxu
    wuruxu 229 天前 2570 次点击
    这是一个创建于 229 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景: 以前一直想把 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 
    22 条回复    2025-05-29 22:29:36 +08:00
    beyondstars
        1
    beyondstars  
       229 天前
    其实我感觉 secure boot 更多是 firmware 和 kernel 层面的东西,和 debian 直接关联性不是那么的强。
    zsj950618
        2
    zsj950618  
       229 天前 via Android
    debian 已经有微软签过名的 shim 了啊,不需要你自己搞证书、编译内核,你看的是哪年过时的文档。。。
    wuruxu
        3
    wuruxu  
    OP
       229 天前
    @zsj950618 shim 这个我也看到了,就是想自己搞个证书在系统里,然后从上到下过一边
    ruanimal
        4
    ruanimal  
       229 天前
    secure boot 开了有啥好处吗
    wuruxu
        5
    wuruxu  
    OP
       229 天前
    @ruanimal 简单来说,开启 Secure Boot 就像给你的电脑启动过程增加了一道安全门,只有拥有正确“钥匙”(有效签名)的“访客”(启动组件)才能通过,从而有效地保护你的系统免受启动阶段恶意软件的侵害
    julyclyde
        6
    julyclyde  
       229 天前
    那这个安全性其实就取决于“在 BIOS 里 enroll 这个证书”步骤了?其他都是从这一步派生出来的

    我记得前几年好像说还需要微软签名什么的,是咋回事?当时是不是 BIOS 不许用户自己加证书?
    julyclyde
        7
    julyclyde  
       229 天前
    其次,你这里没给 bootloader 签名,那是不是直接用 UEFI 加载内核启动了?那内核的命令行参数咋传递给内核?
    wuruxu
        8
    wuruxu  
    OP
       229 天前
    @julyclyde 电脑都是你自己的,BIOS 里可以 enroll 自己的证书,跟 MS 的在一个 db 里。bootloader 就是 BIOS 中 UEFI 模块启动内核的
    julyclyde
        9
    julyclyde  
       228 天前
    @wuruxu 前几年的版本是不是不许用户自己添加证书,所以才需要请微软签名?
    julyclyde
        10
    julyclyde  
       228 天前
    @wuruxu 你现在是 EFI 直接启动内核?那内核的命令行参数怎么传递进去呢?
    wuruxu
        11
    wuruxu  
    OP
       228 天前 via Android   1
    @julyclyde 看看 efibootmgr
    julyclyde
        12
    julyclyde  
       227 天前
    @wuruxu 那 efibootmgr 本身也需要签名吧?
    wuruxu
        13
    wuruxu  
    OP
       227 天前 via Android
    @julyclyde 不需要
    julyclyde
        14
    julyclyde  
       227 天前
    @wuruxu 为什么呢,这么神奇
    按说开启 secure boot 之后,EFI 只会运行它承认的签名的 EFI executable 吧?不给 efibootmgr 签名应该会被拒绝?
    wuruxu
        15
    wuruxu  
    OP
       227 天前 via Android
    @julyclyde 又不是 efibootmgr 启动的,是 uefi 启动的
    julyclyde
        16
    julyclyde  
       227 天前
    @wuruxu 哦。efibootmgr 本身并不是启动的一个环节,它只负责去设置 uefi 是吧?
    我刚才思路乱了,还以为是和 grub.efi 类似的东西
    wuruxu
        17
    wuruxu  
    OP
       227 天前 via Android
    yanqiyu
        18
    yanqiyu  
       227 天前
    @julyclyde #16 efibootmgr 只是把参数(和 efi stub 的路径)写进 nvram ,UEFI 直接就照着写好的路径启动内核了
    anytk
        19
    anytk  
       226 天前
    用 rEFind 会更简单,而且可以直接绕过 grub 直接 boot 内核。但是 SB 这个东西吧,做开发的意义不是很大,而且开了 SB 就不能休眠了,DKMS ( N 卡驱动) 和 Out-of-Tree 模块都不能用了。
    wuruxu
        20
    wuruxu  
    OP
       226 天前
    @anytk 刚刚测试了,开启了 Secure Boot , 可以正常休眠的 (Suspend to RAM)
    开启 Secure Boot 适用于开源支持比较好的电脑
    anytk
        21
    anytk  
       226 天前
    @wuruxu Suspend to RAM 是睡眠,休眠是 Suspend to disk ,可以断电。目前 SB 跟 休眠在 Linux 上无解。
    qbqbqbqb
        22
    qbqbqbqb  
       212 天前
    @anytk 限制休眠是 linux 的另外一个特性 lockdown (这个特性会禁用几乎所有直接访问内核内存、影响内核内存完整性的特性,比如说休眠,因为硬盘上的内存映像有可能被篡改)。

    Secure boot, kernel module signing, lockdown 这些内核安全特性不是必须一起启用的,只是说 ubuntu 这类商业公司维护的发行版魔改了内核让它们联动开启而已。

    你用原生不支持 Secureboot 的社区发行版(比如 Arch Linux ),或者自己编译内核的话,不是非要启动所有安全特性。比如我自己的 Linux 工作站就是只启用 Secure boot (给 systemd-boot 和 uki 签名),不开 kernel module signing ( NVIDIA 等第三方驱动无需签名),不开 lockdown (其它功能基本都不受影响)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2625 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 06:45 PVG 14:45 LAX 22:45 JFK 01:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86