Автоматическая разблокировка 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 открывает корневой том.
План отката должен содержать четыре действия:
- Разблокировать том исходным паролем или recovery key.
- Вернуть рабочую строку в
/etc/crypttab. - Пересобрать initramfs.
- Удалить 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/tpmrm0 | ls -l /dev/tpmrm0; systemd-cryptenroll --tpm2-device=list | Проверить настройки UEFI и загрузку в UEFI, затем сохранить ручной способ доступа |
| Запрос пароля после изменения Secure Boot | Не совпал PCR 7 | journalctl -b -u systemd-cryptsetup@cryptroot.service | Ввести recovery key, проверить Secure Boot и повторить enrollment с новой политикой |
| Том не найден при загрузке | Ошибочный UUID или имя mapper | blkid; 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 должен отказать при несовпадении политики.
- Введите recovery key или исходный пароль.
- Проверьте состояние Secure Boot и список ключей UEFI.
- Изучите журнал
systemd-cryptsetup. - Сравните текущие условия загрузки с PCR-политикой токена.
- После подтверждения корректной платформы добавьте новый 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, прошивки или ядра.
| Контрольная точка | Ожидаемый результат | Команда или действие | Когда повторять |
|---|---|---|---|
| Формат контейнера | LUKS2 | cryptsetup luksDump /dev/DEVICE | Перед каждым enrollment |
| Доступность TPM | Найден TPM2 и /dev/tpmrm0 | systemd-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.