Автоматизация разблокировки 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 гарантирует целостность системы. Решение масштабируемо и подходит для корпоративных сред с сотнями серверов.