⚙️ Паровой сервер ROADIT

Аппаратное шифрование диска через TPM 2.0: Полный гайд по systemd-cryptenroll

В мире, где данные — это новая нефть, а утечки информации подобны прорыву парового котла, защита дисков перестала быть опцией и стала необходимостью. Но что если вместо того, чтобы таскать с собой ключи от всех дверей, вы доверите их надежному латунному сейфу, встроенному прямо в материнскую плату? Добро пожаловать в мир 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"}'

При выполнении команды система попросит:

  1. Ввести существующий пароль LUKS (для авторизации)
  2. Подтвердить операцию (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:

Работающую систему — если диск уже разблокирован
Социальную инженерию — пароль могут выманить
Физический доступ к включенной машине
Уязвимости в ядре или загрузчике

Важные предупреждения:

  1. Всегда имейте recovery key! TPM может выйти из строя
  2. Тестируйте загрузку после каждой настройки
  3. Храните recovery key отдельно от компьютера
  4. Документируйте изменения PCR при обновлении системы

Заключение

TPM 2.0 в связке с systemd-cryptenroll — это как надежный паровой замок на двери вашего хранилища данных. Он не требует постоянного внимания, работает автоматически и защищает от большинства угроз. Но помните: даже самый совершенный механизм бесполезен без резервного ключа и здравой осторожности.

Настройте TPM сегодня, и ваш диск будет защищен так же надежно, как сокровища в бронированном сейфе викторианской эпохи.



⚙️ Машинное отделение ROADIT благодарит за прочтение.
Больше команд, шпаргалок и обзоров — на roadit.ru и в нашем Телеграф-канале.
📋 Все команды

Оставьте комментарий