В мире, где данные — это новая нефть, а утечки информации подобны прорыву парового котла, защита дисков перестала быть опцией и стала необходимостью. Но что если вместо того, чтобы таскать с собой ключи от всех дверей, вы доверите их надежному латунному сейфу, встроенному прямо в материнскую плату? Добро пожаловать в мир TPM 2.0 и systemd-cryptenroll — технологии, где шифрование встречается с аппаратной магией.
Что такое TPM и зачем он нам?
TPM (Trusted Platform Module) — это криптографический сопроцессор, маленький латунный механизм в сердце вашей системы, который хранит ключи шифрования в неприступной крепости. В отличие от программных решений, где ключи лежат на диске (как ценный груз на открытой палубе), TPM хранит их внутри себя, защищенными физически.
Преимущества связки LUKS + TPM 2.0:
- Автоматическая разблокировка при загрузке — система сама “узнает” свой диск
- Защита от извлечения диска — без оригинального TPM данные не прочитать
- Аппаратное хранение ключей — они никогда не покидают пределы чипа
- Интеграция с systemd — нативная поддержка в современных дистрибутивах

Подготовка котельной: проверка требований
Прежде чем запускать пар, убедимся, что наша машина оснащена всем необходимым.
Проверка наличия TPM 2.0
# Проверяем наличие устройства TPM
ls -la /dev/tpm*
# Узнаем версию TPM
sudo dmesg | grep -i tpm
# Используем tpm2-tools для детальной информации
sudo tpm2_pcrreadЕсли команда ls /dev/tpm* возвращает пустоту, возможно, TPM отключен в BIOS/UEFI. Зайдите в настройки firmware и найдите раздел Security → TPM Device → включите TPM 2.0 (не 1.2!).

Установка необходимого инструментария
Нам понадобятся следующие пакеты:
# Для Debian/Ubuntu
sudo apt update
sudo apt install tpm2-tools tpm2-abrmd clevis clevis-luks clevis-tpm2
# Для Fedora/RHEL
sudo dnf install tpm2-tools tpm2-abrmd clevis clevis-luks clevis-tpm2
# Для Arch Linux
sudo pacman -S tpm2-tools tpm2-abrmd clevis clevis-luks clevis-tpm2⚡ Важно
Убедитесь, что ваше ядро Linux версии 5.10 или выше — именно с этой версии systemd-cryptenroll получил полноценную поддержку TPM 2.0.
uname -rСоздание нового зашифрованного раздела с TPM
Представьте, что мы строим новый бронированный отсек для ваших данных. Начнем с создания LUKS-контейнера, привязанного к TPM.
Шаг 1: Подготовка диска
# Определяем целевой диск (будьте осторожны! данные будут уничтожены)
lsblk
# Создаем раздел (если нужно)
sudo fdisk /dev/sdX
# Очищаем существующие заголовки
sudo wipefs /dev/sdX1Шаг 2: Создание LUKS-контейнера с TPM
# Создаем LUKS2 контейнер
sudo cryptsetup luksFormat --type luks2 /dev/sdX1
# Добавляем ключ через TPM с использованием clevis
sudo clevis luks bind -d /dev/sdX1 tpm2 '{"pcr_bank": "sha256", "pcr_ids": "7"}'При выполнении команды система попросит:
- Ввести существующий пароль LUKS (для авторизации)
- Подтвердить операцию (YES)

Шаг 3: Проверка конфигурации
# Проверяем слоты LUKS
sudo cryptsetup luksDump /dev/sdX1
# Проверяем привязку clevis
sudo clevis luks report -d /dev/sdX1Вы должны увидеть новый слот с типом clevis и указанием tpm2.
systemd-cryptenroll: дирижер парового оркестра
systemd-cryptenroll — это наш главный инженер, который управляет всеми ключами и слотами шифрования. Эта утилита появилась в systemd v248 и стала стандартом де-факто для управления LUKS.
Основные возможности:
- Добавление/удаление ключей шифрования
- Привязка к TPM 2.0
- Настройка восстановления (recovery key)
- Управление слотами LUKS
Добавление TPM-ключа к существующему диску
Если у вас уже есть зашифрованный диск, и вы хотите добавить аппаратную разблокировку:
# Проверяем текущие слоты
sudo systemd-cryptenroll --list /dev/sdX1
# Добавляем TPM 2.0 как метод разблокировки
sudo systemd-cryptenroll --tpm2-device=auto /dev/sdX1Разбор параметров:
--tpm2-device=auto— автоматически выбирает доступный TPM- Можно указать конкретное устройство:
--tpm2-device=/dev/tpm0

Настройка PCR (Platform Configuration Registers)
PCR — это регистры состояния системы, которые TPM использует для проверки целостности загрузки. Если кто-то изменит загрузчик или ядро, значения PCR изменятся, и TPM откажется выдавать ключ.
# Добавляем TPM с проверкой конкретных PCR
sudo systemd-cryptenroll \
--tpm2-device=auto \
--tpm2-pcrs=0+1+2+3+7 \
/dev/sdX1Какие PCR использовать:
- PCR 0-7 — измеряют компоненты загрузки (BIOS, загрузчик, ядро, initrd)
- PCR 7 — Secure Boot политики (наиболее важный для защиты от изменений загрузки)
⚡ Важно
Если вы обновите ядро или загрузчик, система может не загрузиться автоматически! В этом случае придется использовать резервный пароль.
Создание резервного ключа восстановления
Никогда не полагайтесь только на TPM! Создайте backup-ключ:
# Создаем recovery key
sudo systemd-cryptenroll \
--recovery-key \
--recovery-key-file=/root/recovery-key.txt \
/dev/sdX1
# Устанавливаем строгие права на файл
chmod 400 /root/recovery-key.txtНастройка автоматической разблокировки при загрузке
Теперь самое интересное — заставим систему автоматически разблокировать диск при старте, используя TPM.
Модификация /etc/crypttab
Откройте файл конфигурации:
sudo nano /etc/crypttabДобавьте или измените строку для вашего диска:
# <target> <source device> <key file> <options>
cryptroot UUID=xxxx-xxxx-xxxx none tpm2-device=auto,luksЗамените UUID=xxxx-xxxx-xxxx на реальный UUID вашего зашифрованного раздела (узнать через blkid).
Обновление initramfs
После изменения crypttab необходимо пересобрать initramfs:
# Для Debian/Ubuntu
sudo update-initramfs -u
# Для Fedora/RHEL
sudo dracut -f
# Для Arch Linux
sudo mkinitcpio -PТестирование и отладка
Прежде чем перезагружаться, протестируем конфигурацию.
Ручная проверка разблокировки
# Закрываем контейнер (если открыт)
sudo cryptsetup close cryptroot
# Пробуем открыть с TPM
sudo systemd-cryptsetup attach cryptroot /dev/sdX1 none tpm2-device=auto
# Если успешно — проверяем
lsblk | grep cryptrootПросмотр логов TPM
Если что-то пошло не так, ищите ответы в логах:
# Логи systemd
journalctl -b | grep -i tpm
# Логи clevis
journalctl -b | grep -i clevis
# Детальная информация о TPM
sudo tpm2_getcap handles-pcr
Сценарии использования и лучшие практики
Сценарий 1: Ноутбук с полной защитой
Для ноутбука, который может быть украден, используйте:
- TPM + PIN (двухфакторная аутентификация)
- Шифрование всего диска
- Recovery key на внешнем носителе
sudo systemd-cryptenroll \
--tpm2-device=auto \
--tpm2-with-pin=yes \
/dev/sdX1Теперь при загрузке потребуется и наличие TPM, и ввод PIN-кода.
Сценарий 2: Сервер в дата-центре
Для сервера, где важна автоматическая перезагрузка:
- Только TPM (без дополнительных факторов)
- PCR 7 для защиты от изменений загрузки
- Удаленное хранение recovery key
Сценарий 3: Защита от атак холодной перезагрузки
Используйте все PCR (0-7) для максимальной защиты:
sudo systemd-cryptenroll \
--tpm2-device=auto \
--tpm2-pcrs=0+1+2+3+4+5+6+7 \
/dev/sdX1⚡ Важно
При таком подходе любое обновление ядра потребует ручной разблокировки с recovery key!
Управление и обслуживание
Просмотр текущей конфигурации
# Список всех слотов
sudo systemd-cryptenroll --list /dev/sdX1
# Информация о TPM
sudo tpm2_readpublic -c primary
# Проверка привязки clevis
sudo clevis luks report -d /dev/sdX1Удаление TPM-ключа
Если нужно убрать TPM-аутентификацию:
# Находим номер слота TPM
sudo systemd-cryptenroll --list /dev/sdX1
# Удаляем слот (замените 2 на номер слота)
sudo systemd-cryptenroll --wipe-slot=2 /dev/sdX1Обновление PCR после обновления ядра
Если система перестала автоматически загружаться после обновления:
# Загружаемся с recovery key
# Обновляем PCR в TPM
sudo systemd-cryptenroll \
--tpm2-device=auto \
--tpm2-pcrs=0+1+2+3+7 \
--reencrypt \
/dev/sdX1
Безопасность и ограничения
Что защищает TPM:
✅ Кража диска — без TPM данные не прочитать
✅ Изменение загрузчика — PCR обнаружат подмену
✅ Атаки холодной перезагрузки — ключи в TPM, не в RAM
✅ Несанкционированный доступ — аппаратная защита
Что НЕ защищает TPM:
❌ Работающую систему — если диск уже разблокирован
❌ Социальную инженерию — пароль могут выманить
❌ Физический доступ к включенной машине
❌ Уязвимости в ядре или загрузчике
Важные предупреждения:
- Всегда имейте recovery key! TPM может выйти из строя
- Тестируйте загрузку после каждой настройки
- Храните recovery key отдельно от компьютера
- Документируйте изменения PCR при обновлении системы
Заключение
TPM 2.0 в связке с systemd-cryptenroll — это как надежный паровой замок на двери вашего хранилища данных. Он не требует постоянного внимания, работает автоматически и защищает от большинства угроз. Но помните: даже самый совершенный механизм бесполезен без резервного ключа и здравой осторожности.
Настройте TPM сегодня, и ваш диск будет защищен так же надежно, как сокровища в бронированном сейфе викторианской эпохи.
⚙️ Машинное отделение ROADIT благодарит за прочтение.
Больше команд, шпаргалок и обзоров — на roadit.ru и в нашем Телеграф-канале.
📋 Все команды