vTPM环境部署(ubuntu)

时间:2023-03-09 04:27:20
vTPM环境部署(ubuntu)

注:1.系统:ubuntu16.04LTS
2.ISO镜像:/home/huanghaoxiang/ubuntu-server.iso
3.IMG路径:/home/TPM-Machine
4.Login: huanghaoxiang1
5.password: huanghaoxiang1
安装之前:
一:安装依赖包:
apt-get install build-essential libtool automake \
libgmp-dev libnspr4-dev libnss3-dev openssl \
libssl-dev git iasl glib-2.0 libglib2.0-0 \
libglib2.0-dev libtasn1-6-dev tpm-tools \
libfuse-dev libgnutls-dev libsdl1.2-dev \
expect gawk socat libfdt-dev
软件包地址:
libtpms: https://github.com/stefanberger/libtpms
swtpm: https://github.com/stefanberger/swtpm
seabios-tpm: https://github.com/stefanberger/seabios-tpm
qemu-tpm: https://github.com/stefanberger/qemu-tpm
第一步:安装seabios-tpm与libtpms
seabios:直接make即可,记住out/bios.bin路径,最好写入环境变量。
git clone https://github.com/stefanberger/seabios-tpm(把文件源码下载并复制到Ubuntu系统中);
cd seabios-tpm(进入seabios-tpm文件夹中;/home/huanghaoxiang/libtpms/ seabios-tpm/out/bios.bin);
make(把文件源码编译成二进制文件);
libtpms:
git clone https://github.com/stefanberger/libtpms
cd libtpms
./bootstrap.sh
./configure --prefix=/usr --with-openssl
make
make install
swtpm安装:(原因:我的计算机没有安装TPM物理芯片,因此安装tpm的软件实现swtpm)
git clone https://github.com/stefanberger/swtpm
cd swtpm
./bootstrap.sh
./configure --prefix=/usr --with-openssl
Make(把源码文件编译成二进制文件)
make check
sudo make install(把二进制文件拷贝进入系统中)
cp /usr/etc/swtpm_setup.conf /etc/swtpm_setup.conf

安装qemu-tpm:
git clone https://github.com/stefanberger/qemu-tpm
cd qemu-tpm
./configure --enable-kvm --enable-tpm --enable-sdl(configure脚本用于生成Makefile,vTPM环境部署(ubuntu)


make
make install
启动vTPM:
创建/dev/vtpm*:
sudo modprobe cuse
mkdir /tmp/myvtpm0
chown -R tss:root /tmp/myvtpm0
swtpm_setup --tpm-state /tmp/myvtpm0 --createek
执行完这一步之后会看到成功界面!

vTPM环境部署(ubuntu)

再执行下述命令,能够看到文件/dev/vtpm0;
export TPM_PATH=/tmp/myvtpm0;
swtpm_cuse -n vtpm0;
其实这一步在实际安装中总是出现问题:
vTPM环境部署(ubuntu)

之后输入命令行:find / -name vtpm0 来查询文件vtpm0是否创建,发现该文件在系统中并不存在;
然后进入root权限再执行:
export TPM_PATH=/tmp/myvtpm0;
swtpm_cuse -n vtpm0;
然后执行find / -name vtpm0 来查询文件vtpm0是否创建,发现文件/dev/vtpm0成功存在:
vTPM环境部署(ubuntu)

创建虚拟机:
qemu-img create -f qcow2 /home/TPM-Machine 30G
sudo qemu-system-x86_64 -display sdl -enable-kvm -cdrom /home/huanghaoxiang/ubuntu-server.iso \
-m 1024 -boot d -bios $SEABIOS/bios.bin -boot menu=on -tpmdev \
cuse-tpm,id=tpm0,path=/dev/vtpm0 \
-device tpm-tis,tpmdev=tpm0 /home/TPM-Machine
在创建过程中出现了两个问题:
问题1:加载kvm-intel.ko失败;
Error inserting kvm_intel (/lib/modules/2.6.20/extra/kvm-intel.ko): Operation not supported
解决:重启,F2计入BIOS设置,一项一项的排查,最后发现一项是intel被Disable了。Enable之后,保存重启,然后重启进入ubuntu。
问题2:SEABIOS的路径没有设置:
解决:鉴于/home/huanghaoxiang/libtpms/ seabios-tpm路径太长,干脆把他复制到/opt/seabios-tpm下,然后root权限下执行 export SEABIOS=/opt/seabios-tpm;
安装成功后执行(若出现错误,重新执行生成/dev/vtpm0的命令):
qemu-system-x86_64 -display sdl -enable-kvm \
-m 1024 -boot c -bios $SEABIOS/bios.bin -boot menu=on -tpmdev \
cuse-tpm,id=tpm0,path=/dev/vtpm0 \
-device tpm-tis,tpmdev=tpm0 /home/TPM-Machine;

由于每次重启都要先执行:
export TPM_PATH=/tmp/myvtpm0;
export SEABIOS=/opt/seabios-tpm;
swtpm_cuse -n vtpm0;
因此干脆把他们写入到桌面一个叫qemu.sh的文件中,每次在terminal中cd桌面 ,然后root权限下 ./qemu.sh;至此便能进入QEMU;
背景知识:
1. KVM (全称是 Kernel-based Virtual Machine) 是 Linux 下 x86 硬件平台上的全功能虚拟化解决方案,包含一个可加载的内核模块 kvm.ko 提供和虚拟化核心架构和处理器规范模块。
2. QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户动态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。
3. Qemu-kvm 和VTPM

vTPM环境部署(ubuntu)

其中:
kernel-IMA是在平台加载应用程序的时候,将应用程序的二进制值、加载的动态链接库与模块进行度量,度量值扩展写入PCR10,度量记录写入度量日志中;[完整性度量架构(Integrity Measurement Architecture,IMA)]
TCSD为TPM的软件栈;
openPTS(Open Platform Trust Service)是远程证实的软件实现;
libtpms(https://github.com/stefanberger/libtpms)为每个虚拟机提供了基于软件的TPM实现。
qemu-tpm(https://github.com/stefanberger/qemu-tpm)从qemu中fork出来,以支持可信计算,其中包含一个后端驱动用来调用每个虚拟机的libtpms,以及将前端驱动暴露给每个虚拟机。
5. 可信平台模块(Trusted Platform Module,TPM)是可信计算的基石。可信计算是一种基于硬件的平台保护方案,能够记录平台(PC)从上电开始到bios、到grub、到操作系统及至应用程序的整个链式过程,并且通过密码学的机制使得这些记录能够完整地发送给远程端,由远程端来与预期值对比判断平台是否可信,这个过程称为远程证实(Remote Attestation)。