我们刚刚上线。网站和服务仍在完善中,如有不准确或不完善之处,敬请谅解。发现了错误或有功能不正常? 请告诉我们,我们会尽快修复。

← 全部项目
ZH
TAKT 之外

zbm-openwrt-clevis

基于 OpenWrt 的启动运行环境,打包为单个 UKI:用 clevis 和 TPM 解锁采用原生加密的 ZFS 根文件系统,然后通过借用的 ZFSBootMenu 运行环境启动目标 Linux 系统。

  • OpenWrt
  • ZFS
  • TPM 2.0
  • Clevis
状态
已发布标签版本 0.90–0.95。启动链已在使用 OVMF 和 swtpm 的 QEMU 实验环境中验证,可从加密的 ZFS 启动 Ubuntu。
许可证
未声明:仓库中没有许可证文件。
平台
配备 TPM 2.0 和 rEFInd 的 x86-64 UEFI 机器;UKI 内为 OpenWrt 25.12。

解决什么问题

ZFSBootMenu 能很好地启动加密的 ZFS,但它需要有人输入密钥。对于远程服务器或无人值守的机器,这还不够:操作员无法判断这个输入提示是否来自他此前信任的启动环境。在本项目中,只有当 TPM 度量值与操作员在上一次重新封装(reseal)时批准的状态一致时,密钥才会被自动释放。否则自动启动会停止,操作员会收到通知,一个受密码保护的 OpenWrt 系统会等待人工决定。

主要功能

  • 通过 clevis 将自动解锁绑定到 TPM PCR;经过验证的策略 clevis.pcr_ids=1,4,5,7,9 也覆盖 rEFInd 传入的内核命令行。
  • 回退到完整的 OpenWrt 系统,需用密码或 SSH 密钥登录,而不是无密码的 shell;基础镜像中的 root 账户处于锁定状态。
  • 可通过控制台或 SSH 手动解锁,并为新的度量状态重新封装;也支持经 Wi-Fi 或双 WAN 上行链路进行。
  • 已封装的 JWE 有三种存储后端:ZFS 属性、EFI 变量,或 VFAT 分区上的文件。
  • 更新目标系统的内核和 initramfs 无需再次手动解锁:它们位于加密池内部,不属于被度量的运行环境。
  • 自动解锁失败时可选发送 Telegram 消息;镜像中带有磁盘和网络修复工具。

工作原理

rEFInd 加载一个 OpenWrt UKI,并通过内核命令行向其传递策略。启动时 zbm-auto-boot 运行 zbm-start;load-key 钩子请求 clevis 恢复密钥,并将其交给借用的 ZFSBootMenu 运行环境,后者从加密的根文件系统读取目标内核和 initramfs,并用 kexec 启动它们。自动和手动入口走同一条路径,并共用一把锁。存储池以只读方式导入,只有在重新封装将结果写入 ZFS 属性时才会短暂写入。

UEFI → rEFInd → OpenWrt UKI → zbm-auto-boot → zbm-start
     → load-key hook / clevis → ZFSBootMenu → kexec → Ubuntu (ZFS)

要求

  • 目标系统的根文件系统为采用原生加密的 ZFS,密钥位置为文件(keylocation=file://…)。
  • UEFI、作为启动管理器的 rEFInd,以及 TPM 2.0;策略写在 rEFInd 的 options 行中。
  • 构建主机:仓库中的 OpenWrt ImageBuilder 构建流程、ukify、refind 以及常用构建工具。
  • 实验环境:qemu-system-x86_64、OVMF 和 swtpm;经过验证的目标系统是加密 ZFS 上的 Ubuntu。

本页概述了截至 2026 年 10 月该仓库的 README 和文档内容。以仓库本身为准。