zbm-openwrt-clevis
Загрузочная среда на основе OpenWrt, собранная в один UKI: разблокирует корень ZFS с нативным шифрованием с помощью clevis и TPM, а затем загружает целевую систему Linux через донорскую среду ZFSBootMenu.
- OpenWrt
- ZFS
- TPM 2.0
- Clevis
- Статус
- Релизы с тегами 0.90–0.95. Цепочка загрузки проверена в лаборатории на QEMU с OVMF и swtpm: загружается Ubuntu с зашифрованного ZFS.
- Лицензия
- Не указана: в репозитории нет файла лицензии.
- Платформы
- Машины x86-64 с UEFI, TPM 2.0 и rEFInd; внутри UKI — OpenWrt 25.12.
Какую задачу решает
ZFSBootMenu хорошо загружает зашифрованный ZFS, но ожидает, что ключ введёт человек. Для удалённого сервера или машины без присмотра этого мало: оператор не может знать, принадлежит ли запрос ключа той загрузочной среде, которой он доверял раньше. Здесь ключ выдаётся автоматически, только пока измерения TPM совпадают с состоянием, которое оператор одобрил при последнем перезапечатывании. Иначе автоматическая загрузка останавливается, оператор получает уведомление, а защищённая паролем система OpenWrt ждёт ручного решения.
Основные возможности
- Автоматическая разблокировка, привязанная к PCR TPM через
clevis; проверенная политикаclevis.pcr_ids=1,4,5,7,9покрывает и командную строку ядра, которую передаёт rEFInd. - Запасной путь — полноценная система OpenWrt со входом по паролю или SSH-ключу, а не оболочка без пароля; в базовом образе
rootзаблокирован. - Ручная разблокировка и перезапечатывание под новое измеренное состояние через консоль или SSH, в том числе по Wi-Fi или с двумя WAN-каналами.
- Три хранилища для запечатанного JWE: свойства ZFS, переменные EFI или файл на разделе VFAT.
- Обновление ядра и initramfs целевой системы не требует новой ручной разблокировки: они лежат внутри зашифрованного пула, вне измеряемой среды.
- Необязательное сообщение в Telegram при сбое автоматической разблокировки; инструменты для ремонта дисков и сети в образе.
Как это работает
rEFInd загружает один UKI с OpenWrt и передаёт ему политику в командной строке ядра. При загрузке 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; политика задаётся в строке options rEFInd.
- Сборочный хост: сборка через OpenWrt ImageBuilder из репозитория,
ukify,refindи обычные инструменты сборки. - Лаборатория:
qemu-system-x86_64, OVMF иswtpm; проверенная целевая система — Ubuntu на зашифрованном ZFS.
Эта страница кратко пересказывает README и документацию репозитория по состоянию на октябрь 2026 года. Первоисточник — сам репозиторий.