使用 FIDO2 设备解锁全盘加密

systemd-boot 已支持 FIDO2 设备解锁。配置方法如下:

systemd-cryptenroll --fido2-device=auto <BLOCK-DEVICE>

编辑 /etc/mkinitcpio.conf 文件,添加如下内容:

...
HOOKS=(base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt lvm2 filesystems fsck)
...

同时设置 systemd-boot 启动的内核参数:

rd.luks.name=<uuid of /dev/sda2>=luksdev
rd.luks.options=discard,fido2-device=auto
root=/dev/mapper/luksdev rw
rootflags=subvol=/@

不过这里有遇到一个问题:等待 FIDO2 设备解锁时,如果设备没有插入,则会一直等待,直到设备插入。

如果想设置一个插入超时,可以在 rd.luks.options 里添加 token-timeout=10s 的参数,这样 10 秒后没有插入 FIDO2 设备,就会要求输入密码。

之前在这个 issue 1 中有过类似的讨论,不过在 systemd 250 中已经支持了这个功能。注意,需要设置的是 token-timeout 参数,而不是 timeout 参数, timeout 超时只会让你进 emergency shell (甚至有可能你的硬盘没解锁,连 shell 都进不去)。

不过目前应该还不支持多个 FIDO2 设备的注册,这点在 Canokey 评测的时候已经提过了,这里就不再赘述了。

#linux/systemd