Автоматическая разблокировка LUKS через TPM 2.0 и systemd-cryptenroll: безопасная настройка | AdminWiki

Автоматическая разблокировка LUKS через TPM 2.0 и systemd-cryptenroll: безопасная настройка

28 августа 2026 11 мин. чтения
Содержание статьи

Автоматическая разблокировка LUKS2 через TPM 2.0 позволяет открыть зашифрованный том при загрузке Linux без ручного ввода пароля. Утилита systemd-cryptenroll добавляет в заголовок LUKS2 отдельный TPM2-токен, а systemd-cryptsetup использует его во время старта системы.

Исходный пароль LUKS при этом сохраняется. Перед настройкой нужно создать recovery key, проверить UEFI, TPM 2.0 и версию systemd, а после enrollment обновить initramfs и выполнить тестовую перезагрузку с доступом к консоли.

TPM выдает ключ только при выполнении заданных условий загрузки. При привязке к PCR 7 изменение состояния Secure Boot или ключей UEFI может отключить автоматическое открытие тома. Поэтому TPM не должен быть единственным способом доступа к данным.

Как работает авторазблокировка LUKS2 через TPM 2.0

Что именно делает systemd-cryptenroll

LUKS2 хранит несколько способов разблокировки в keyslot. Каждый keyslot содержит ключ, с помощью которого можно получить основной ключ шифрования тома. Пароль, recovery key и TPM2-токен могут занимать разные слоты и работать независимо.

systemd-cryptenroll не помещает открытый ключ диска в TPM. Утилита создает дополнительный способ разблокировки LUKS2 и связывает его с TPM. TPM защищает секрет от выдачи, пока измерения загрузочной цепочки не соответствуют условиям enrollment.

Проверить доступные параметры нужно до изменения заголовка:

systemd-cryptenroll --help
systemd --version
cryptsetup --version

Поддержка TPM2 и PCR зависит от версии systemd, загрузчика, ядра, cryptsetup и дистрибутива. Команды ниже требуют адаптации пути к устройству и проверки синтаксиса в конкретной системе.

Какие угрозы закрывает и не закрывает TPM-привязка

При выключенном компьютере LUKS продолжает защищать данные, даже если злоумышленник извлечет SSD и подключит его к другой системе. TPM-привязка добавляет проверку состояния платформы перед выдачей ключа.

Такая схема не защищает уже загруженную ОС от вредоносного процесса с правами root, компрометации учетной записи администратора или физического доступа к разблокированному компьютеру. Автоматическая разблокировка без PIN не требует секрета от пользователя, поэтому кража всего устройства с сохранением доверенной загрузочной цепочки остается отдельным риском.

Для рабочих станций с чувствительными данными подходит TPM2 с PIN. Для серверов без оператора у консоли чаще выбирают автоматическую разблокировку, recovery key и строгий контроль Secure Boot.

Требования и предварительные проверки перед настройкой LUKS2

Проверка версии LUKS и наличия TPM 2.0

Сначала определите LUKS-раздел. Команда lsblk показывает физическое устройство, раздел, mapper-имя и файловую систему:

lsblk -o NAME,PATH,UUID,FSTYPE,SIZE,MOUNTPOINTS
findmnt /
cat /etc/crypttab

Проверьте заголовок контейнера:

sudo cryptsetup luksDump /dev/nvme0n1p3

Вместо /dev/nvme0n1p3 подставьте свой LUKS-раздел. В выводе должна быть строка Version: 2. Сверьте UUID:

sudo cryptsetup luksUUID /dev/nvme0n1p3
sudo blkid /dev/nvme0n1p3

Проверьте TPM через systemd:

sudo systemd-cryptenroll --tpm2-device=list

При необходимости можно проверить устройство через tpm2-tools:

ls -l /dev/tpmrm0 /dev/tpm0
sudo tpm2_getcap properties-fixed

Для загрузки с измерениями UEFI проверьте наличие EFI-переменных:

test -d /sys/firmware/efi && echo UEFI || echo BIOS
sudo efibootmgr -v

Результат UEFI, доступный /dev/tpmrm0 и LUKS2 создают базовые условия для настройки. Если система загружена в Legacy BIOS, PCR-политика и автоматический запуск systemd могут работать иначе.

Определение устройства и активных keyslot LUKS

Не путайте физический диск, раздел, mapper-устройство и файловую систему. В примере ниже шифрованный раздел, /dev/nvme0n1p3, открывается под именем cryptroot:

lsblk -f
sudo cryptsetup status cryptroot
sudo cryptsetup luksDump /dev/nvme0n1p3

В cryptsetup luksDump проверьте секции Keyslots и Tokens. Не удаляйте активный парольный слот, пока TPM-авторазблокировка не прошла несколько перезагрузок.

Резервное копирование и план отката

До enrollment выполните резервную копию важных данных и сохраните исходный пароль LUKS за пределами сервера. Подготовьте live-среду или физическую консоль, особенно если TPM открывает корневой том.

План отката должен содержать четыре действия:

  1. Разблокировать том исходным паролем или recovery key.
  2. Вернуть рабочую строку в /etc/crypttab.
  3. Пересобрать initramfs.
  4. Удалить TPM2-токен только после проверки резервного доступа.

Для отдельного диска данных риск ниже: ошибка обычно не блокирует запуск ОС. Для root, swap и тома с критичными сервисами потребуется консоль восстановления.

Резервный ключ и дополнительные способы восстановления

Создание recovery key для LUKS2

Создайте независимый recovery key до добавления TPM2-токена:

sudo systemd-cryptenroll --recovery-key /dev/nvme0n1p3

Утилита запросит существующий способ разблокировки и выведет recovery key. Сохраните его в менеджере секретов или другом защищенном хранилище. Единственная копия на этом же зашифрованном диске бесполезна при недоступности тома.

Если версия systemd не поддерживает нужный режим, можно добавить отдельный ключ через cryptsetup:

sudo cryptsetup luksAddKey /dev/nvme0n1p3

В этом случае новый ключ нужно сгенерировать и передать безопасным способом. Не вводите секреты в командной строке, если их могут увидеть история shell или список процессов.

Как проверить и хранить резервный ключ

Сведения о токенах и слотах можно проверить так:

sudo systemd-cryptenroll /dev/nvme0n1p3
sudo cryptsetup luksDump /dev/nvme0n1p3

Проверку recovery key выполняйте на тестовой перезагрузке или в live-среде, где можно вручную открыть том. Не удаляйте исходный пароль до успешной проверки.

Храните минимум две независимые копии: одну в корпоративном хранилище секретов с разграничением доступа, вторую в офлайн-хранилище для аварийного восстановления. В документации фиксируйте ответственных лиц, но не публикуйте сам ключ в wiki, тикетах или системах мониторинга.

Способ доступаГде хранится секретЗависимость от TPMОсновное применение
Пароль LUKSУ администратора или в защищенном хранилищеНетРучная разблокировка и аварийный доступ
Recovery keyОтдельно от сервера, минимум в двух копияхНетВосстановление после сбоя платформы
TPM2-токенВ заголовке LUKS2 и защищенном TPMДаАвтоматическая разблокировка при старте
TPM2 с PINТокен в TPM, PIN у оператораДаРабочие станции и системы с физическим риском

Привязка LUKS к TPM 2.0 через systemd-cryptenroll

Базовая регистрация TPM2 без жесткой привязки к PCR

Начните с минимального сценария. Он помогает проверить совместимость TPM, systemd и initramfs до добавления PCR-политики:

sudo systemd-cryptenroll --tpm2-device=auto /dev/nvme0n1p3

Утилита запросит существующий парольный способ доступа. Команда добавляет TPM2-токен, сохраняя прежние keyslot. На сервере с несколькими LUKS-разделами указывайте каждый раздел отдельно и проверяйте путь перед запуском.

Проверка добавленного TPM2-токена

sudo systemd-cryptenroll /dev/nvme0n1p3
sudo cryptsetup luksDump /dev/nvme0n1p3

В выводе должны присутствовать сведения о TPM2-токене. До перезагрузки сохраните UUID раздела, версию systemd, содержимое crypttab и выбранную PCR-политику.

Выбор PCR для безопасной привязки к загрузке

Роль PCR 7 и Secure Boot

PCR 7 отражает состояние Secure Boot и связанные с ним данные доверия, включая ключи и базы UEFI. При выключении Secure Boot, смене ключей платформы или изменении политики измеренное состояние может измениться.

В такой ситуации TPM не выдаст ключ по старой политике. Это штатная защита, а не повреждение LUKS. Том открывают recovery key, после чего оценивают необходимость нового enrollment.

Роль PCR 11 и измерений systemd-boot

PCR 11 используют для привязки к измерениям компонентов systemd-загрузки. Такая политика сильнее связывает разблокировку с UKI, kernel и конфигурацией загрузчика.

Обновление ядра или UKI может изменить измерения. Если процесс обновления не предусматривает новый enrollment, сервер потребует recovery key при следующем старте.

Практические варианты политики PCR

Выбор PCR должен соответствовать процессу обновлений. Чем больше компонентов участвует в политике, тем уже окно автоматической разблокировки и тем чаще нужен документированный recovery-процесс.

table_placeholder

Регистрация TPM2 с выбранными PCR

После успешной проверки базового TPM2-сценария можно добавить PCR 7:

sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/nvme0n1p3

Для более строгой связи с измерениями systemd используют комбинацию, например:

sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7+11 /dev/nvme0n1p3

Перед применением проверьте поддержку параметров:

systemd-cryptenroll --help | grep -E 'tpm2|pcr'

Список PCR нельзя копировать с другой машины. Загрузчик, ключи Secure Boot, версия systemd и политика обновлений должны совпадать с вашей системой.

Настройка crypttab для авторазблокировки диска LUKS при загрузке

Пример строки /etc/crypttab для TPM2

Для mapper-устройства cryptdata с LUKS-разделом UUID используйте шаблон:

cryptdata UUID=123e4567-e89b-12d3-a456-426614174000 - tpm2-device=auto,x-systemd.device-timeout=30s

Замените UUID на значение, полученное командой cryptsetup luksUUID. Символ - обозначает отсутствие файла с обычным ключом. Параметр tpm2-device=auto разрешает systemd искать доступный TPM2-токен.

x-systemd.device-timeout=30s ограничивает ожидание устройства. Параметр nofail применяйте к дополнительным данным только после оценки последствий: система сможет продолжить загрузку без тома, а сервисы могут получить пустой каталог.

Обновление initramfs после изменения crypttab

Изменение /etc/crypttab не всегда попадает в уже собранную раннюю загрузочную среду. После правки выполните команду своего дистрибутива:

sudo update-initramfs -u
sudo dracut -f

На системах Debian и Ubuntu обычно используют update-initramfs, на RHEL-подобных системах, Fedora и совместимых окружениях, dracut. После сборки проверьте отсутствие ошибок в выводе и наличие конфигурации в initramfs.

Особенности корневого и дополнительного LUKS-тома

Для root-тома crypttab и TPM-параметры нужны в initramfs. Ошибка UUID или токена может остановить загрузку до появления обычного пользовательского пространства.

Дополнительный том данных открывается позже через systemd. Для него допустим более длинный timeout и, при согласованной политике эксплуатации, nofail. Swap требует отдельного решения: его автоматическая разблокировка снижает риск хранения незашифрованных страниц памяти, но отказ TPM может повлиять на запуск системы.

Параметры, которые понимает конкретная версия systemd-cryptsetup, проверяйте локально через документацию пакета и systemd-cryptenroll --help. Не добавляйте неизвестные опции в production crypttab.

Проверка загрузки и диагностика проблем

Проверка до перезагрузки

sudo cryptsetup luksUUID /dev/nvme0n1p3
sudo cryptsetup luksDump /dev/nvme0n1p3
sudo systemd-cryptenroll /dev/nvme0n1p3
sudo systemctl daemon-reload
sudo update-initramfs -u

На системах с dracut замените последнюю команду на sudo dracut -f. Проверьте синтаксис crypttab и убедитесь, что recovery key доступен вне зашифрованного тома.

Что проверить после успешной загрузки

findmnt /
lsblk -f
systemctl status systemd-cryptsetup@cryptroot.service
journalctl -b -u systemd-cryptsetup@cryptroot.service
journalctl -b | grep -iE 'crypt|tpm|pcr'

Имя unit зависит от mapper-устройства. Для cryptdata используйте systemd-cryptsetup@cryptdata.service.

Отсутствие запроса пароля еще не доказывает использование TPM: разблокировку мог выполнить другой токен. Сопоставьте журналы systemd с конфигурацией токена и проверьте, что тест проходил после полного выключения, а не только после перезапуска отдельных сервисов.

Ошибки TPM, PCR и crypttab

СимптомВероятная причинаКоманда проверкиБезопасное исправление
TPM не найденОтключен firmware TPM или отсутствует доступ к /dev/tpmrm0ls -l /dev/tpmrm0; systemd-cryptenroll --tpm2-device=listПроверить настройки UEFI и загрузку в UEFI, затем сохранить ручной способ доступа
Запрос пароля после изменения Secure BootНе совпал PCR 7journalctl -b -u systemd-cryptsetup@cryptroot.serviceВвести recovery key, проверить Secure Boot и повторить enrollment с новой политикой
Том не найден при загрузкеОшибочный UUID или имя mapperblkid; cryptsetup luksUUID /dev/nvme0n1p3Исправить crypttab и пересобрать initramfs
Параметр crypttab игнорируетсяВерсия systemd не поддерживает опцию или ошибочна строкаsystemd-cryptenroll --help; systemd-analyze verify /etc/crypttabУбрать неподдерживаемую опцию, проверить синтаксис и повторить сборку initramfs
После enrollment загрузка требует парольТокен добавлен, но crypttab или initramfs не обновленыsystemd-cryptenroll /dev/nvme0n1p3; lsinitramfs /boot/initrd.img-$(uname -r) | grep crypttabПроверить crypttab, обновить initramfs и повторить тест с консолью

Восстановление после изменения Secure Boot и обновлений

Если после изменения Secure Boot TPM не разблокирует LUKS

Не пытайтесь извлекать ключ из TPM вручную. TPM должен отказать при несовпадении политики.

  1. Введите recovery key или исходный пароль.
  2. Проверьте состояние Secure Boot и список ключей UEFI.
  3. Изучите журнал systemd-cryptsetup.
  4. Сравните текущие условия загрузки с PCR-политикой токена.
  5. После подтверждения корректной платформы добавьте новый TPM2-токен.

Старый токен удаляйте только после проверки нового enrollment и повторной загрузки.

Повторная регистрация TPM после обновления платформы

Узнайте список токенов:

sudo systemd-cryptenroll /dev/nvme0n1p3

Удаляйте конкретный TPM2-токен по его идентификатору, который показывает вывод утилиты:

sudo systemd-cryptenroll --wipe-slot=tpm2 /dev/nvme0n1p3

Параметр --wipe-slot=tpm2 удаляет TPM2-способы, поэтому перед командой проверьте наличие recovery key и рабочего пароля. Затем выполните новый enrollment:

sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=7 /dev/nvme0n1p3

Если нужно удалить только конкретный слот, используйте идентификатор, поддерживаемый вашей версией systemd. Синтаксис проверьте через systemd-cryptenroll --help.

Сценарий аварийного восстановления

В live-среде сначала определите раздел и разблокируйте его recovery key:

sudo cryptsetup luksOpen /dev/nvme0n1p3 cryptroot
sudo cryptsetup status cryptroot
sudo mount /dev/mapper/cryptroot /mnt

Для root-системы дополнительно смонтируйте /boot и EFI-раздел, войдите в chroot, исправьте crypttab и пересоберите initramfs. Точные пути зависят от разметки диска.

При повреждении только загрузочной конфигурации сначала восстановите загрузчик и Secure Boot, затем проверьте PCR. При недоступном TPM оставьте ручную разблокировку активной и не удаляйте recovery key.

СекретВладелецПраваРасположениеОсновная угрозаМера защиты
Исходный пароль LUKSДежурная команда администраторовМинимальный доступ по ролямКорпоративное хранилище секретовКомпрометация учетной записиMFA, аудит выдачи, регулярная проверка доступа
Recovery keyВладелец системы и резервная командаДоступ по аварийной процедуреХранилище секретов и офлайн-копияПотеря ключа при отказе TPMДве независимые копии и тест восстановления
TPM2-токенСистема загрузкиАппаратная защита TPMЗаголовок LUKS2 и TPMИзменение Secure Boot или PCRДокументировать PCR и план повторного enrollment
Пароль TPM PINОператор рабочей станцииПерсональный PINНе хранить в конфигурацииПодбор при физическом доступеПолитика блокировки, уникальный PIN, контроль попыток

Меры безопасности и итоговый чек-лист

Когда использовать TPM2 с PIN

TPM2 без PIN подходит для unattended boot, когда сервер должен запуститься после перезагрузки без оператора. Доступ к физической консоли, UEFI и загрузочной цепочке при этом нужно ограничить.

TPM2 с PIN требует дополнительного секрета при запуске. Это снижает риск автоматического открытия диска после кражи устройства, но усложняет удаленный старт и аварийное обслуживание.

Что документировать для эксплуатации

Зафиксируйте:

  • UUID каждого LUKS-раздела и имя mapper-устройства.
  • Версии Linux, systemd и cryptsetup.
  • Состояние TPM 2.0, режим UEFI и состояние Secure Boot.
  • Выбранные PCR и причину их выбора.
  • Точную строку /etc/crypttab без секретов.
  • Расположение recovery key и порядок его выдачи.
  • Команды повторного enrollment и удаления TPM2-токена.
  • Ответственных за тест восстановления.

Для контроля платформы можно использовать отдельный [гайд по настройке BIOS Gigabyte, TPM 2.0 и Secure Boot](https://admin-wiki.ru/article/nastrojka-bios-gigabyte-dlya-tpm-secure-boot-i-virtualizatsii-vt-diommu-gajd-2026/). Общую модель защиты данных и место LUKS среди других схем шифрования разбирает [сравнение клиентского, серверного и гибридного шифрования](https://admin-wiki.ru/article/shifrovanie-dannyih-pri-peredache-i-hranenii-klientskoe-servernoe-i-gibridnyie-modeli-dlya-devops-i-adminov/).

Финальный чек-лист настройки

  • LUKS-раздел работает в формате LUKS2.
  • Система загружена в UEFI.
  • TPM 2.0 доступен как /dev/tpmrm0.
  • Исходный пароль и recovery key проверены.
  • TPM2-токен добавлен через systemd-cryptenroll.
  • Проверены активные keyslot и токены через cryptsetup luksDump.
  • В /etc/crypttab указан правильный UUID и tpm2-device=auto.
  • Initramfs пересобран после изменения crypttab.
  • Выполнена тестовая перезагрузка с доступной консолью.
  • Журналы systemd-cryptsetup подтверждают ожидаемый результат.
  • Документирован сценарий восстановления после изменения Secure Boot, прошивки или ядра.
Контрольная точкаОжидаемый результатКоманда или действиеКогда повторять
Формат контейнераLUKS2cryptsetup luksDump /dev/DEVICEПеред каждым enrollment
Доступность TPMНайден TPM2 и /dev/tpmrm0systemd-cryptenroll --tpm2-device=listПосле изменений UEFI и прошивки
ТокенTPM2-токен присутствуетsystemd-cryptenroll /dev/DEVICEПосле enrollment и обновлений
Конфигурация загрузкиКорректный UUID и TPM-параметрПроверка /etc/crypttabПосле изменения дисков или mapper-имен
InitramfsСодержит актуальную конфигурациюupdate-initramfs -u или dracut -fПосле каждого изменения crypttab
ВосстановлениеRecovery key открывает томКонтролируемый тест с консольюПеред эксплуатацией и по графику аудита

Автоматическая разблокировка LUKS2 через TPM 2.0 готова к эксплуатации, когда одновременно работают TPM2-токен, crypttab и initramfs, а резервный ключ проверен вне штатной загрузки. PCR-политику выбирайте по реальному жизненному циклу Secure Boot, загрузчика и ядра. Для систем с повышенным физическим риском добавляйте PIN TPM.

Поделиться:
Сохранить гайд? В закладки браузера