ITADN
anatol/booster
anatol/booster · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Booster - 快速、安全、现代的 Linux initramfs

Booster initramfs generator

Booster 让早期启动感觉更轻量、更快、更可靠。 它构建紧凑的 initramfs 镜像,以最小的麻烦和强大的加密启动支持,将您的 Linux 系统从固件引导至真实根文件系统。

Booster 不会打包一个庞大的通用早期用户空间,而是发现您的机器实际所需,并围绕其构建一个专注的镜像。 结果是一个精简的启动镜像,包含您的主机所需的驱动程序、解锁工具、文件系统支持和恢复路径,而无需在每次重启时携带一个“大杂烩”。

为什么选择 Booster?

Booster 围绕一个简单的承诺构建:早期启动应该快速、清晰、安全且易于操作。

亮点:

  • 通过更小的镜像实现更快启动 - 快速生成精简镜像,并使早期启动专注于系统实际所需的工作。
  • 让加密 Linux 体验变得轻松 - 使用密码、密钥文件、分离头、TPM2、FIDO2 安全密钥、Clevis 风格的绑定或远程 SSH 解锁来解锁 LUKS 根分区。
  • 自信地使用现代安全硬件 - 支持 systemd-cryptenroll TPM2 和 FIDO2 令牌,包括通过 Booster 插件路径提供的原生 FIDO2 支持。
  • 享受平静、协调的提示 - 硬件令牌、PIN 和密码流程协同工作;成功的解锁路径会取消不再需要的提示。
  • 获得更流畅的 FIDO2 启动 - Booster 可以在请求 PIN 之前预检查已连接的 FIDO2 密钥,静默跳过错误的密钥,并在令牌缺失时干净地回退。
  • 从任何管理位置解锁系统 - 在早期启动期间使用 SSH 来管理无头、机架安装或难以触及的加密机器。
  • 避免臃肿的早期用户空间 - 主机特定的发现功能默认包含您的机器所需的内容。
  • 构建灵活的救援镜像 - 通用模式为便携式安装、恢复介质和变化的硬件提供更广泛的硬件覆盖。
  • 覆盖真实的存储布局 - 处理 ext4、Btrfs、ZFS、LVM、mdraid、GPT 自动发现、休眠恢复设备以及多个 LUKS 映射。
  • 自信地检查和调试 - 在信任其启动之前,使用内置命令列出、读取和解包镜像。

Booster 非常适合加密笔记本电脑、开发者工作站、需要远程恢复功能的服务器、极简 Linux 系统,以及那些在配置多年后仍应保持易于理解的启动设置。

功能概览

仿佛内置的加密体验

Booster 将全盘加密视为一流的工作流,而非附加组件。 它可以从内核参数、/etc/crypttab、GPT 自动发现、指向 LUKS 容器的直接 root= 引用、密钥文件、分离的头部以及硬件支持的令牌中解锁 LUKS 设备。

支持的解锁方式包括:

  • 带有谨慎提示处理的纯密码解锁。
  • 用于相关加密卷的共享密码缓存。
  • 嵌入在 initramfs 中或存储在单独设备上的密钥文件。
  • 嵌入在镜像中、从原始块设备读取或从单独文件系统加载的分离 LUKS 头部。
  • systemd-cryptenroll TPM2 和 FIDO2 令牌。
  • 用于 TPM2、Tang 和其他支持策略的 Clevis 风格绑定。
  • 用于无法物理接触系统的基于 SSH 的远程密码解锁。

没有粗糙边缘的硬件令牌

Booster 的令牌编排旨在让加密启动感觉更加精致。 非交互式令牌可以在后台竞争,基于 PIN 的令牌按确定性顺序提示,而常规密码提示作为回退出现,而不是永远阻塞整个启动过程。

最近的 FIDO2 改进使体验更加流畅:

  • 可通过 enable_fido2: true 启用原生 FIDO2 支持。
  • 包含 fido2-device=crypttab 条目可促使 Booster 自动打包 FIDO2 插件。
  • Booster 可在请求 PIN 之前,检查已连接的 FIDO2 密钥是否确实拥有该凭据。
  • 缺失令牌提示会被延迟,以便快速 TPM2、Clevis 或其他令牌解锁能够完成,而不会产生不必要的噪音。
  • 提交空 PIN 会跳过该令牌并继续到下一个解锁路径。

与您的机器匹配的小型镜像

默认情况下,Booster 会构建一个特定于主机的镜像。 它会检查当前系统,包含启动该系统所需的模块和工具,并排除不必要的组件。 这使得镜像更易于审计,生成速度更快,并且在启动期间执行速度更快。

当您需要更广泛的镜像时,--universal 包含更广泛的模块集,用于救援场景、便携式介质或硬件可能变化的系统。

用户实际使用的存储布局

Booster 支持实用的真实世界启动布局,包括:

  • GPT 可自动发现的根分区。
  • 位于 LUKS、LVM、mdraid、Btrfs、ZFS、NVMe、USB、MMC 和 eMMC 上的根文件系统。
  • Btrfs 子卷和多设备 Btrfs 配置。
  • 休眠恢复设备。
  • 通过 UUID=LABEL=PARTUUID=PARTLABEL=HWPATH=WWID=/dev/... 进行设备引用。
  • 来自内核命令行或 /etc/crypttab 的多个加密映射。

更好的早期启动可见性

当出现问题时,Booster 提供了有用的方式来查看发生了什么。 使用 booster.log=debug,console 获取详细的启动日志,添加 busybox 以进入紧急 shell,或启用网络支持以从无法启动的机器中检索日志。

Booster 还包含镜像检查命令,以便您在重启前验证所构建的内容:

booster ls /boot/booster-linux.img
booster cat /boot/booster-linux.img /init
booster unpack /boot/booster-linux.img /tmp/booster-image

安装

Arch Linux

安装官方软件包:

pacman -S booster

该包在 /boot/ 中创建 Booster 镜像:

$ ls -lh /boot/booster-*.img
-rwxr-xr-x 1 root root 3.9M Dec 10 20:51 /boot/booster-linux.img

Void Linux

使用以下命令安装 Booster:

xbps-install -S booster

然后为已安装的 kernel 重新生成 initramfs:

xbps-reconfigure -f linux

Alpine Linux

使用以下命令安装 Booster:

apk add booster

然后阅读 /usr/share/doc/booster/README.alpine 以获取特定于设置的引导加载程序说明。

手动构建

您也可以直接构建镜像:

booster build /boot/booster-linux.img

对于具有更广泛硬件支持的更便携镜像:

booster build --universal /boot/booster-linux.img

创建镜像后,将引导加载程序指向该镜像。 有关完整的配置详情,请参阅 Booster 手册页

快速入门

创建主机特定的镜像:

booster build booster.img

为特定内核创建镜像:

booster build --kernel-version 6.8.9-arch1-1 /boot/booster-linux.img

检查生成的图像:

booster ls /boot/booster-linux.img

更改 /etc/booster.yaml 后重新生成打包镜像:

/usr/lib/booster/regenerate_images

当您的发行版提供 systemd-ukify 时,生成统一内核镜像:

/usr/lib/booster/regenerate_uki build /boot/EFI/Linux

示例配置

Booster 的配置被刻意设计得十分精简。 一台简单的加密笔记本电脑通常完全不需要大型配置文件。 仅添加你的启动路径所需的功能:

compression: zstd
vconsole: true
enable_fido2: true
enable_lvm: true
enable_mdraid: true

对于通过 SSH 进行远程解锁:

network:
  dhcp: on
  ssh_host_key: /etc/booster/ssh_host_ed25519_key
  ssh_authorized_keys: /etc/booster/authorized_keys
  ssh_listen: :22

当注册了多种硬件解锁方式时,为使令牌排序更加平滑:

serialize_tokens:
  enabled: true
  clevis_timeout: 45s
  tpm2_timeout: 15s
  fido2_timeout: 30s

用于 Plymouth 启动画面支持:

enable_plymouth: true
modules_force_load: amdgpu

在您的内核命令行中使用 quiet splash,并在需要图形化启动画面时避免使用 booster.log=console

文档

完整的用户文档位于 Booster 手册页。 它涵盖:

  • /etc/booster.yaml 选项。
  • 内核命令行参数。
  • LUKS、FIDO2、TPM2、Clevis、密钥文件以及分离头部的设置。
  • /etc/crypttab 集成。
  • 通过 SSH 进行远程解锁。
  • GPT 根分区自动发现。
  • 统一内核镜像生成。
  • 调试与恢复。

类似项目

Booster 与 mkinitcpiodracut 处于同一问题领域。 其重点是一个快速、紧凑、基于 Go 的 initramfs 生成器,具有强大的加密启动易用性和自动主机发现功能。

从源码构建

该项目有三个主要部分:

  • init - 在启动期间运行的早期用户空间程序。
  • generator - 构建 initramfs 镜像的工具。
  • tests - 针对生成镜像的基于 QEMU 的集成测试。

使用标准 Go 工具链进行构建:

go build ./...

运行单元测试:

go test ./generator ./init

运行完整的测试套件:

go test ./...

./tests 软件包包含 QEMU 集成测试,并要求主机已安装所需的启动和虚拟化工具。

致谢

本项目的开发始于 Twitter 的黑客周。 非常感谢 Twitter 对开源开发的支持,特别感谢 Ian Brown

Booster 的架构受到 Michael Stapelberg 的 distri 的启发,初始版本借鉴了 distri 的 initramfs 生成器的许多想法。

许可证

参见 LICENSE