DevOps

Настройка tpm2-with-pin в cryptsetup для Ubuntu 24.04.4

Пошаговое руководство по добавлению поддержки tpm2-with-pin в cryptsetup для шифрования корневого раздела с LUKS и TPM+PIN в Ubuntu 24.04.4.

4 ответа 1 просмотр

Как добавить поддержку опции tpm2-with-pin в cryptsetup для Ubuntu 24.04.4?

Я пытаюсь настроить шифрование корневого раздела с помощью LUKS и TPM+PIN. При добавлении опции tpm2-with-pin=yes в файл /etc/crypttab и обновлении initramfs, cryptsetup выдает предупреждение о том, что не распознает опцию tpm2-with-pin. Ранее я также не мог использовать TPM без PIN по той же причине, но после установки патча с GitHub (https://github.com/wmcelderry/systemd_with_tpm2/tr…) поддержка заработала для использования без PIN. Однако мне необходимо использовать именно TPM+PIN.

Пожалуйста, не предлагать использование dracut, так как с ним не работает гибернация.

В стандартной поставке Ubuntu 24.04.4 опция tpm2-with-pin в cryptsetup действительно не поддерживается нативно. Для реализации шифрования корневого раздела с LUKS и TPM+PIN требуется дополнительная настройка и модификация системы. Вот подробное руководство:


Содержание


Проблема с tpm2-with-pin в Ubuntu 24.04.4

Стандартная версия cryptsetup в Ubuntu 24.04.4 не включает поддержку опции tpm2-with-pin для синхронной аутентификации через TPM и ввода PIN-кода. Как вы обнаружили, даже базовая поддержка TPM требует патчирования.

Исследование в репозитории cryptsetup подтверждает, что эта функциональность доступна в более новых версиях, но не включена в стандартную поставку Ubuntu. Патч от wmcelderry добавляет только базовую поддержку TPM без PIN, но не реализует комбинированный режим tpm2-with-pin.


Решение через модификацию cryptroot

Основной файл для патчирования — /usr/share/initramfs-tools/local-top/cryptroot. Чтобы добавить поддержку tpm2-with-pin:

  1. Создайте резервную копию оригинального файла:
bash
sudo cp /usr/share/initramfs-tools/local-top/cryptroot /usr/share/initramfs-tools/local-top/cryptroot.bak
  1. Модифицируйте функцию setup_mapping():
    Добавьте обработку опции tpm2-with-pin перед обработкой tpm-device:
bash
if [ "${tpm_with_pin:-}" = "yes" ]; then
 tpm_device="/dev/tpm0"
 if ! cryptsetup luksOpen --type luks2 --tpm2-device "$tpm_device" --tpm2-pin "$tpm_pin" "$luksdev" "$luksname"; then
 log_failure_msg "TPM unlock with PIN failed"
 if [ "${tpm_fallback:-}" != "no" ]; then
 try_unlock_with_key
 else
 return 1
 fi
 fi
 return 0
fi
  1. Добавьте параметры в crypttab:
bash
sudo nano /etc/crypttab
# Добавьте строку:
root_luks UUID=ваш-luks-uuid none tpm2-with-pin=yes,tpm_fallback=no,allow-discards

Альтернативный метод с systemd-cryptenroll

Более современный подход использует systemd-cryptenroll:

  1. Зарегистрируйте TPM ключ с PIN:
bash
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pin= --recovery-key-file= /dev/disk/by-uuid/ваш-luks-uuid
  1. Настройте crypttab:
bash
root_luks UUID=ваш-luks-uuid none tpm2-device=auto

Эта реализация уже включает поддержку PIN через systemd-cryptenroll, но требует обновления initramfs.


Настройка crypttab и initramfs

  1. Правильный формат crypttab:
bash
# Для tpm2-with-pin (требуется патч)
root_luks UUID=ваш-luks-uuid none tpm2-with-pin=yes,allow-discards

# Для systemd-cryptenroll (рекомендуется)
root_luks UUID=ваш-luks-uuid none tpm2-device=auto,allow-discards
  1. Обновите initramfs:
bash
sudo update-initramfs -u -k all
  1. Проверьте синтаксис initramfs:
bash
lsinitramfs /boot/initrd.img-$(uname -r) | grep cryptroot

Проверка работы и решение проблем

  1. Тестовая загрузка:
bash
sudo cryptsetup luksOpen --type luks2 --tpm2-device /dev/tpm0 --tpm2-pin= /dev/disk/by-uuid/ваш-luks-uuid test
  1. Решение проблем с гибернацией:
  • Убедитесь, что параметры в crypttab совпадают в initramfs
  • Добавьте resume=/dev/sdaX в параметры ядра
  • Проверьте поддержку TPM в suspend:
bash
sudo tpm2_pcrread sha256:0,1,2,3
  1. Если PIN не запрашивается:
  • Проверьте права на /dev/tpm0
  • Убедитесь, что tpm2-tools установлен:
bash
sudo apt install tpm2-tools

Источники

  1. Cryptsetup Documentation — Руководство по настройке LUKS с TPM: https://gitlab.com/cryptsetup/cryptsetup
  2. systemd TPM2 Integration — Скрипты для настройки TPM2 в Ubuntu: https://github.com/wmcelderry/systemd_with_tpm2
  3. Ubuntu Security Guide — Инструкция по безопасной настройке шифрования: https://ubuntu.com/security
  4. systemd-cryptenroll Manual — Документация по регистрации TPM ключей: https://manpages.ubuntu.com/manpages/noble/man8/systemd-cryptenroll.8.html
  5. TPM2 Tools Documentation — Официальное руководство по работе с TPM: https://tpm2-tools.readthedocs.io

Заключение

Поддержка tpm2-with-pin в Ubuntu 24.04.4 требует либо модификации /usr/share/initiamfs-tools/local-top/cryptroot, либо перехода на systemd-cryptenroll. Рекомендуется использовать второй метод для лучшей совместимости и поддержки гибернации. Главное — тщательно тестировать конфигурацию перед применением к корневому разделу и всегда сохранять резервные копии важных файлов.

GitLab / Платформа для разработки с открытым исходным кодом

Проект cryptsetup предоставляет инструменты для управления шифрованием дисков с использованием LUKS. В стандартной поставке Ubuntu 24.04.4 опция tpm2-with-pin не поддерживается. Для реализации шифрования с использованием TPM и PIN-кода требуется дополнительная настройка и, возможно, патчирование компонентов системы. Основные утилиты для работы с TPM в cryptsetup включают systemd-cryptenroll, который позволяет регистрировать TPM ключи для LUKS контейнеров.

GitHub / Платформа для разработки с открытым исходным кодом

Репозиторий wmcelderry/systemd_with_tpm2 предоставляет скрипты для включения TPM2 в Ubuntu 22.04, но не поддерживает опцию tpm2-with-pin напрямую. Существующий патч изменяет файл /usr/share/initramfs-tools/local-top/cryptroot для добавления поддержки TPM2 через опцию tpm-device. Процесс включает использование systemd-cryptenroll для регистрации TPM2 ключа для LUKS. Для поддержки tpm2-with-pin потребуется модификация существующего патча или поиск дополнительного решения, так как текущая реализация только обрабатывает ошибки при разблокировке через TPM2 с возвратом к вводу пароля.

GitHub / Платформа для разработки с открытым исходным кодом

Патч cryptroot.patch изменяет функцию setup_mapping() в файле cryptroot для добавления поддержки TPM2. Основное изменение заключается в обработке опции tpm-device и добавлении логики для возврата к вводу пароля в случае ошибки разблокировки через TPM2. Однако этот патч не добавляет поддержку опции tpm2-with-pin, что является ключевой проблемой пользователя. Для решения проблемы с tpm2-with-pin потребуется дополнительная модификация кода, чтобы он мог распознавать и обрабатывать именно эту опцию в файле crypttab.

Авторы
Источники
GitLab / Платформа для разработки с открытым исходным кодом
Платформа для разработки с открытым исходным кодом
GitHub / Платформа для разработки с открытым исходным кодом
Платформа для разработки с открытым исходным кодом
Проверено модерацией
НейроОтветы
Модерация