Fedora 工作站包括 systemd-cryptenroll 默认情况下,这使得添加替代解锁方法 卢克斯 分区相当简单。 本文介绍了如何使用 TPM2 芯片或 FIDO U2F 安全密钥作为解锁 LUKS 分区时密码的替代因素。
上一篇
TPM2 芯片是带有安全 API 的一小块存储空间,您可以在其中存储受安全启动保护的秘密。 Secure Boot 通过计算基于以下内容的哈希来建立信任链 example、硬件或软件组件。 通过这种方式,您可以存储一个 LUKS 解密密钥,只有在系统处于未被篡改的状态(理论上)时才能访问该密钥。 不幸的是,这意味着您需要将诸如 initramfs 和内核之类的东西测量到这种状态,这意味着每次进行系统升级时都会使该因素无效。 FIDO U2F 密钥不会遇到此问题,因为它们与硬件平台无关。
查看我之前关于使用集成 TPM2 安全存储设备的文章,以更深入地了解基于 TPM2 的解锁工作原理及其安全隐患。
然而,上一篇文章使用了 clevis,它添加了额外的依赖项,并且具有比使用已经存在的 systemd-cryptenroll 更复杂的接口。
使用 TPM2 自动解密您的磁盘
符合 FIDO2 或 FIDO U2F 标准的密钥是一种外部存储设备,具有用于存储和检索机密的安全 API。 这些密钥可用作身份验证流程中的第二个或唯一因素。 秘密永远不会离开设备,验证是在客户端完成的。 因此,与 TOTP(基于时间的一次性密码)等其他 MFA(多因素身份验证)技术相比,通过设计可以减轻钓鱼等攻击场景。
上一篇关于 FIDO U2F / FIDO2 密钥的帖子位于 Fedora 杂志展示了如何设置这些键 Linux PAM 认证——主要是 sudo 和 GNOME 登录。
使用 FIDO U2F 安全密钥 Fedora Linux
(也许)摆脱U形夹
假设您遵循了之前关于使用 TPM2 的帖子,您可能希望在继续使用 systemd-cryptenroll 之前解除绑定并删除 clevis。 否则就跳过这个部分。
首先,从 LUKS 秘密插槽中删除任何 TPM2 绑定。 当心:不要删除插槽 0,因为它包含密码绑定!
$ sudo clevis luks list -d /dev/nvme0n1p3 ... Slot 1 (or whichever is your TPM2 binding) ... $ sudo clevis luks unbind -d /dev/nvme0n1p3 -s 1
现在删除 clevis 包。
sudo dnf remove -y clevis clevis-luks clevis-dracut clevis-udisks2 clevis-systemd
选择 TPM2 或 FIDO 作为替代解密方法
两种方法都需要以下步骤。 选择一个你喜欢的。
- 添加相应的 dracut 模块,以便在启动时在 initramfs 中提供支持
- 注册/绑定绑定到 TPM2 或 FIDO 密钥的 LUKS 秘密槽
- 使用新配置更新 /etc/crypttab
- 重建 initramfs 以应用更改
重要的是最后运行 dracut,不仅包括新的依赖项,还包括 initramfs 中更新的 crypttab。
使用带有 FIDO U2F 密钥的 systemd-cryptenroll
将 fido2 dracut 模块添加到您的 dracut 配置中。
$ echo "add_dracutmodules+=" fido2 "" | sudo tee /etc/dracut.conf.d/fido2.conf add_dracutmodules+=" fido2 "
现在使用 LUKS 分区注册 FIDO 密钥作为替代解密因素。 看 systemd-cryptenroll(1) 用于控制触摸或 pin 提示等功能的选项。 默认情况下,注册和使用需要在线状态和密码。
sudo systemd-cryptenroll --fido2-device auto /dev/nvmen1p3
更新 /etc/crypttab 并将 fido2-device=auto 附加到相应行的选项。 crypttab 中的一行由四个字段组成,最后一个字段是逗号分隔的列表。
最后,使用 dracut 重建你的 initramfs。 以下命令将重建您当前启动的 initramfs 插槽。
sudo dracut -f
不要担心 FIDO 密钥不起作用或丢失它,因为密码仍然可以作为后备。
现在系统会在启动时提示您输入 FIDO 密钥的 PIN。 请注意,PIN 输入提示看起来与密码提示完全相同。 您只会在使用终端时注意到差异(您可以通过点击 ESC键 钥匙)。 输入正确的 PIN 码后,硬件令牌将提示您触摸它(也)未在提示中指示。 如果它不提示触摸,则 systemd-cryptenroll 无法找到与输入的 PIN 对应的硬件令牌。
笔记: systemd-cryptenroll 目前不支持多个连接的硬件令牌。
将 systemd-cryptenroll 与 TPM2 芯片一起使用
将 tpm2-tss 模块添加到您的 dracut 配置中。
$ echo "add_dracutmodules+=" tpm2-tss "" | sudo tee /etc/dracut.conf.d/tpm2.conf add_dracutmodules+=" tpm2-tss "
注册 TPM2 芯片作为 LUKS 分区的替代解密因素。 -wipe-slot tpm2 选项确保在成功注册后删除任何先前的绑定。 每次需要更新绑定时使用此命令。
sudo systemd-cryptenroll --wipe-slot tpm2 --tpm2-device auto --tpm2-pcrs "0+1+2+3+4+5+7+9" /dev/nvme0n1p3
更新 /etc/crypttab 并将 tpm2-device=auto,tpm2-pcrs=0,1,2,3,4,5,7,9 附加到相应行的选项,具体取决于所使用的 PCR。 crypttab 中的一行由四个字段组成,最后一个字段是逗号分隔的列表。
最后但同样重要的是,使用 dracut 重建你的 initramfs。 以下命令将重建您当前启动的 initramfs 插槽。
sudo dracut -f