Блог "Дети ОИТа"
/поиск

Автоматизация разблокировки LUKS2 с TPM2 и Clevis/Tang: пошаговое руководство

Пошаговое руководство по настройке автоматической разблокировки зашифрованных томов LUKS2 с использованием TPM2.0 и сетевого сервиса Tang через фреймворк Clevis.

Введение

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

Комбинация LUKS2 + TPM2 + Clevis/Tang решает эту проблему: ключ шифрования хранится в защищённом аппаратном модуле TPM2, а сетевой сервис Tang предоставляет доступ к дополнительным метаданным для разблокировки. При этом Secure Boot гарантирует целостность загрузочной цепочки.

Архитектура решения

  • LUKS2 — современный формат шифрования с поддержкой токенов
  • TPM2 — аппаратный модуль для безопасного хранения ключей
  • Clevis — фреймворк для автоматической разблокировки
  • Tang — сетевой сервис, предоставляющий данные для Clevis
  • Secure Boot — защита загрузочной цепочки

Предварительные требования

  • Дистрибутив: RHEL 9, Rocky Linux 9, AlmaLinux 9 или Fedora 38+
  • Аппаратный TPM2.0 (включён в BIOS/UEFI)
  • Secure Boot включён (опционально, но рекомендуется)
  • Сетевой доступ к серверу Tang

Шаг 1. Подготовка системы

# Установите необходимые пакеты
dnf install -y clevis clevis-luks clevis-tpm2 tang

# Включите и запустите Tang
systemctl enable --now tangd.socket

# Проверьте статус TPM2
tpm2_getcap properties-variable | grep TPM2_PT_MANUFACTURER

Шаг 2. Создание и настройка LUKS2

# Если раздел ещё не зашифрован
cryptsetup luksFormat --type luks2 /dev/sdaX

# Откройте том
cryptsetup open /dev/sdaX cryptdata

# Проверьте токены LUKS2
cryptsetup luksDump /dev/sdaX | grep -A 5 "tokens"

Шаг 3. Привязка с помощью Clevis и TPM2

# Привязка через TPM2
clevis bind luks2 -d /dev/sdaX tpm2 '{"pcr_ids": "7,11"}'

# Привязка через Tang (сетевой сервис)
clevis bind luks2 -d /dev/sdaX tang '{"url": "http://tang-server:7500"}'

# Можно комбинировать: сначала TPM2, затем Tang как резерв
clevis bind luks2 -d /dev/sdaX tpm2 '{"pcr_ids": "7,11"}'
clevis bind luks2 -d /dev/sdaX tang '{"url": "http://tang-server:7500"}'

Шаг 4. Настройка PCR-политик

PCR (Platform Configuration Registers) фиксируют состояние системы. Для стабильной работы:

  • PCR 0: прошивка
  • PCR 7: Secure Boot policy
  • PCR 11: загрузчик и ядро
# Проверьте текущие значения PCR
tpm2_pcrread sha256:0,7,11

# Если используете кастомные ядра, добавьте PCR 14
tpm2_pcrread sha256:14

ШШаг 5. Настройка dracut

Для автоматической разблокировки при загрузке:

# Добавьте модули в dracut
echo 'add_dracutmodules+=" clevis tpm2 "' >> /etc/dracut.conf.d/99-clevis.conf

# Пересоберите initramfs
dracut -f

Шаг 6. Проверка

# Проверьте привязки
clevis luks list -d /dev/sdaX

# Тестовая разблокировка
clevis luks unlock -d /dev/sdaX -n cryptdata

# Перезагрузка для проверки автоматической разблокировки
reboot

Диагностика проблем

Проблема 1: TPM2 не доступен

# Проверьте устройство
tpm2_getrandom 8

# Проверьте драйверы
lsmod | grep tpm

# Проверьте BIOS/UEFI

Проблема 2: PCR-политики не совпадают

# После обновления ядра PCR меняются
tpm2_pcrread sha256:7,11

# Решение: обновите привязку или используйте более стабильные PCR

Проблема 3: Tang недоступен

# Проверьте сетевую доступность
curl -f http://tang-server:7500/adv

# Проверьте логи
tail -f /var/log/tangd.log

Хештеги

#LUKS2 #TPM2 #Clevis #Tang #SecureBoot #шифрование #автоматизация #безопасность #Linux

Заключение

Комбинация LUKS2+TPM2+Clevis/Tang обеспечивает баланс между безопасностью и удобством: данные защищены аппаратно, разблокировка автоматизирована, а Secure Boot гарантирует целостность системы. Решение масштабируемо и подходит для корпоративных сред с сотнями серверов.