继例子如何从 YubiKey 添加 FIDO2 密钥,但我不知道如何使用 YubiKey 从命令行解锁它。说明中谈到了启动时解锁——但这不是我想要的。
设置
创建一个 128 MiB 文件,使其成为块设备loop0
并设置 LUKS。
$ dd if=/dev/urandom of=disk.bin bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 0.534038 s, 251 MB/s
$ losetup /dev/loop0 disk.bin
$ cryptsetup luksFormat -y /dev/loop0
WARNING!
========
This will overwrite data on /dev/loop0 irrevocably.
Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for temp.bin:
Verify passphrase:
添加 Yubikey。
$ systemd-cryptenroll /dev/loop0 --fido2-device=auto --fido2-with-client-pin=yes
答案1
将 FIDO2 安全令牌配置为需要 PIN 时,它与常规 LUKS 密码短语条目冲突,因为两者都是通过键盘在主机上输入的。该选项--token-only
用于指示将输入 PIN(而不是密码),并将其传递给(此处假定为单个)安全令牌。
sudo cryptsetup open --token-only /dev/loop0 loop0_encrypted
--token-only
对于手动 FIDO2+PIN 使用来说,例如连接外部磁盘/USB 记忆棒等时,使用非常简单。cryptsetup
在没有密码短语插槽时自动切换到 PIN 输入听起来确实是一个合理的可用性改进。(TODO:如果默认行为发生变化,请更新答案。)
测试使用密码设置 v2.6.1(标记为2023-02-09);适用于 Debian 12 (Bookworm)、Ubuntu 23.04 (Lunar Lobster)、Fedora F38 等。
从上游cryptsetup open
文档。 (强调我的。)
如果存在有效的 LUKS2 令牌,但需要 PIN 码要解锁指定的键槽,它是不使用除非添加以下选项之一:
--token-only
,--token-type
其中type
匹配所需的 PIN 保护令牌或--token-id
匹配id
的 PIN 保护令牌。
Debian 12 手册页。 (强调我的。)
--token-only
如果基于令牌的键槽解锁失败,请不要继续执行操作。如果没有该选项,操作将要求输入密码才能进一步进行。它允许 LUKS2 代币受以下保护PIN 优先于交互式键槽密码提示。
答案2
使用systemd-cryptenroll
设置加密表明您需要家庭类似的工具systemd
来解锁它。
事实证明它本质上是示例 3systemd 特定版本的crypttab(5)
手册页。
sudo /usr/lib/systemd/systemd-cryptsetup attach loop0_encrypted /dev/loop0 - fido2-device=auto
等效的/etc/crypttab
条目是:
loop0_encrypted /dev/loop0 - fido2-device=auto
请注意,例如,在 Debian 12 上,crypttab(5)
手册页显示:
关于不同的 CRYPTTAB 格式
请注意,有几个独立的 cryptsetup 包装器具有自己的
crypttab
格式。本联机帮助页涵盖了 Debianinitramfs
脚本和SysVinit
init 脚本的实现。systemd
带来了自己的 crypttab 实现。我们试图在此手册页中涵盖 systemd 和我们的实现之间的差异,但如果有疑问,最好检查 systemd crypttab(5) 手册页,例如在线:https://www.freedesktop.org/software/systemd/man/crypttab.html。