在交付高安全性虚拟机时,我们面临一个矛盾:既要防止甲方通过控制台修改启动参数绕过登录,又要确保业务重启时能够自动进入系统。本文将演示如何利用 TPM 2.0 硬件信任根,在 VMware 环境下实现一套 “无感且强力” 的安全交付方案。
1. 方案设计与威胁模型
防护手段
全磁盘加密 (LUKS):防止磁盘镜像被离线挂载窃取数据。
TPM 2.0 绑定:利用虚拟 TPM 存储密钥,实现 “合规硬件环境下自动开机,环境变更则需口令”。
GRUB 口令锁定:拦截控制台
init=/bin/bash等提权操作。
边界限制
本方案可防御控制台越权和离线拷贝。若攻击者获取了 Hypervisor 最高管理员权限并克隆了带有 TPM 状态的完整 VM 快照,安全性将受挑战。
2. 第一阶段:VMware 虚拟硬件配置
在安装系统前,必须为虚拟机准备物理(虚拟)安全基础:
开启虚拟机加密
在 VMware 虚拟机设置 -> 选项 (Options) -> 访问控制 (Access Control) 中点击 加密 (Encrypt)。

原因:VMware 要求必须先对虚拟机进行加密,才能添加虚拟 TPM 模块。
添加 TPM 设备
在 硬件 (Hardware) 选项卡中点击 添加 (Add) -> 可信平台模块 (Trusted Platform Module)。

确认 UEFI 引导
在 选项 -> 高级 (Advanced) 中,确保固件类型为 UEFI,并建议开启 安全启动 (Secure Boot)。

3. 第二阶段:带加密的 Ubuntu 24.04 安装
启动 Ubuntu 24.04 安装程序,在 “安装类型” 步骤,选择 “擦除磁盘并安装”。
点击 “高级功能 (Advanced Features)”,勾选 “在新的安装中使用 LVM 并启用加密”。
设置 LUKS 主密码:此密码是最高恢复权限,请妥善保存。在交付后,除非硬件环境变动,否则平时不需要输入它。

4. 第三阶段:配置 TPM 2.0 自动化解密
在 Ubuntu 24.04 中,由于默认引导工具对 TPM 支持不完善,我们需要切换到更强大的 Dracut 来处理引导过程,确保 LUKS + TPM 自动解密功能正常生效。
1) 切换到 Dracut 引导生成器
Dracut 原生支持 systemd-cryptsetup,是实现 TPM 自动解密的关键依赖工具。
sudo apt update
sudo apt install dracut tpm2-tools -y
# 注意:安装 dracut 会自动移除 initramfs-tools,这是正常操作2) 配置 Dracut 引入 TPM 模块
强制 Dracut 在生成引导镜像时加入 TPM 支持,确保解密所需的核心模块被加载。
# 创建 Dracut 专属配置文件并启用 hostonly 模式
echo 'hostonly="yes"' | sudo tee /etc/dracut.conf.d/tpm2.conf
# 添加 TPM 2.0 支持模块
echo 'add_dracutmodules+=" tpm2-tss "' | sudo tee -a /etc/dracut.conf.d/tpm2.conf3) 将 LUKS 密钥绑定到 TPM
将 LUKS 解密密钥绑定到 PCR 0(固件代码)和 PCR 7(安全启动状态),确保只有合规的硬件环境才能自动解密。
# 确认加密分区名称(例如 /dev/sda3 或 /dev/nvme0n1p3)
lsblk
# 执行 TPM 绑定操作(执行后需输入安装系统时设置的 LUKS 主密码)
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 /dev/sda34) 修改配置以支持自动解锁
编辑 /etc/crypttab 文件,确保 TPM 自动解密参数被正确识别。
sudo nano /etc/crypttab修改后示例(关键参数说明):
sda3_crypt UUID=... none luks,discard,tpm2-device=auto注意:请确保
tpm2-device=auto紧跟在discard后面,使用英文逗号分隔,无多余空格。
5) 刷新并生成引导镜像
这是最关键的一步,使用 Dracut 重新生成内核引导文件,使所有配置生效。
# 为当前运行的内核生成新的 initrd 镜像(-f 强制覆盖原有文件)
sudo dracut -f --kver $(uname -r)5. 第四阶段:GRUB 引导程序加固
为了防止甲方在 GRUB 界面通过快捷键篡改启动行为,需锁定编辑权限。
生成哈希密码
grub-mkpasswd-pbkdf2 # 记录输出的 grub.pbkdf2.sha512...定义超级用户
编辑 /etc/grub.d/40_custom,添加:
set superusers="admin"
password_pbkdf2 admin <你的哈希值>允许默认项免密启动
编辑 /etc/grub.d/10_linux,在 menuentry 行中插入 --unrestricted:
# 搜索并修改如下
echo "menuentry '${title}' --unrestricted ${CLASS} ..."更新 GRUB
sudo update-grub6. 验证与交付检查
重启验证:系统应直接进入登录界面,无需手动输入磁盘密码。
权限测试:在 GRUB 菜单按 e,应强制要求输入 admin 账号密码。
迁移测试:若将该虚拟机文件拷贝到未授权的物理机上运行,由于 TPM 密钥不匹配,系统会弹出 LUKS 密码框,阻断非法访问
Ubuntu 24.04 深度加固:全磁盘加密 (LUKS) + TPM 2.0 自动解密 + GRUB 锁定实战
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法