我有以下 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