LUKS + TPM2 + автоматическая разблокировка при загрузке (systemd-cryptenroll)

Вопрос или проблема

Пожалуйста, помогите мне завершить настройку 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.

Приложение

Основываясь на вашей ситуации, шаги для успешной настройки можно разбить на следующие этапы:

  1. Установка необходимых инструментов

    Вам потребуется установить ряд пакетов, чтобы обеспечить функциональность TPM и взаимодействие его с LUKS:

    sudo apt update
    sudo apt install tpm2-tools clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools
  2. Настройка 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
  3. Обновление конфигурации crypttab

    Обновите файл /etc/crypttab, чтобы он корректно использовал TPM для автоматической разблокировки:

    nvme0n1p3_crypt UUID=1fce6364-485c-4524-9c73-7bd4dac5bd32 unseal luks,keyscript=/usr/bin/clevis-luks-unlock
  4. Отладка и проверка

    Убедитесь, что изменения в crypttab обновлены:

    cat /etc/crypttab
    clevis luks list -d /dev/nvme0n1p3

    Перезагрузите систему и проверьте, происходит ли автоматическая разблокировка, без запроса пароля от пользователя.

Заключение

Подводя итог, стоит отметить, что Ubuntu может сталкиваться с трудностями при использовании определенных инструментов из-за своих характерных особенностей и несовместимостей пакетов. В свете этого, использование clevis (вместо интеграции через dracut) для автоматической разблокировки с помощью TPM является более надежным решением для данного дистрибутива. Это решение упрощает управление и обеспечивает необходимую безопасность, рекомендованную для систем с конфиденциальными данными.

Ваши действия, описанные в примере, направлены на достижение максимально безопасной и столь же удобной среды работы с зашифрованными данными, и если всё настроено корректно, ваш LUKS должен разблокироваться автоматически благодаря TPM на каждый старт системы. Если возникнут проблемы, рекомендуется обратиться к исходным инструкциям или сообществам пользователей Ubuntu, чтобы обеспечить точное соблюдение всех шагов и комплектующих версий ПО.

Оцените материал
Добавить комментарий

Капча загружается...