查看设备 TPM 硬件
方法一:
$ [[ -d $(ls -d /sys/kernel/security/tpm* 2>/dev/null | head -1) ]] && echo "TPM available" || echo "TPM missing"
方法二:
所有 TPM 设备都必须有 /dev/tpm0,因此另一种方法是检查 /dev/tpm0 或 /dev/tpmrm0。
/dev/tpmrm0 仅适用于 TPM 2.0,但它是在 v4.12-rc1 中添加的。如果有第二个版本,则以下命令将显示相应的消息:
$ [ -c /dev/tpmrm0 ] && echo "TPM 2.0"
如果版本是 1.2 或 2.0,此命令将打印一条消息:
$ [ -c /dev/tpm0 ] && echo "TPM 1.2 or 2.0"
如果前面的命令显示缺少 TPM,并不一定意味着 TPM 根本就没有——它可能只是被禁用了。转到 BIOS 并查找名称中带有 TPM 的设置。如果找到它们,请打开它们。
如果有 TPM,需要安装适用于 Linux 的 TPM 软件。在 Linux 上,安装 TrouSerS 软件包以使用 TPM。它带有 tcsd 实用程序。
验证是否已加载 TPM 模块:
$ lsmod | grep tpm
安装 TPM 套件
本实验使用TPM模拟器搭建的实验环境进行实验,模拟器为IBM推出的TPM2.0模拟器。软件栈采用Intel推出的TSS相关组件。安装顺序如下:
- IBM TPM Emulator 2.0(视情况选择)
- Intel tpm2-tss 4.1.3
- Intel tpm2-abrmd 3.0.0
- Intel tpm2-tools 3.X
TPM Emulator 2.0
如果没有 TPM 硬件芯片,需要先安装 TPM 模拟器;如果有硬件的话则可以跳过这步,直接安装 TPM2-TSS。
$ sudo apt install -y lcov pandoc autoconf-archive liburiparser-dev libdbus-1-dev libglib2.0-dev dbus-x11 libssl-dev autoconf automake libtool pkg-config gcc libcurl4-gnutls-dev libgcrypt20-dev libcmocka-dev uthash-dev
# 或
$ yum install -y lcov pandoc autoconf-archive liburiparser-devel libdbus-1-devel libglib2.0-devel dbus-x11 libssl-devel autoconf automake libtool pkg-config gcc libcurl4-gnutls-devel libgcrypt20-devel libcmocka-devel uthash-devel
$ mkdir ibmtpm && cd ibmtpm
$ wget https://jaist.dl.sourceforge.net/project/ibmswtpm2/ibmtpm1332.tar.gz && tar xzf ibmtpm1332.tar.gz && cd src/ && make
$ sudo cp tpm_server /usr/local/bin
# 增加tpm-server.service文件
$ sudo vim /lib/systemd/system/tpm-server.service
# 写入如下内容:
[Unit]
Description=TPM2.0 Simulator Server Daemon
Before=tpm2-abrmd.service
[Service]
ExecStart=/usr/local/bin/tpm_server
Restart=always
[Install]
WantedBy=multi-user.target
# 重新加载服务的配置文件
$ systemctl daemon-reload
# 启动tpm服务
$ systemctl start tpm-server.service
# 测试TPM配置情况
$ systemctl status tpm-server.service
Tpm2-tss
TSS(TCG Software Stack,TCG软件栈)又称为可信软件栈,他是可信计算平台上TPM的支撑软件。TSS的主要作用是为操作系统和应用软件提供使用TPM的接口。TSS的结构可分为内核层、系统服务层和用户程序层。
# 需要安装 cmocka
$ yum install -y libcmocka-devel uthash-devel json-c-devel libcurl-devel
# 或
$ apt-get install -y libcmocka-dev uthash-dev libjson-c-dev texinfo fig2dev gettext
# 安装 libgpg-error
$ git clone https://github.com/gpg/libgpg-error.git
$ cd libgpg-error/ && ./autogen.sh && ./configure --enable-maintainer-mode && make && make install
# 安装 libgcrypto
$ git clone https://github.com/gpg/libgcrypt.git && cd libgcrypt
$ ./autogen.sh && ./configure --enable-maintainer-mode && make -j8
# centos的上一步可能在编译生成doc时出错,显示:/bin/sh: fig2dev:未找到命令。但此时动态库和二进制程序已经编译完成了,可以不管这个doc,直接安装
$ make install
# 安装 tss
$ sudo useradd --system --user-group tss
$ git clone https://github.com/tpm2-software/tpm2-tss.git && cd tpm2-tss/ && git checkout 4.1.3
$ ./bootstrap && ./configure --enable-unit # 如果是模拟器,带上这个选项 --enable-integration
$ make check -j8
$ sudo make install
$ sudo ldconfig
tpm2_abrmd
tpm2_abrmd是实现 TPM2 权限和资源管理的系统后台进程。客户端和该进程的通信是通过 DBus 和 Unix 的管道实现的。DBus用于发现、会话管理等API调用;管道则用来发送和接收客户端与TPM的命令和响应。
$ git clone https://github.com/tpm2-software/tpm2-abrmd.git
$ export GDBUS_CODEGEN=/usr/bin/gdbus-codegen
$ ./configure --with-dbuspolicydir=/etc/dbus-1/system.d --with-systemdsystemunitdir=/lib/systemd/system
$ sudo make install -j8
$ sudo cp /usr/local/share/dbus-1/system-services/com.intel.tss2.Tabrmd.service /usr/share/dbus-1/system-services/
$ sudo pkill -HUP dbus-daemon
# 修改tpm2-abrmd.service服务配置。在启动服务时加载tss动态库并将服务启动到本地2321端口。如果是使用模拟器,则将“ExecStart=/usr/local/sbin/tpm2-abrmd”修改为“ExecStart=/usr/local/sbin/tpm2-abrmd --tcti=“libtss2-tcti-mssim.so.0:host=127.0.0.1,port=2321””;如果使用的是硬件TPM,则不用加这个配置。
$ vim /lib/systemd/system/tpm2-abrmd.service
# 添加如下内容
[Unit]
Description=TPM2 Access Broker and Resource Management Daemon
# These settings are needed when using the device TCTI. If the
# TCP mssim is used then the settings should be commented out.
# After=dev-tpm0.device
# Requires=dev-tpm0.device
[Service]
Type=dbus
BusName=com.intel.tss2.Tabrmd
StandardOutput=syslog
ExecStart=/usr/local/sbin/tpm2-abrmd (根据是否使用模拟器来选择添加:--tcti="libtss2-tcti-mssim.so.0:host=127.0.0.1,port=2321")
User=tss
[Install]
WantedBy=multi-user.target
$ systemctl daemon-reload
$ systemctl start tpm2-abrmd.service
$ systemctl status tpm2-abrmd.service
tpm2_tools
Tpm2-tools为tpm调用其进行可信计算的命令行工具。
$ git clone -b 5.7-rc1 https://github.com/tpm2-software/tpm2-tools.git && cd tpm2-tools
$ ./bootstrap && ./configure --prefix=/usr && make -j8 && sudo make install
测试 tpm2-tools
$ tpm2_getrandom 4
参考资料
- TPM 软件栈版本选择, https://github.com/tpm2-software/tpm2-software.github.io/blob/master/versions.md
- https://github.com/tpm2-software/tpm2-abrmd.git
- https://github.com/tpm2-software/tpm2-tss.git
- https://github.com/tpm2-software/tpm2-tools.git
- tpm2-tools, https://tpm2-tools.readthedocs.io/en/latest/
- TPM模拟器和TPM2-TSS安装,https://blog.csdn.net/jianming21/article/details/107942585
- TrouSerS FAQ, https://trousers.sourceforge.net/faq.html
- https://forums.gentoo.org/viewtopic-t-1145466-view-next.html
浙公网安备 33010602011771号