Источник https://fedoramagazine.org/use-systemd-cryptenroll-with-fido-u2f-or-tpm2-to-decrypt-your-disk/
Рабочая станция Fedora по умолчанию включает systemd-cryptenroll, что упрощает добавление альтернативных методов разблокировки разделов LUKS. В этой статье показано, как использовать микросхему TPM2 или ключ безопасности FIDO U2F в качестве альтернативы парольной фразе при разблокировке разделов LUKS.
Предыдущие статьи
Микросхема TPM2 — это небольшая часть хранилища с безопасными API, где вы можете хранить секреты, защищенные безопасной загрузкой. Безопасная загрузка устанавливает цепочку доверия путем вычисления хэшей на основе, например, аппаратных или программных компонентов. Таким образом, вы можете сохранить ключ дешифрования LUKS, который доступен только в том случае, если система находится в неподделанном состоянии (теоретически). К сожалению, это означает, что вы захотите измерять такие вещи, как ваши initramfs и ядро, в это состояние, что означает аннулирование этого фактора каждый раз, когда вы выполняете обновление системы. Ключи FIDO U2F не страдают от этой проблемы, поскольку они не привязаны к аппаратной платформе.
Прочтите мою предыдущую статью об использовании встроенного безопасного устройства хранения TPM2, чтобы узнать более подробные сведения о том, как работает разблокировка на основе TPM2 и как это влияет на безопасность.
https://fedoramagazine.org/automatically-decrypt-your-disk-using-tpm2/
Однако в предыдущей статье используется clevis, который добавляет дополнительные зависимости и имеет более сложный интерфейс, чем при использовании уже существующего systemd-cryptenroll.
Ключ, совместимый с FIDO2 или FIDO U2F, — это внешнее запоминающее устройство с безопасными API для хранения и извлечения секретов. Эти ключи можно использовать в качестве второго или единственного фактора в потоках аутентификации. Секреты никогда не покидают устройство, а проверка выполняется на клиенте. Таким образом, сценарии атак, такие как рыбалка, смягчены по дизайну по сравнению с другими технологиями MFA (многофакторная аутентификация), такими как TOTP (одноразовые пароли на основе времени).
В предыдущем сообщении о ключах FIDO U2F / FIDO2 здесь, в журнале Fedora, было показано, как настроить эти ключи для аутентификации Linux PAM — в первую очередь, для входа в систему sudo и GNOME.
Найдите свои зашифрованные диски LUKS
Для следующих разделов вам потребуются пути файловой системы к зашифрованным разделам LUKS. Используйте lsblk, чтобы найти их.
$> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 0B 0 disk
sdb 8:16 1 0B 0 disk
zram0 252:0 0 8G 0 disk [SWAP]
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 475.4G 0 part
└─luks-fdb98c38-... 253:0 0 475.3G 0 crypt /home
/
Найдите номер(а) раздела, на котором размещается раздел luks типа crypt. В данном случае это будет /dev/nvme0n1p3. Используйте этот путь в качестве цели для следующих разделов.
(Может быть) Избавьтесь от скобы
Предполагая, что вы следовали предыдущему сообщению об использовании TPM2, вы можете отвязать и удалить скобу, прежде чем продолжить работу с systemd-cryptenroll. В противном случае просто пропустите этот раздел.
Сначала удалите все привязки TPM2 из слотов секретов LUKS. Осторожно: не удаляйте слот 0, так как он содержит привязку парольной фразы!
Теперь удалите clevis packages.
sudo dnf remove -y clevis clevis-luks clevis-dracut clevis-udisks2 clevis-systemd
Выберите TPM2 или FIDO в качестве альтернативного метода расшифровки.
Следующие шаги необходимы для обоих методов. Выберите один по своему вкусу.
Добавьте соответствующий модуль dracut, чтобы поддержка была доступна в initramfs при загрузке.
Зарегистрируйте / привяжите секретный слот LUKS, привязанный либо к ключу TPM2, либо к ключу FIDO.
Обновите /etc/crypttab с новой конфигурацией.
Пересоберите initramfs, чтобы применить изменения
Важно запускать dracut последним, чтобы не только включить новые зависимости, но и обновленный crypttab в файл initramfs.
Используйте systemd-cryptenroll с ключом FIDO U2F.
Добавьте модуль fido2 dracut в конфигурацию dracut.
$ echo "add_dracutmodules+=\" fido2 \"" | sudo tee /etc/dracut.conf.d/fido2.conf
add_dracutmodules+=" fido2 "
Теперь зарегистрируйте ключ FIDO в разделе LUKS в качестве альтернативного фактора дешифрования. См. systemd-cryptenroll(1) для опций управления такими функциями, как сенсорное управление или подсказка пин-кода. По умолчанию присутствие и PIN-код запрашиваются для регистрации и использования.
$ sudo systemd-cryptenroll --fido2-device auto /dev/nvmen1p3
Обновите /etc/crypttab и добавьте fido2-device=auto к параметрам соответствующей строки. Строка в crypttab состоит из четырех полей, последнее из которых представляет собой список, разделенный запятыми.
Наконец, пересоберите ваши initramfs с помощью dracut. Следующая команда перестроит ваш текущий загруженный слот initramfs.
$ sudo dracut -f
Не беспокойтесь о том, что ключ FIDO не работает или может быть утерян, поскольку парольная фраза по-прежнему доступна в качестве запасного варианта.
Теперь при загрузке вам будет предложено ввести PIN-код вашего ключа FIDO. Имейте в виду, что запрос на ввод PIN-кода выглядит точно так же, как и запрос на ввод парольной фразы. Вы заметите разницу только при использовании терминала (его можно просмотреть, нажав клавишу ESC). После ввода правильного PIN-кода аппаратный токен предложит вам коснуться его, что (также) не указано в подсказке. Если он не запрашивает прикосновение, значит, systemd-cryptenroll не смог найти аппаратный токен, соответствующий введенному PIN-коду.
Примечание: в настоящее время systemd-cryptenroll не работает с несколькими подключенными аппаратными токенами.
Используйте systemd-cryptenroll с чипом TPM2.
Добавьте модуль tpm2-tss в конфигурацию dracut.
$ echo "add_dracutmodules+=\" tpm2-tss \"" | sudo tee /etc/dracut.conf.d/tpm2.conf
add_dracutmodules+=" tpm2-tss "
Зарегистрируйте чип TPM2 в качестве альтернативного фактора дешифрования для ваших разделов LUKS. Опция ‐wipe-slot tpm2 гарантирует, что после успешной регистрации все предыдущие привязки будут удалены. Используйте эту команду каждый раз, когда вам нужно обновить привязку.
$ sudo systemd-cryptenroll --wipe-slot tpm2 --tpm2-device auto --tpm2-pcrs "0+1+2+3+4+5+7+9" /dev/nvme0n1p3
Обновите /etc/crypttab и добавьте tpm2-device=auto,tpm2-pcrs=0+1+2+3+4+5+7+9 к параметрам соответствующей строки, в зависимости от используемых PCR. Строка в crypttab состоит из четырех полей, последнее из которых представляет собой список, разделенный плюсом.
И последнее, но не менее важное: пересоберите ваши initramfs с помощью dracut. Следующая команда перестроит ваш текущий загруженный слот initramfs.
$ sudo dracut -f