
Я собираюсь зашифровать корневой раздел и защитить ключ с помощью TPM. В конечном итоге я хочу заблокировать ключ шифрования в состоянии регистров TPM. Я настроил Fedora Workstation 38 - во время мастера настройки я установил флажок для шифрования диска и указал фразу восстановления - это сработало, как и ожидалось - во время фазы загрузки мне было предложено ввести парольную фразу для разблокировки ключа LUKS. Ниже приведен вывод lsblk -pf
.
lsblk -pf
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
/dev/sr0
/dev/zram0 [SWAP]
/dev/vda
├─/dev/vda1
├─/dev/vda2 ext4 1.0 b8d2cbbf-0f44-4487-bccf-74d9365ec383 647M 27% /boot
└─/dev/vda3 crypto_LUKS 2 08ab0fc7-5a6b-421c-be8a-d6171761a3e6
└─/dev/mapper/luks-08ab0fc7-5a6b-421c-be8a-d6171761a3e6
btrfs fedora_localhost-live 09d81602-3093-4a76-8c56-d9562197cdb9 13.2G 27% /home
Далее я зарегистрировался на TPM:
sudo systemd-cryptenroll --tpm2-device=auto /dev/vda3
New TPM2 token enrolled as key slot 1.
На данный момент у меня есть два слота для ключей: 0 — пароль и 1 — TPM.
Далее я обновил /etc/crypttab
:
luks-08ab0fc7-5a6b-421c-be8a-d6171761a3e6 UUID=08ab0fc7-5a6b-421c-be8a-d6171761a3e6 - tpm2-device=auto
Далее я перезагрузил systemd systemctl daemon-reload
, ниже представлен обновленный файл службы.
sudo systemctl cat systemd-cryptsetup@luks\\x2d08ab0fc7\\x2d5a6b\\x2d421c\\x2dbe8a\\x2dd6171761a3e6.service
[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:[email protected](8)
SourcePath=/etc/crypttab
DefaultDependencies=no
IgnoreOnIsolate=true
After=cryptsetup-pre.target systemd-udevd-kernel.socket
Before=blockdev@dev-mapper-%i.target
Wants=blockdev@dev-mapper-%i.target
Conflicts=umount.target
Before=cryptsetup.target
BindsTo=dev-disk-by\x2duuid-08ab0fc7\x2d5a6b\x2d421c\x2dbe8a\x2dd6171761a3e6.device
After=dev-disk-by\x2duuid-08ab0fc7\x2d5a6b\x2d421c\x2dbe8a\x2dd6171761a3e6.device
Before=umount.target
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
KeyringMode=shared
OOMScoreAdjust=500
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'luks-08ab0fc7-5a6b-421c-be8a-d6171761a3e6' '/dev/disk/by-uuid/08ab0fc7-5a6b-421c-be8a-d6171761a3e6' '-' 'tpm2-device=auto'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach 'luks-08ab0fc7-5a6b-421c-be8a-d6171761a3e6'
Я перезагрузил систему, и все заработало нормально; я все равно ввел свой пароль, как и ожидалось.
Далее я стер пароль:
sudo systemd-cryptenroll --wipe-slot=password /dev/vda3
wiped slot 0.
Перезагрузка приводит к следующей ошибке (извините за скриншот).
Когда я проверил службу systemd-cryptsetup@luks.. (после загрузки в режиме восстановления), я заметил, что ExecStart
у нее больше нет параметров TPM:
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach 'luks-08ab0fc7-5a6b-421c-be8a-d6171761a3e6' '/dev/disk/by-uuid/08ab0fc7-5a6b-421c-be8a-d6171761a3e6' '' ''
Служба systemctl status
выдала следующее сообщение об ошибке: systemd-cryptsetup[630]; No passphrase or recovery key registered
.
`
Я нашел проблему, спасибо @u1686_grawity
Мне пришлось добавить шаг - dracut -f
после добавления слота TPM - это (я полагаю) загрузило драйвер TSS на ранней стадии процесса загрузки.
решение1
Я нашел проблему, спасибо @u1686_grawity
Мне пришлось добавить шаг - dracut -f
после добавления слота TPM - это (я полагаю) загрузило драйвер TSS на ранней стадии процесса загрузки.