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 评测的时候已经提过了,这里就不再赘述了。