有没有办法在 Linux 中启用安全启动?

有没有办法在 Linux 中启用安全启动?

就像 Windows 具有安全启动功能,可防止任何外部 OS Loader 代码在启动时运行一样,Linux 本身也有类似的选项吗?我环顾四周,但当我搜索时,我得到的唯一结果是如何在支持 UEFI 的 Windows 计算机上安装 Linux。我找不到如何将此选项带到我的 Linux 机器上。

答案1

首先:生成自己的密钥

openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 \
       -subj "/CN=内核密钥" -outform DER -out kernel.der \
       -keyout 内核.key

尝试使用 CONFIG_EFI_STUB 编译 Linux 内核并将 initramfs 嵌入其中,如下所述:https://prosauce.org/blog/2015/10/31/booting-linux-securely,要签署模块,您可以使用下一个脚本:

/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 kernel.key kernel.der module.ko

然后使用内核命令行为您的笔记本电脑\工作站创建文件,并创建一个映像并将其复制到 efi boot 目录,如下所示:

# 对象复制 \
  --add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \
  --add-section .cmdline=/tmp/cmdline --change-section-vma .cmdline=0x30000 \
  --add-section .linux=/boot/vmlinuz --change-section-vma .linux=0x2000000 \
  --add-section .initrd=/boot/initrd.img --change-section-vma .initrd=0x3000000 \
/usr/lib/systemd/boot/efi/linuxx64.efi.stub linux.efi

# mkdir -p /boot/efi/EFI/BOOT

# sbsign --key /root/keys/ISK.key --cert /root/keys/ISK.pem --output /boot/efi/EFI/BOOT/BOOTX64.EFI linux.efi /boot/efi/EFI/BOOT /BOOTX64.EFI

要将自己的密钥安装到 MB 固件中,您可以执行如下命令:

openssl x509 -inform der -in kernel.der -outform pem -out kernel.pem
cert-to-efi-sig-list -g "$(uuidgen)" kernel.pem kernel.esl
Sign-efi-sig-list -k KEK.key -c KEK.pem 内核 kernel.esl kernel.auth

答案2

为了使安全启动正常工作,您的硬件应支持安全启动,并且您的操作系统应支持安全启动。

对于硬件,您可以检查UEFI设置菜单,并且需要添加操作系统提供的证书/密钥

对于操作系统,您可以通过以下命令检查支持:

[root@secureboot-guest ~]# cat /sys/kernel/security/securelevel 

如果上述命令的输出为“1”,则您的操作系统支持并启用安全启动。

如果此文件不存在,您需要检查您的内核是否编译有安全启动支持:

$ egrep "CONFIG_EFI_SECURE_BOOT_SECURELEVEL|CONFIG_SECURITY_SECURELEVEL" /boot/config-$(uname -r) 
CONFIG_EFI_SECURE_BOOT_SECURELEVEL=y
CONFIG_SECURITY_SECURELEVEL=y

答案3

AFAIK 安全启动是一项 UEFI 功能,由 Microsoft 和组成 UEFI 联盟的其他一些公司开发。

UEFI 部分是由硬件强制执行的,即您的主板配置可能会/可能不会妨碍。如果您使用完整的 UEFI,那么您很可能能够从 UEFI 菜单本身启用安全启动。

但是,如果您的固件是带有 CSM/BIOS 的 UEFI,那么您可能会遇到某些障碍,例如启用安全启动的选项变灰和所有。

相关内容