前言

新装了fedora,开机一直要输入luks密码解锁硬盘感觉有点麻烦,既然luks2支持tpm和fido2,这次就全给他整上

FIDO2

首先是FIDO2方式

需要FIDO2密钥支持hmac-secret扩展

我的话手里的Canokey Canary就支持

首先确定luks的分区

1
lsblk -f

然后确认luks分区版本,确保是luks2

1
sudo cryptsetup luksDump /dev/nvme0n1p3 | head

确认分区后,插入FIDO2密钥,查看状态

1
sudo systemd-cryptenroll --fido2-device=list

正常来说会出现下面类似输出

1
2
PATH          MANUFACTURER PRODUCT
/dev/hidraw4 Yubico YubiKey 5...

然后开始注册

1
2
3
sudo systemd-cryptenroll \
--fido2-device=auto \
/dev/nvme0n1p3

接着会需要输入当前LUKS密码以及FIDO PIN,触摸两次硬件密钥完成注册

注册完后配置/etc/crypttab

1
cat /etc/crypttab

一般会输出

1
luks-12345678-... UUID=12345678-... none discard

在后面加入fido2-device=auto

例如

1
luks-12345678-... UUID=12345678-... none discard,fido2-device=auto

最后通过dracut把FIDO2支持加入initramfs

1
2
3
4
sudo mkdir -p /etc/dracut.conf.d

echo 'add_dracutmodules+=" fido2 "' | \
sudo tee /etc/dracut.conf.d/fido2.conf

重建initramfs

1
sudo dracut --regenerate-all --force

验证一下

1
lsinitrd -m /boot/initramfs-$(uname -r).img | grep fido

一切正常的话会看到fido2字样

保持密钥插入重启,启动时就会要求输入FIDO2 PIN

输入完触摸一下安全密钥即可完成解锁。

TPM2+PIN

PC既然有TPM2,那也不能浪费了

先确认tpm设备

1
sudo systemd-cryptenroll --tpm2-device=list

正常会看到/dev/tpmrm0

然后开始注册

1
2
3
4
5
sudo systemd-cryptenroll \
--tpm2-device=auto \
--tpm2-with-pin=yes \
--tpm2-pcrs=7 \
/dev/nvme0n1p3

具体PCR选什么怎么组合就看你自己的需求

然后是下面流程

1
2
3
4
5
现有 LUKS 密码

新的 TPM2 PIN

再次确认 TPM2 PIN

另外PIN不一定只能是数字,但是连续输错TPM PIN会导致TPM暂时锁定

接着同样是修改/etc/crypttab

后面加上tpm2-device=auto

例如

1
luks-xxxxxxxx UUID=xxxxxxxx none discard,fido2-device=auto,tpm2-device=auto

以及加入initramfs

1
2
echo 'add_dracutmodules+=" tpm2-tss "' | \
sudo tee /etc/dracut.conf.d/tpm2.conf

最后

1
sudo dracut --regenerate-all --force