查找有关 TPM2 的信息,甚至更糟的是查找有关 Ubuntu 18.04 服务器的信息,这可不是件容易的事。我有一台装有英特尔 TPM V2 模块的机器,基本上是想让它在启动时解锁 LUKS。到目前为止,我有以下信息
- 已安装 Ubuntu 18.04 服务器(带有 LVM 和加密的 rootfs)
- 安装了 tpm2-tools
- 启用并启动资源管理器服务(状态检查运行一切正常)
- 将 TPM2TOOLS_TCTI 设置为
/dev/tpmrm0
- 尝试获取所有权(并且大多数其他 tpm2_ 命令失败,
Failed to initialize tcti context: 0x1
这就是我陷入困境的地方。
# apt install tmp2-tools
# systemctl enable tpm2-resourcemgr
# systemctl start tpm2-resourcemgr
# export TPM2TOOLS_TCTI=device:/dev/tpmrm0
# tpm2_takeownership -e 123 -o 123 -l 123
Failed to initialize tcti context: 0x1
答案1
首先,组合的 TPM2TOOLS_TCTI 环境变量是 tpm2-tools v3.0 中的新变量。旧版本过去使用单独的设置TPM2TOOLS_TCTI_NAME=device
和TPM2TOOLS_DEVICE_FILE=/dev/tpm0
。
二、访问TPM 2.0设备的方式有三种:
直接通过 TCTI
device
和 path/dev/tpm0
。这仅限于一次一个进程,并且该进程需要在自身之后进行清理(刷新临时句柄等)。此方法非常适合 LUKS 使用。通过内核资源管理器、TCTI
device
和路径。这需要相对较新的内核。/dev/tpmrm0
通过用户空间资源管理器。在现代系统上,这通常是 TCTI
abrmd
(没有路径),可在“tpm2-abrmd”包中找到 - 并且服务也将是“tpm2-abrmd”。Ubuntu 18.04 附带了非常老版本的 Intel TPM2 堆栈 - 其“tpm2-resourcemgr”似乎工作方式完全不同(据我所知,没有匹配的 tcti 库)。我会避免使用这项旧服务。
如果你使用内核资源管理器(tpmrm0
设备),你不要需要一个用户空间资源管理器。反之亦然,如果你使用用户空间资源管理器 (abrmd),那么它就是那个声称对 /dev/tpm0 具有独占访问权限的管理器,我认为这意味着你不应该使用 /dev/tpmrm0。
因此,就你的情况而言,我认为你应该:
- 停止并禁用
tpm2-resourcemgr.service
- 取消设置 TPM2TOOLS_TCTI
- 将 TPM2TOOLS_TCTI_NAME 设置为
device
/dev/tpmrm0
如果您想使用内核 RM(或/dev/tpm0
其他方式),请将 TPM2TOOLS_DEVICE_FILE 设置为
如果什么都不起作用,IBM 还提供另一个 TPM 2.0 堆栈,可用作“tss2”包。两者提供的操作基本相同,并且都可以与同一个 TPM 设备一起使用。(请注意,IBM 工具使用不同的环境变量,并且需要将 TPM_INTERFACE_TYPE 设置为dev
。)