多个 LUKS 驱动器上的 Yubikey

多个 LUKS 驱动器上的 Yubikey

我有以下 LUKS 分区:

root@precision:~# blkid | grep crypto_LUKS
/dev/nvme0n1p3: UUID="e1ac241d-a91c-4386-9b08-752dc5d0e9b8" TYPE="crypto_LUKS" PARTUUID="91fc5b71-7c22-4e3e-821d-7116a5a46f7e"
/dev/nvme0n1p4: UUID="23c3618e-be44-42f0-812b-bee1b0ac8dfe" TYPE="crypto_LUKS" PARTUUID="a6caf1e1-6ceb-4287-a2e2-45e4bbf1cec1"
/dev/sda1: UUID="396463ed-16f8-4f77-808d-743f35eaa4cb" TYPE="crypto_LUKS" PARTUUID="1cec189b-c43b-4094-a9f2-47d8f589c6d8"

尝试按照以下步骤设置 Yubikey 2FA:

我运行以下脚本三次,每次在执行此操作之前都会在脚本中更改目标磁盘。每次我都发送相同的密码“123456”

然后,我检查每个加密 LUKS 磁盘上的插槽,发现插槽 7 已启用:

root@precision:~# cryptsetup luksDump /dev/nvme0n1p3 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: ENABLED
root@precision:~# cryptsetup luksDump /dev/nvme0n1p4 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: ENABLED
root@precision:~# cryptsetup luksDump /dev/sda1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: ENABLED
root@precision:~# 

问题:

当我重新启动 Yubikey 2FA 时似乎解锁了,nvme0n1p3但是驱动器没有解锁,我需要输入 LUKS 密码。/dev/nvme0n1p4/dev/sda1

当不使用 Yubikey 时,我只需输入一次 LUKS 密码即可解锁所有驱动器。

答案1

作为 Yubikey 特定实现的替代方案yubikey-luks,您可以使用FIDO2标准(Yubikey 5+,其他品牌)以及systemd-cryptenroll开锁LUKS2卷。

据说FIDO2 正常运行,即使对多个 LUKS2 磁盘或其他目的使用相同的身份验证器也是如此。 (这可能只是因为兼容的智能卡已针对 FIDO2 进行了预先配置。)

以下是磁盘sda5和 LUKS2 卷的最小步骤myvolume

systemd-cryptenroll --fido2-device=auto /dev/sda5

同时编辑/etc/crypttab将选项包含fido2-device=auto在第四列中。

myvolume /dev/sda5 - fido2-device=auto

可选择配置,例如,用户存在验证需要触摸 Yubikey 才能解锁。


支持多种身份验证标准systemd-cryptenroll

  • FIDO2,带有hmac-secret扩展。由 Yubikey 5+ 和其他几个品牌支持。
  • PKCS#11。对于 Yubikey,这需要配置 Yubikey PIV/证书插槽。(类似于使用 使用的 HMAC-SHA1 的 Yubikey 插槽yubikey-luks。)
  • 可信平台模块 2.0 (TPM2)支持。使用 TPM2 芯片,它基本上是内置系统智能卡。

更多详细信息请参阅 Lennart Poettering 的博客文章在 systemd 248 上使用 TPM2、FIDO2、PKCS#11 安全硬件解锁 LUKS2 卷从 2021-01-13 开始。另请参阅相关想法,例如分离系统和用户主目录加密不可变的操作系统图像


请注意,systemd-cryptenroll支持相当新,并非所有发行版/版本都默认启用所有功能。在我看来Ubuntu 22.04.1 LTS系统:

systemd --version
systemd 249 (249.11-0ubuntu3.6)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY -P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified

请注意,+LIBCRYPTSETUP+FIDO2已启用,但也-P11KIT被禁用。

答案2

也许您的磁盘设置脚本意外重置了 Yubikey?

链接问题中的步骤@seanlano 的回答解释 Yubikey 的第二个插槽只需要针对 HMAC-SHA1 进行初始化/编程一次. 如果您运行 Yubikey 插槽初始化ykpersonalize命令在设置期间每个磁盘,您将覆盖上次磁盘设置时使用的 Yubikey 插槽的密钥。

3. 为 HMAC-SHA1 初始化 Yubikey 槽

现在我们需要使用 HMAC-SHA1 配置对 Yubikey 的第二个插槽进行编程。这将清除您之前的插槽配置(默认情况下为空)。同样,如果你将 HMAC-SHA1 用于其他用途不要发出此命令 - 它将清除您的配置。您可以安全地使用 Yubikey 中的相同密钥进行此 LUKS 设置,就像进行其他用途一样。(例如,在另一台使用 LUKS+Yubikey 的计算机上)。

ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

初始设置期间的解决方案是不是每次重新编程 Yubikey 插槽——一次对所有磁盘来说就足够了。

要解决此问题,您可以重置每个磁盘上的 LUKS 插槽 7,替换存储在那里的任何先前凭据。@seanlano 的回答中也涵盖了这一点。由于您已经设置了 Yubikey,因此每个磁盘只需要一个命令。

根据你问题中给出的设置,这些是yubikey-luks命令。如果此后发生了变化,请确保将其调整为您当前的设置,因为这将删除该 LUKS 插槽的当前凭据。

sudo yubikey-luks-enroll -d /dev/nvme0n1p3 -s 7 -c
sudo yubikey-luks-enroll -d /dev/nvme0n1p4 -s 7 -c
sudo yubikey-luks-enroll -d /dev/sda1 -s 7 -c

相关内容