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

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

  •  2
     
  •   wuruxu ·
    wuruxu · 2 天前 · 1087 次点击

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

    我记得前几年好像说还需要微软签名什么的,是咋回事?当时是不是 BIOS 不许用户自己加证书?
    julyclyde
        7
    julyclyde  
       1 天前
    其次,你这里没给 bootloader 签名,那是不是直接用 UEFI 加载内核启动了?那内核的命令行参数咋传递给内核?
    wuruxu
        8
    wuruxu  
    OP
       1 天前
    @julyclyde 电脑都是你自己的,BIOS 里可以 enroll 自己的证书,跟 MS 的在一个 db 里。bootloader 就是 BIOS 中 UEFI 模块启动内核的
    julyclyde
        9
    julyclyde  
       1 天前
    @wuruxu 前几年的版本是不是不许用户自己添加证书,所以才需要请微软签名?
    julyclyde
        10
    julyclyde  
       1 天前
    @wuruxu 你现在是 EFI 直接启动内核?那内核的命令行参数怎么传递进去呢?
    wuruxu
        11
    wuruxu  
    OP
       19 小时 23 分钟前 via Android   ❤️ 1
    @julyclyde 看看 efibootmgr
    julyclyde
        12
    julyclyde  
       19 小时 11 分钟前
    @wuruxu 那 efibootmgr 本身也需要签名吧?
    wuruxu
        13
    wuruxu  
    OP
       19 小时 8 分钟前 via Android
    @julyclyde 不需要
    julyclyde
        14
    julyclyde  
       19 小时 5 分钟前
    @wuruxu 为什么呢,这么神奇
    按说开启 secure boot 之后,EFI 只会运行它承认的签名的 EFI executable 吧?不给 efibootmgr 签名应该会被拒绝?
    wuruxu
        15
    wuruxu  
    OP
       18 小时 51 分钟前 via Android
    @julyclyde 又不是 efibootmgr 启动的,是 uefi 启动的
    julyclyde
        16
    julyclyde  
       18 小时 50 分钟前
    @wuruxu 哦。efibootmgr 本身并不是启动的一个环节,它只负责去设置 uefi 是吧?
    我刚才思路乱了,还以为是和 grub.efi 类似的东西
    wuruxu
        17
    wuruxu  
    OP
       18 小时 49 分钟前 via Android
    yanqiyu
        18
    yanqiyu  
       17 小时 10 分钟前
    @julyclyde #16 efibootmgr 只是把参数(和 efi stub 的路径)写进 nvram ,UEFI 直接就照着写好的路径启动内核了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5819 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:02 · PVG 10:02 · LAX 19:02 · JFK 22:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.