Proxmox VE 添加 TPM 2.0 支持

Proxmox VE 添加 TPM 2.0 支持

Windows 11 硬性要求 TPM 2.0,虽然现在看来可以通过各种手段绕过这个限制,但真正开启 TPM 2.0 才是最保险的方式

我的 Proxmox VE(PVE) 运行在 X99 主板上,CPU 为 5820k,主板上没有插 TPM 模块,需要软件模拟 TPM,下文使用 swtpm (libtpms 的一种实现) 来模拟 TPM

PVE 底层是 QEMU KVM,所以 QEMU 同理可用

另:PVE 官方已经计划在 PVE 中添加 vTPM(详见 vTPM support – do we have guide to add the vTPM support?),但是官方回应尚停留在今年 1 月

下文将展示如何在 Proxmox VE(PVE) 下为虚拟机开启 TPM 2.0

环境

  • Proxmox VE 5.4.114-1
    • 基于 Debian 10、QEMU KVM

参考

步骤

以下指令均在 root 用户下执行,其他用户请酌情添加 sudo

编译环境为 Debian,以下指令也适用于 Ubuntu,其他操作系统可以查看前两个参考链接

编译安装 libtpms

因为 swtpm 是 libtpms 的实现(依赖于 libtpms),所以需要先安装 libtpms

获取源码

执行

git clone https://github.com/stefanberger/libtpms.git

安装依赖环境

执行

apt -y install automake autoconf libtool gcc build-essential libssl-dev dh-exec pkg-config dh-autoreconf gawk

编译 libtpms

执行

cd libtpms
./autogen.sh --with-openssl
make dist
dpkg-buildpackage -us -uc -j4

安装

执行

cd ..
dpkg -i libtpms0_*_amd64.deb libtpms-dev_*_amd64.deb

Proxmox VE 添加 TPM 2.0 支持

编译安装 swtpm

获取源码

执行

git clone https://github.com/stefanberger/swtpm.git

安装依赖环境

执行

apt -y install  libfuse-dev libglib2.0-dev libgmp-dev expect libtasn1-dev socat tpm-tools python3-twisted gnutls-dev gnutls-bin  libjson-glib-dev python3-setuptools softhsm2 libseccomp-dev

编译

执行

cd swtpm
dpkg-buildpackage -us -uc -j$(nproc)

安装

执行

cd ..
dpkg -i ./swtpm*.deb

配置 swtpm 服务

/etc/systemd/system 下新建服务文件 swtpm.service,写入以下内容

[Unit]
Description=swtpm server

[Service]
Type=simple
ExecStartPre=mkdir -p /var/lib/qemu-swtpm/swtpm
ExecStart=swtpm socket --tpm2 --tpmstate dir=/var/lib/qemu-swtpm/swtpm --ctrl type=unixio,path=/var/run/qemu-server/swtpm.sock --log level=20
Restart=always

[Install]
WantedBy=multi-user.target

以上服务配置用来开启 TPM 2.0,开启其他版本需要更改 –tpm2 参数为对应版本参数

注意:此服务模拟了单个 TPM 设备,只能供一个虚拟机使用,多个虚拟机无法使用同一个模拟 TPM。如有多个虚拟机 TPM 需求,则按以上配置新建多个 swtpm 服务即可(将 swtpm 改为其他名称,例如:/var/lib/qemu-swtpm/swtpm2,/var/run/qemu-server/swtpm2.sock )

开启服务

systemctl start swtpm.service
systemctl status swtpm.service
# 开机启动
systemctl enable swtpm.service

客户机开启 TPM 2.0

进入 /etc/pve/qemu-server 目录,编辑待开启的虚拟机配置文件

#备份配置文件
cp [虚拟机编号].conf [虚拟机编号].conf.bak
vim ./[虚拟机编号].conf

将以下内容添加到文件首行

args: -global driver=cfi.pflash01,property=secure,value=on -chardev socket,id=chrtpm,path=/var/run/qemu-server/swtpm.sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0

重启虚拟机

qm reboot [虚拟机编号]

重启后虚拟机会自动开启 TPM 2.0

效果

Proxmox VE 添加 TPM 2.0 支持

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据