实验3 vTPM相关

可以代做实验手册等私聊

一、实验目的

1.了解vTPM原理和相关知识;
2.创建具备vTPM的虚拟机;
3.加深对可信计算技术的理解。

二、实验内容

  1. 安装seabios,libtpms,swtpm,qemu‐tpm;
  2. 启动vTPM;
  3. 安装虚拟机。

三、实验环境

系统
ubuntu20.04

硬盘要至少40
image.png

四、实验步骤

1.安装相关依赖包;

包括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

2.安装seabios

1.安装python

 wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgztar zxf Python-3.10.0.tgz./configure --enable-optimizations --with-ssl --prefix=/usr/local/python-3.10.0makemake installln -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

2.编译

git clone https://git.seabios.org/seabios.git
#如果git不下来可以在前面加代理网址http://gh.301.ee/https://git.seabios.org/seabios.git

修改Makefile文件将python改成python3
image.png

#编译
make

image.png

3.安装libtpms

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

4.安装swtpm

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

5.安装qemu

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

6.启动vTPM

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 

image.png

7.安装虚拟机

(1).网络配置

首先安装如下软件

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 结果应该如下:
image.png
创建一个 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 的各个接口

此时网桥的信息应该是:
image.png
这样就相当于把两张网卡通过网桥连起来了:
现在只需要启动镜像,指定网络连接模式是 TAP 即可。
在使用命令安装虚拟机之前需要先使用这个命令运行swtpm socket 运行命令如下所示。建议这个命令采用单独的终端运行,后续看到的通信也会更加的明显

mkdir /tmp/mytpm1
swtpm socket --tpm2 --tpmstate dir=/tmp/mytpm1   --ctrl type=unixio,path=/tmp/mytpm1/swtpm-sock   --log level=5 &

(2).安装虚拟机

上传镜像
image.png

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

image.png
安装成功后关闭虚拟机:
启动虚拟机

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之后运行
image.png

#在qemu的虚拟机中执行命令
sudo apt-get update
sudo apt-get tpm2-tools

image.png

#如果命令成功执行并输出了4位随机字节,说明tpm功能正常
tpm2_getrandom 24 

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

守正出奇,穿越周期 - Bytebase 的 2023

前情提要:Bytebase 的 2022|埋头苦干,孕育希望 产品迭代 2023 年共发布了 25 个版本。这个数字和 2022 年一样,除开春节和一次全员疫情,做到了两周一次的更新。 版本号从 1.11.0 升级到了 2.13.0。其中在 5 月份&…

基于ExoPlayer的缓存方案实现

音视频APP 的一个必备功能就是在播放的时候会持续缓存完整个音频,同时进度条会更新缓存进度。但是目前Google推出的播放器ExoPlayer本身并没有提供什么方便的接口去实现这个功能,因此大多数的开发者可能会使用AndroidVideoCache 开源库来实现缓存。 AndroidVideoCache 的原理…

MySQL常见面试题总结

1.MySQL基础 1.1什么是关系型数据库? 顾名思义,关系型数据库(RDB,Relational Database)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多…

图像分割-漫水填充法 floodFill

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的C#版本请访问:图像分割-漫水填充法 floodFill (C#)-CSDN博客 FloodFill方法是一种图像处理算法&#…

自定义Redis配置以优化你的Spring应用

在开发Spring应用时,Redis作为一个高效且功能丰富的内存数据存储,经常被用作缓存层来加速应用的响应速度。Spring Boot提供了与Redis集成的便捷方式,但有时默认的配置可能不满足我们的特定需求。这时,自定义Redis配置就显得尤为重…

kotlin 中 any, all , none

any 如果至少有一个元素匹配给定谓词,那么 any() 返回 true。 all 如果没有元素与给定谓词匹配,那么 none() 返回 true。 none 如果所有元素都匹配给定谓词,那么 all() 返回 true。 请注意,在一个空集合上使用任何有效的谓词去…

JAVA设计小分队02

import java.util.Objects;/*** description: 学生类* author: sfj* Email&#xff1a;2238414084qq.com* create: 2023-12-18 20:15**/ public class Student implements Comparable<Student> {private int sno;private String name;private int age;private int math;p…

C++上位软件通过Snap7开源库访问西门子S7-200/合信M226ES数据块的方法

前言 上一篇文章中介绍了Snap7访问西门子S7-1200/S7-1500 DB块的方法&#xff0c;对于S7-200PLC是没有数据块访问的。S7-200PLC中Snap7只能通过访问MB块&#xff0c;VB块的方法进行和PLC之间的Snap7通信和数据交换。手头没有S7-200PLC故通过合信CTMC M226ES运动控制器进行测试&…

SSM的校园二手交易平台----计算机毕业设计

项目介绍 本次设计的是一个校园二手交易平台&#xff08;C2C&#xff09;&#xff0c;C2C指个人与个人之间的电子商务&#xff0c;买家可以查看所有卖家发布的商品&#xff0c;并且根据分类进行商品过滤&#xff0c;也可以根据站内搜索引擎进行商品的查询&#xff0c;并且与卖…

如何用js动态修改字体大小

在项目中&#xff0c;我们常常会遇到使用v-html渲染文本的情况。 如果需要点击大中小三个字号按钮&#xff0c;需要修改字体的大小。那我们应该怎么做呢 function fontSize(element, type) {let size {big: 22,middle: 16,small: 12};var result element.innerHTML.replac…

hAdmin漂亮的后台html模板免费下载

hAdmin漂亮的后台html模板免费下载-遇见你与你分享

Linux awk命令教程:如何有效处理文本和数据分析(附案例详解和注意事项)

Linux awk命令介绍 awk是一个强大的文本分析工具&#xff0c;其本质上是一个数据驱动式的脚本语言&#xff0c;用于处理文本&#xff0c;并对文本进行诸如生成报告等各种操作。这是一个强大的Linux命令行程序&#xff0c;用于处理和分析文本文件&#xff0c;特别是那些对文本格…

232.用栈实现队列

我的解法 class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue() {stackIn new Stack<>();// 负责进栈stackOut new Stack<>();// 负责出栈}public void push(int x) {// 把出栈元素全部放到进栈while (!stackOut.empty…

autograd与逻辑回归

一、autograd—自动求导系统 torch.autograd.backward() torch.autograd.backward()是PyTorch中用于计算梯度的函数。以下是对该函数的参数的解释&#xff1a; 功能&#xff1a;自动求取梯度 • tensors: 用于求导的张量&#xff0c;如 loss • retain_graph : 保存计算图 •…

生物生态学领域构建和分析进化树的常用R工具包介绍和使用

构建进化树的需求 在生物生态学领域&#xff0c;构建进化树&#xff08;也称为系统发生树或谱系树&#xff09;具有以下几个重要的目的和需求&#xff1a; 理解物种间的亲缘关系&#xff1a; 进化树揭示了物种之间的演化关系和共同祖先&#xff0c;帮助科学家理解不同物种是如…

【Linux】基本指令了解(一)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. 认识Linux1.1 什么是Linux1.2 Linux特点 2. ls指令3. pwd命令4. cd 指令5. touch命令6. mkdir指令7. …

SSM共享汽车租赁平台----计算机毕业设计

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,修改管理员信息,用户信息管理,管理新闻公告,汽车品牌信息管理,城市信息管理,租赁点信息管理,共享汽车信息管理,汽车订单信…

《微信小程序开发从入门到实战》学习七十

6.6 网络API 6.6.4 上传文件API 用wx.uploadFile接口使小程序发起HTTPS POST请求&#xff0c;上传文件到服务端。该接口接受一个人Object入参。参属性如下&#xff1a; url: &#xff08;必填&#xff09;上传文件到服务器的URL, filePath: &#xff08;必填&#xff09;要…

【Linux Shell】1. Shell 简述

文章目录 【 1. Shell 解释器、Shell语言、Shell脚本 】【 2. Shell 环境 】【 3. 一个简单的 Shell 脚本 】3.1 Shell 脚本的编写3.2 Shell 脚本的运行3.2.1 作为可执行程序运行 Shell 脚本3.2.2 作为解释器参数运行 Shell 脚本 【 1. Shell 解释器、Shell语言、Shell脚本 】 …

单挑力扣(LeetCode)SQL题:1532. 最近的三笔订单(难度:中等)

题目&#xff1a;1532. 最近的三笔订单 &#xff08;通过次数5,860 | 提交次数9,333&#xff0c;通过率62.79%&#xff09; 表&#xff1a;Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name …