zbm-openwrt-clevis
단일 UKI로 빌드되는 OpenWrt 기반 부트 런타임입니다. 네이티브 암호화된 ZFS 루트를 clevis와 TPM으로 잠금 해제한 다음, 차용한 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가 전달하는 커널 명령줄까지 포함합니다.- 비밀번호 없는 셸이 아니라 비밀번호나 SSH 키로 로그인하는 완전한 OpenWrt 시스템으로 폴백합니다. 기본 이미지에서
root는 잠겨 있습니다. - 콘솔이나 SSH로 수동 잠금 해제와 새 측정 상태에 대한 재봉인을 할 수 있으며, Wi-Fi나 두 개의 WAN 업링크를 통해서도 가능합니다.
- 봉인된 JWE의 저장 백엔드 세 가지: ZFS 속성, EFI 변수, VFAT 파티션의 파일.
- 대상 시스템의 커널과 initramfs를 업데이트해도 다시 수동으로 잠금을 해제할 필요가 없습니다. 이들은 측정 대상 런타임 밖, 암호화된 풀 안에 있기 때문입니다.
- 자동 잠금 해제가 실패하면 선택적으로 Telegram 메시지를 보냅니다. 이미지에는 디스크와 네트워크 복구 도구가 들어 있습니다.
작동 방식
rEFInd가 하나의 OpenWrt UKI를 로드하고 커널 명령줄로 정책을 전달합니다. 부팅 시 zbm-auto-boot가 zbm-start를 실행하고, load-key 훅이 clevis에 키 복구를 요청해 차용한 ZFSBootMenu 런타임에 넘깁니다. 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와 문서를 요약한 것입니다. 정확한 정보는 저장소 자체를 기준으로 합니다.