UEFI Secure Boot¶
UEFI Secure Boot(安全启动)是大多数 UEFI 系统默认启用的一个选项。它是一种安全策略,设计目标是只允许经过签名的代码在引导时运行。
需要指出的是,UEFI Secure Boot 本质上是一种"付费才能参与"的安全作秀。除非你准备管理自己的密钥(这是一项繁琐且往往基本靠手工完成的工作),否则对于什么样的代码能被签名、谁能执行签名,并没有任何有意义的限制。唯一真正的门槛是准备好花费 5 万美元以上来进入代码签名体系。启用 UEFI Secure Boot 并不能阻止恶意代码在你的系统上运行,但确实能阻止你在自己的系统上构建和运行自己的代码。

启用 UEFI Secure Boot 还会给系统增加显著的复杂性,并很可能让系统变得更不健壮、更不可靠。
让 UEFI Secure Boot 保持启用的唯一真正好处是:省得你手动进入 UEFI BIOS 设置界面去关闭 Secure Boot 选项。
如果你确实需要,也可以在启用 UEFI Secure Boot 的情况下使用 iPXE。
链式加载 iPXE¶
你可以使用内置的 UEFI 网络协议栈,通过 TFTP 或 HTTP 从网络加载 iPXE。从 https://github.com/ipxe/ipxe/releases/latest/download/ipxeboot.tar.gz 下载最新的 iPXE 签名版本,并把压缩包解压到 TFTP 或 HTTP 服务器上的某个目录中。
你会得到类似这样的目录结构:
ipxeboot
|-- arm64-sb
| |-- ipxe.efi
| |-- ipxe-shim.efi
| |-- shimaa64.efi
| |-- snponly.efi
| |-- snponly-shim.efi
|-- x86_64-sb
| |-- ipxe.efi
| |-- ipxe-shim.efi
| |-- shimx64.efi
| |-- snponly.efi
| |-- snponly-shim.efi
|-- ....
你需要配置 DHCP 服务器,让它分发与你想运行的 iPXE 二进制文件对应的 shim 路径。例如,如果你使用 ISC dhcpd 并想运行 ipxe.efi,就需要配置 DHCP 服务器分发 ipxe-shim.efi 的路径:
next-server 192.168.0.1;
filename "/ipxeboot/x86_64-sb/ipxe-shim.efi";
Secure Boot shim(例如 ipxe-shim.efi 或 snponly-shim.efi)会自动加载与之同名的 iPXE 二进制文件(例如 ipxe.efi 或 snponly.efi)。
你可以在同一目录中放置一个名为 autoexec.ipxe 的 iPXE 脚本来控制后续的引导过程。例如:
#!ipxe
echo Hello Secure Boot world from ${cwuri}
show efi/SecureBoot
shell
注意,你只能在预编译的 ipxe.efi 和 snponly.efi 二进制文件之间选择。ipxe.efi 二进制文件缺少若干在 UEFI Secure Boot 构建中被禁止的功能。你无法按照自己的需要构建包含特定功能的 iPXE 版本,因为 UEFI Secure Boot 的设计目的就是阻止你这样做。
可引导 ISO 或 U 盘¶
你可以使用预构建的 ISO 和 USB 镜像,从本地 CD-ROM 或 U 盘加载 iPXE。从 https://github.com/ipxe/ipxe/releases/latest 下载相应的镜像,并按常规方式写入 CD-ROM 或 U 盘。
使用 USB 镜像时,你可以通过编辑根目录下名为 autoexec.ipxe 的 iPXE 脚本来控制后续的引导过程。
注意,你只能使用预编译的 ISO 和 USB 镜像。它们缺少若干在 UEFI Secure Boot 构建中被禁止的功能。你无法按照自己的需要构建包含特定功能的 iPXE 版本,因为 UEFI Secure Boot 的设计目的就是阻止你这样做。
引导 Windows¶
在启用 UEFI Secure Boot 的情况下,你可以按常规方式使用 iPXE 配合 wimboot 引导 Microsoft Windows。Windows 和 wimboot 都已经有 UEFI Secure Boot 签名,你无需对现有的 iPXE 脚本做任何修改。
引导 Linux¶
在启用 UEFI Secure Boot 的情况下,只要某个 Linux 发行版带有签名的 UEFI shim,你就可以使用 iPXE 引导该发行版。你需要修改 iPXE 脚本,添加 shim 命令。例如,引导 Fedora:
#!ipxe
set mirror https://fedora.mirrorservice.org/fedora/linux/releases/43
set repo ${mirror}/Everything/x86_64/os
kernel ${repo}/images/pxeboot/vmlinuz inst.repo=${repo}
initrd ${repo}/images/pxeboot/initrd.img
shim ${repo}/EFI/BOOT/BOOTX64.EFI
boot
如果 UEFI Secure Boot 被禁用,或者你运行在非 UEFI 平台上,shim 命令会静默地什么都不做。因此你可以放心地把它一直留在脚本中,iPXE 只会在需要时使用 shim。