← LeisureLinux 文章索引
LeisureLinux · 微信公众号文章

进阶实战:基于 TPM 2.0 实现 Arch Linux 加密磁盘的“静默解密”

安全/漏洞 阅读原文(微信)↗

引言

在 Linux 安全架构中,LUKS 全盘加密是保护隐私的底线。但传统方案中,每次开机繁琐的密码输入往往让人望而却步。本文将演示如何利用 TPM 2.0 (Trusted Platform Module) 硬件模块,结合 systemd-cryptenroll 实现 Arch Linux 在 Btrfs 架构下的自动安全解密。为了方便读者实践,我们同步提供在 Debian 13 (Trixie) 宿主机下利用虚拟 TPM 进行实验的完整流程。

{#section path-to-node="6"}

一、 环境准备:Debian 13 虚拟实验室

在物理机部署前,强烈建议在虚拟机中复现。Debian 13 提供的 swtpm 能够完美模拟硬件行为。

1. 宿主机安装模拟器:

[Bash]{ngcontent-ng-c1474045893=""}

sudo apt update && sudo apt install qemu-system-x86 libvirt-daemon-system \
virt-manager swtpm swtpm-tools ovmf

2. 虚拟机配置要点:

  • 固件 (Firmware):必须选择 UEFI (OVMF_CODE.fd)。

  • 添加 TPM:在 Virt-Manager 中添加硬件,类型选择 Emulated,型号 TIS,版本 2.0

{#section-1 path-to-node="13"}

二、 基础安装:Btrfs + LUKS

通过 Arch Linux 官方 archinstall 脚本快速建立原型。

  1. 启动安装程序:执行 archinstall

  2. 磁盘配置

-   **分区方案**:选择 `Best-effort default partition layout`{index-in-node="8" path-to-node="15,1,1,0,0"}。
  • 文件系统:指定 Btrfs,建议开启 Zstd 压缩

  • 磁盘加密:选择 LUKS,并设置一个强健的初始密码(该密码将作为 TPM 失效时的保底恢复手段)。

  • 关键组件

-   **网络**:选择 `NetworkManager`{index-in-node="6" path-to-node="15,2,1,0,0"}

-   **引导**:建议选择 `systemd-boot`{index-in-node="8" path-to-node="15,2,1,1,0"} 以获得更好的 TPM 原生集成。

{#section-2 path-to-node="17"}

三、 核心演进:绑定 TPM 2.0

系统安装完成并重启进入后,开始将加密密钥"封印"到 TPM 芯片中。

1. 确认硬件识别:

[Bash]{ngcontent-ng-c1474045893=""}

# 检查是否存在 TPM 资源管理器设备
ls /dev/tpmrm0
```bash

**2. 执行密钥绑定**
使用 `systemd-cryptenroll`{index-in-node="14" path-to-node="21"}。我们将密钥绑定到 **PCR 7**代表 Secure Boot 状态)。这意味着如果黑客篡改了安全启动协议或更换了硬件TPM 将拒绝释放密钥

[Bash]{ngcontent-ng-c1474045893=""}

请将 /dev/vda2 替换为你的 LUKS 实际分区

sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/vda2

**3. 配置 initramfs 钩子:**
编辑 `/etc/mkinitcpio.conf`{index-in-node="23" path-to-node="23"},将传统的 `encrypt`{index-in-node="49" path-to-node="23"} 替换为 systemd 架构的 **`sd-encrypt`{index-in-node="73" path-to-node="23"}**

[Bash]{ngcontent-ng-c1474045893=""}

```bash
HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole sd-encrypt filesystems)

重新生成镜像: sudo mkinitcpio -P

{#section-3 path-to-node="27"}

四、 安全闭环:验证加密有效性

这是最关键的一步,确保你的系统不是在"裸奔"。

1. 元数据验证: 通过 cryptsetup 查看 LUKS2 槽位状态。

[Bash]{ngcontent-ng-c1474045893=""}

sudo cryptsetup luksDump /dev/vda2
```bash

> **确认项**:在 `Tokens`{index-in-node="6" path-to-node="31,0"} 段落中应出现 `systemd-tpm2`{index-in-node="20" path-to-node="31,0"};在 `Keyslots`{index-in-node="35" path-to-node="31,0"} 中应看到一个由该 Token 关联的新槽位。

**2. 行为验证(静默解密):**
重启虚拟机。如果系统直接进入登录界面而未弹出密码输入框,说明 TPM 已成功接管解密流程。

**3. 引导日志审计:**

[Bash]{ngcontent-ng-c1474045893=""}

journalctl -b 0 | grep "unsealed" ```

如果输出 Successfully unsealed key from TPM2 device,则标志着硬件级信任链已完整建立。

{#section-4 path-to-node="37"}

五、 专家笔记:关于 PCR 的生存策略

在物理机部署时,PCR 策略的选择至关重要:

  • PCR 7 (Recommended):仅绑定安全启动状态。更新 BIOS 设置会触发密码回退。

  • PCR 0/1:绑定固件代码。这意味着每次更新主板 BIOS,自动解密都会失效。

  • 应对方案:在更新 BIOS 前,建议先执行 systemd-cryptenroll——wipe-slots=tpm2 清除旧绑定,更新完成后重新绑定。

{#section-5 path-to-node="41"}

结语

通过 Btrfs 提供的文件系统灵活性与 TPM 2.0 提供的硬件级安全性,我们成功构建了一个既安全又易用的 Linux 工作站环境。这不仅是配置的叠加,更是对现代安全架构的一次深度实践。

更多关于 Linux 内核加固与底层技术的硬核干货,请关注 B 站同名频道:LeisureLinux。

本文整理自微信公众号 LeisureLinux 的原创内容(Linux / AI / 安全 硬核技术)。

· 阅读原文(微信公众号)

· 关注公众号 LeisureLinux,第一时间获取技术深度内容。

LeisureLinux 公众号二维码(微信扫一扫关注)