Вопрос или проблема
Пожалуйста, помогите мне завершить настройку LUKS + TPM2 + автоматическая разблокировка при загрузке.
Я установил чистую Ubuntu 22.04.2. Я зашифровал раздел в графическом интерфейсе при установке ОС. Я установил все обновления.
Ubuntu 22.04.2 LTS
5.19.0-43-generic
systemd 249 (249.11-0ubuntu3.9)
Я пытаюсь использовать это руководство: https://wiki.archlinux.org/title/Trusted_Platform_Module#systemd-cryptenroll
Я установил:
tpm2-tools
dracut-core_059-3_amd64.deb
dracut_059-3_all.deb
Далее:
sudo dracut --add tpm2-tss
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 /dev/nvme0n1p3
Я добавил в /etc/crypttab
:
nvme0n1p3_crypt UUID=1fce6364-485c-4524-9c73-7bd4dac5bd32 none luks,discard
Система все еще запрашивает пароль при загрузке.
Я не понимаю, что именно мне нужно сделать, чтобы автоматически разблокировать LUKS через TPM при загрузке.
Вот что я использую для разблокировки LUKS с помощью TPM2 в той же Ubuntu 22. Я не использую systemd-cryptenroll, а clevis. Единственный ‘недостаток’ в том, что запрос пароля отображается при загрузке, но исчезает после получения ключа из TPM.
#!/bin/bash
#установка необходимых пакетов
apt-get -y install clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools tss2
#процедура
echo -n Введите пароль LUKS:
read -s LUKSKEY
echo ""
clevis luks bind -d /dev/nvme0n1p3 tpm2 '{"pcr_bank":"sha256"}' <<< "$LUKSKEY"
update-initramfs -u -k all
#проверка
clevis luks list -d /dev/nvme0n1p3
#удаление примера; -s это один из слотов, указанных в предыдущей команде
#clevis luks unbind -d /dev/nvme0n1p3 -s 1 tpm2
Нет необходимости модифицировать что-либо еще (даже файл crypttab).
Обновление: также протестировано и работает с Ubuntu 24.04 LTS; измените устройство nvme0n1p3 на то, которое подходит вашей системе.
Обновление 2: протестировано и работает на Debian 12 тоже.
Я вижу только одну проблему в ваших шагах в /etc/crypttab
. Необходимо добавить tpm2-device=auto
.
Вот обновленный файл
nvme0n1p3_crypt UUID=1fce6364-485c-4524-9c73-7bd4dac5bd32 none tpm2-device=auto,luks,discard
После обновления /etc/crypttab выполните dracut -f
Если этих деталей будет недостаточно, имеется подробное руководство с единственным основным отличием по сравнению с вашим шагом. Я не полностью уверен, совместима ли версия dracut_059 с Ubuntu 22.04, так как Ubuntu поставляется с версией 051. В качестве обходного пути я просто добавил несколько папок с модулями dracut в версию 051 вручную.
01systemd-sysusers
01systemd-udevd
91tpm2-tss
Недавно я установил Ubuntu 24.04 на рабочую станцию с FDE + TPM2. Большая часть информации, которую можно найти в интернете, касается FDE на Fedora, которая основана на dracut
и systemd-cryptenroll
, но это может не работать корректно для Ubuntu.
В Ubuntu есть ошибка поддержки tpm2-device=auto
, она выдаст ошибку при выполнении update-initramfs -u
.
Если вы попытаетесь использовать dracut -f
для обхода указанной выше проблемы, вы можете столкнуться со следующей ошибкой и не сможете войти в свою систему!
rning: dracut-initqueue: starting timeout scripts
Warning: dracut-initqueue: still waiting for following initqueue hooks:
Warning: /lib/dracut/hooks/initqueue/finished/devexists-\x2fdev\x2fmapper\x2fubuntu--vg-ubuntu--lv.sh: (cut for brevity)
Вот что произошло в моем случае, вам следует быть осторожнее с dracut
на Ubuntu.
Окончательное решение, которое я нашел, – отказаться от systemd-cryptenroll
и использовать tpm2-initramfs-tool
вместо этого. Ниже приводится скрипт настройки на основе официальной документации. И он хорошо работает на моем устройстве.
sudo apt-get update
sudo apt-get install -y tpm2-initramfs-tool
sudo tpm2-initramfs-tool seal --data "$FDE_PASS"
# редактирование /etc/crypttab, замена "none" на "unseal", добавление keyscript=/usr/bin/tpm2-initramfs-tool
sudo sed -i -e 's#none#unseal#' /etc/crypttab
sudo sed -i -e 's#luks#luks,keyscript=/usr/bin/tpm2-initramfs-tool#' /etc/crypttab
# добавление бинарных файлов и библиотек в initramfs
cat << EOF | sudo tee /etc/initramfs-tools/hooks/tpm2-initramfs-tool
. /usr/share/initramfs-tools/hook-functions
copy_exec /usr/lib/x86_64-linux-gnu/libtss2-tcti-device.so.0
copy_exec /usr/bin/tpm2-initramfs-tool
EOF
sudo chmod 755 /etc/initramfs-tools/hooks/tpm2-initramfs-tool
sudo update-initramfs -u
.
Ответ или решение
Настройка автозагрузки зашифрованного LUKS раздела с использованием Trusted Platform Module (TPM2) может быть сложной задачей, особенно если речь идет об особенностях дистрибутивов Linux, таких как Ubuntu. В этом ответе я подробно объясню необходимые шаги для настройки автоматической разблокировки LUKS с использованием TPM2 на Ubuntu, основываясь на вашем примере и предоставленных данных.
Теория
TPM — это аппаратное решение, которое обеспечивает надежное хранение криптографических ключей и других конфиденциальных данных. Использование TPM для разблокировки LUKS позволяет автоматизировать процесс, тем самым избавляя пользователя от необходимости вводить пароль каждый раз при запуске системы.
Пример
Вы упомянули использование Ubuntu 22.04 с обновленной поддержкой ядра, а также систему управления шифрованием через systemd
. Однако, проблема, с которой вы столкнулись, обусловлена несоответствием с использованием некоторых инструментов, такими как dracut
и systemd-cryptenroll
, которые могут вызывать ошибки из-за незавершенной поддержки в Ubuntu.
Приложение
Основываясь на вашей ситуации, шаги для успешной настройки можно разбить на следующие этапы:
-
Установка необходимых инструментов
Вам потребуется установить ряд пакетов, чтобы обеспечить функциональность TPM и взаимодействие его с LUKS:
sudo apt update sudo apt install tpm2-tools clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools
-
Настройка LUKS и TPM
Используйте
clevis
для связывания вашего зашифрованного раздела с TPM:echo -n "Введите LUKS пароль: " read -s LUKSKEY echo "" clevis luks bind -d /dev/nvme0n1p3 tpm2 '{"pcr_bank":"sha256"}' <<< "$LUKSKEY"
Обновите initramfs, чтобы сохранить изменения:
update-initramfs -u -k all
-
Обновление конфигурации crypttab
Обновите файл
/etc/crypttab
, чтобы он корректно использовал TPM для автоматической разблокировки:nvme0n1p3_crypt UUID=1fce6364-485c-4524-9c73-7bd4dac5bd32 unseal luks,keyscript=/usr/bin/clevis-luks-unlock
-
Отладка и проверка
Убедитесь, что изменения в crypttab обновлены:
cat /etc/crypttab clevis luks list -d /dev/nvme0n1p3
Перезагрузите систему и проверьте, происходит ли автоматическая разблокировка, без запроса пароля от пользователя.
Заключение
Подводя итог, стоит отметить, что Ubuntu может сталкиваться с трудностями при использовании определенных инструментов из-за своих характерных особенностей и несовместимостей пакетов. В свете этого, использование clevis
(вместо интеграции через dracut
) для автоматической разблокировки с помощью TPM является более надежным решением для данного дистрибутива. Это решение упрощает управление и обеспечивает необходимую безопасность, рекомендованную для систем с конфиденциальными данными.
Ваши действия, описанные в примере, направлены на достижение максимально безопасной и столь же удобной среды работы с зашифрованными данными, и если всё настроено корректно, ваш LUKS должен разблокироваться автоматически благодаря TPM на каждый старт системы. Если возникнут проблемы, рекомендуется обратиться к исходным инструкциям или сообществам пользователей Ubuntu, чтобы обеспечить точное соблюдение всех шагов и комплектующих версий ПО.