1.了解vTPM原理和相关知识;
2.创建具备vTPM的虚拟机;
3.加深对可信计算技术的理解。
系统 |
---|
ubuntu20.04 |
包括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, libseccomp-dev, libseccomp-dev等
sudo apt-get upgrade
sudo apt-get install -y build-essential libtool automake libgmp-dev libnspr4-dev libnss3-dev openssl libssl-dev git acpica-tools libglib2.0-0 libglib2.0-dev libtasn1-6-dev tpm-tools libfuse-dev libsdl1.2-dev expect gawk socat libfdt-dev libseccomp-dev libgnutls28-dev expect flex bison ninja-build libjson-glib-dev libpixman-1-dev libsdl2-dev
wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz
tar zxf Python-3.10.0.tgz
./configure --enable-optimizations --with-ssl --prefix=/usr/local/python-3.10.0
make
make install
ln -s /usr/local/python-3.10.0/bin/python3.10 /usr/bin/python3
ln -s /usr/local/python-3.10.0/bin/pip3.10 /usr/bin/pip3
git clone https://git.seabios.org/seabios.git
#如果git不下来可以在前面加代理网址http://gh.301.ee/https://git.seabios.org/seabios.git
#编译
make
cd /root
git clone http://gh.301.ee/https://github.com/stefanberger/libtpms
cd libtpms
./bootstrap.sh
./configure --prefix=/usr --with-openssl
make
make install
cd /root
git clone http://gh.301.ee/https://github.com/stefanberger/swtpm
cd swtpm
./autogen.sh
./configure --prefix=/usr --with-openssl
make -j4
sudo make install
cd /root
wget https://download.qemu.org/qemu-8.0.4.tar.xz
tar xf qemu-8.0.4.tar.xz
cd qemu-8.0.4
./configure --enable-kvm --enable-tpm --enable-sdl
make
make install
sudo modprobe cuse
mkdir /tmp/myvtpm0
chown -R tss:root /tmp/myvtpm0
swtpm_setup --tpm-state /tmp/myvtpm0 --createek
export TPM_PATH=/tmp/myvtpm0
swtpm_cuse -n vtpm0
执行成功后可以看到有/dev/vtpm0 文件
ls /dev/vtpm0
首先安装如下软件
apt-get install bridge-utils
apt-get install uml-utilities
添加网桥,大部分操作都需要 root 权限:
ens33 是你可以上网的网卡的名称
ifconfig ens33 down # 首先关闭宿主机网卡接口
brctl addbr br0 # 添加名为 br0 的网桥
brctl addif br0 ens33 # 在 br0 中添加一个接口
brctl stp br0 off # 如果只有一个网桥,则关闭生成树协议
brctl setfd br0 1 # 设置 br0 的转发延迟
brctl sethello br0 1 # 设置 br0 的 hello 时间
ifconfig br0 0.0.0.0 promisc up # 启用 br0 接口
ifconfig ens33 0.0.0.0 promisc up # 启用网卡接口
dhclient br0 # 从 dhcp 服务器获得 br0 的 IP 地址
brctl show br0 # 查看虚拟网桥列表
brctl showstp br0 # 查看 br0 的各接口信息
当配置完成之后执行 ifconfig 结果应该如下:
创建一个 TAP 设备,作为 QEMU 一端的接口:
tunctl -t tap0 -u root # 创建一个 tap0 接口,只允许 root 用户访问
brctl addif br0 tap0 # 在虚拟网桥中增加一个 tap0 接口
ifconfig tap0 0.0.0.0 promisc up # 启用 tap0 接口
brctl showstp br0 # 显示 br0 的各个接口
此时网桥的信息应该是:
这样就相当于把两张网卡通过网桥连起来了:
现在只需要启动镜像,指定网络连接模式是 TAP 即可。
在使用命令安装虚拟机之前需要先使用这个命令运行swtpm socket 运行命令如下所示。建议这个命令采用单独的终端运行,后续看到的通信也会更加的明显
mkdir /tmp/mytpm1
swtpm socket --tpm2 --tpmstate dir=/tmp/mytpm1 --ctrl type=unixio,path=/tmp/mytpm1/swtpm-sock --log level=5 &
qemu-img create -f qcow2 ubuntu.qcow2 30G 注意这个路径是你想要把你的虚拟机放在哪个位置
#光盘模式启动镜像安装
qemu-system-x86_64 -display sdl -accel kvm -cdrom ubuntu-20.04.6-live-server-amd64.iso -m 2048 -boot d -bios bios-256k.bin -boot menu=on -chardev socket,id=chrtpm,path=/tmp/mytpm1/swtpm-sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 -hda ubuntu.qcow2
swtpm socket --tpm2 --tpmstate dir=/tmp/mytpm1 --ctrl type=unixio,path=/tmp/mytpm1/swtpm-sock --log level=5 &
qemu-system-x86_64 -display sdl -accel kvm -m 2048 -boot c -bios bios-256k.bin -boot menu=on -chardev socket,id=chrtpm,path=/tmp/mytpm1/swtpm-sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0 -hda ubuntu.qcow2 -net nic -net tap,ifname=tap0,script=no,downscript=no
可以在 qemu 虚拟机中看到有tpm0,并且安装tpm2-tools之后运行
#在qemu的虚拟机中执行命令
sudo apt-get update
sudo apt-get tpm2-tools
#如果命令成功执行并输出了4位随机字节,说明tpm功能正常
tpm2_getrandom 24