kvm 虚拟机开启安全引导

 一、核心条件准备

  1. 安装 OVMF 固件
    • 使用支持安全引导的 UEFI 固件(如 edk2-ovmf)。
    • 获取路径(以 Arch Linux 为例):bashpacman -Ql edk2-ovmf | grep OVMF_CODE.secboot.fd
    • # 安全引导固件 pacman -Ql edk2-ovmf | grep OVMF_VARS.fd
    • # 变量存储文件其他系统路径类似(如 Ubuntu:/usr/share/OVMF/OVMF_CODE.secboot.fd)。
  2. 生成 UEFI 密钥
    • 创建平台密钥(PK):bashopenssl req -newkey rsa:2048 -nodes -keyout PKpriv.key -x509 -days 365 -out PK.crt openssl x509 -in PK.crt -outform der -out PK.der
    • 下载微软密钥
  3. 创建密钥镜像文件bashdd if=/dev/zero of=keys.img bs=1M count=10
  4. # 创建 10MB 镜像 mkfs.vfat keys.img
  5. # 格式化为 FAT32 sudo mount -o loop keys.img /mnt
  6. # 挂载镜像 cp PK.der /mnt/PK.der
  7. # 复制 PK cp MicCorKEKCA2011_2011-06-24.crt /mnt/KEK.crt
  8. # 复制 KEK cp MicWinProPCA2011_2011-10-19.crt /mnt/DB.crt
  9. # 复制 DB sudo umount /mnt

⚙️ 二、配置 QEMU 虚拟机

  1. 启动参数示例
    在 QEMU 命令中添加以下参数:bashqemu-system-x86_64 \ -enable-kvm \ -cpu host \ -m 4G \ -drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.secboot.fd \ -drive if=pflash,format=raw,file=/path/to/OVMF_VARS.fd \
  2. # 变量文件副本 -drive file=/path/to/keys.img,format=raw \
  3. # 密钥镜像 -drive file=/path/to/disk.qcow2,format=qcow2 \
  4. # 系统磁盘 -drive file=/path/to/windows.iso,media=cdrom \
  5. # 安装镜像 -boot order=dc
    • 关键项
      • OVMF_CODE.secboot.fd:启用安全引导的固件。
      • OVMF_VARS.fd:需为副本(否则原始文件会被覆盖)。
  6. 在 UEFI 界面注册密钥
    • 启动虚拟机,进入 UEFI 设置(按 Esc 或 F2)。
    • 导航至:textDevice Manager → Secure Boot Configuration → Secure Boot Mode → Custom Mode
    • 依次注册密钥:
      • PK:选择 PK.der
      • KEK:选择 KEK.crt
      • DB:选择 DB.crt
    • 保存后退出,安全引导状态将变为 Enabled

⚠️ 三、启用 TPM 2.0(可选,Windows 11 必需)

使用 swtpm 模拟 TPM 芯片:

bash

swtpm socket --tpm2 --tpmstate dir=/path/to/tpm --ctrl type=unixio,path=/path/to/swtpm-sock &

在 QEMU 命令中添加:

bash

-chardev socket,id=chrtpm,path=/path/to/swtpm-sock \
-tpmdev emulator,id=tpm0,chardev=chrtpm \
-device tpm-tis,tpmdev=tpm0

🔍 四、验证与故障处理

  1. 确认安全引导状态
    • Windows:msinfo32 → 查看 “安全引导状态” 是否为 “开启”
    • Linux:dmesg | grep -i secureboot 或 mokutil --sb-state
  2. 常见问题
    • 启动失败:检查密钥是否完整注册,或尝试重置为 Setup Mode 后重新注册。
    • 驱动未签名:Linux 需移除不兼容模块(如 VMware 的 hgfs)37。
    • OVMF 路径错误:确保固件文件路径正确,且变量文件可写。

💎 总结

  • 核心步骤:OVMF 固件 + 密钥注册 + QEMU 参数配置。
  • 兼容性:Windows 支持良好;Linux 需确保内核/驱动已签名(如 shim + grub)6。
  • 安全风险:启用后仅加载可信软件,但可能导致未签名驱动失效,需提前测试47。

参考:QEMU ArchWiki 2,OVMF 文档。若需脚本自动化,可基于2中的示例修改。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注