Чтобы Linux работал с TPM 2.0 и Secure Boot, нужно решить две разные, но связанные задачи. Вот что стоит проверить:
1. Secure Boot
Дистрибутивы с поддержкой «из коробки»
Большинство современных дистрибутивов уже имеют подписанные загрузчики и работают с включённым Secure Boot без дополнительных действий:
- Fedora / RHEL / CentOS Stream
- Ubuntu / Debian (начиная с 10+)
- openSUSE / SLE
- Arch Linux (через пакет `shim-signed` в репозиториях)
Если Secure Boot не работает
Если система не загружается с ошибкой Secure Boot:
1. Временно отключите Secure Boot в UEFI.
2. Установите систему.
3. Установите пакет `shim-signed` (или аналогичный для вашего дистрибутива).
4. Включите Secure Boot обратно.
Самостоятельная подпись (для кастомных ядер)
Если вы компилируете своё ядро или используете неподписанный загрузчик:
# Создать ключи
mkdir ~/secureboot_keys && cd ~/secureboot_keys
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -nodes -subj "/CN=My Secure Boot Key/"
# Подписать ядро/загрузчик
sudo sbsign --key MOK.priv --cert MOK.der --output /boot/vmlinuz-signed /boot/vmlinuz-$(uname -r)
# Зарегистрировать ключ в UEFI (MOK)
sudo mokutil --import MOK.der
# Перезагрузитесь и подтвердите добавление ключа в синем меню MOK Manager
2. TPM 2.0
TPM 2.0 в Linux чаще всего используется для:
- Автоматической разблокировки зашифрованного диска (LUKS) без ввода пароля
- Измерений загрузки (measured boot)
- Хранения ключей шифрования
Проверка наличия TPM 2.0
dmesg | grep -i tpm
# или
cat /sys/class/tpm/tpm0/tpm_version_major # должно вывести 2
Автоматическая разблокировка LUKS через TPM 2.0
Вариант A: systemd-cryptenroll (современный и простой)
Работает в Fedora, Ubuntu 22.04+, Debian 12+, Arch с systemd 248+.
# Установить пакет (если не установлен)
sudo apt install systemd-cryptsetup # Debian/Ubuntu
sudo dnf install systemd-udev # Fedora
# Зарегистрировать TPM в LUKS
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+2+7+12 /dev/nvme0n1p2
# PCR 0 - firmware, 2 - bootloader, 7 - Secure Boot state, 12 - kernel command line
# Обновить /etc/crypttab, добавив опцию tpm2-device=auto
sudo nano /etc/crypttab
# Пример:
# luks-xxx UUID=xxx none tpm2-device=auto
Вариант B: Clevis (более гибкий)
# Установка
sudo apt install clevis clevis-luks clevis-dracut # Debian/Ubuntu
sudo dnf install clevis clevis-luks clevis-dracut # Fedora
# Привязка к TPM 2.0
sudo clevis luks bind -d /dev/nvme0n1p2 tpm2 '{"pcr_ids":"0,2,7,12"}'
# Обновить initramfs
sudo update-initramfs -u -k all # Debian/Ubuntu
sudo dracut -f # Fedora/RHEL
Важно про PCR (Platform Configuration Registers)
Если обновите BIOS, загрузчик или ядро — TPM перестанет разблокировать диск, потому что изменится хеш измерений. Поэтому:
- Используйте `pcr_ids` с осторожностью
- PCR 7 (Secure Boot) обычно безопасен — он меняется только при отключении Secure Boot
- Для обновления ядра можно ограничиться `pcr_ids=0,2,7`
3. Полная интеграция: Secure Boot + TPM 2.0 + LUKS
Fedora (самый простой путь)
Fedora имеет лучшую интеграцию:
1. Установите Fedora с включённым Secure Boot — всё заработает сразу.
2. При установке с шифрованием диска выберите «Automatic» — система автоматически настроит LUKS + TPM 2.0 (начиная с Fedora 36+).
3. Если шифрование уже настроено:
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 /dev/sda2
sudo grub2-editenv - unset menu_auto_hide # опционально
Ubuntu / Debian
1. Установите систему с LUKS-шифрованием.
2. Убедитесь, что Secure Boot включён и работает (`mokutil --sb-state`).
3. Настройте `systemd-cryptenroll` как описано выше.
4. Обновите initramfs:
sudo update-initramfs -u -k all
Arch Linux
# Установите необходимые пакеты
sudo pacman -S tpm2-tss systemd
# Настройте LUKS + TPM
sudo systemd-cryptenroll --tpm2-device=auto /dev/nvme0n1p2
# В /etc/mkinitcpio.conf добавите 'sd-encrypt' в HOOKS перед 'filesystems'
# HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole sd-encrypt filesystems)
sudo mkinitcpio -P
4. Частые проблемы
Проблема Решение
«Secure Boot violation» Убедитесь, что установлен `shim-signed`. Для кастомных ядер — подпишите MOK.
TPM не виден в системе Включите в UEFI: Security Device Support + AMD fTPM / Intel PTT.
После обновления BIOS система не грузится TPM измерения изменились. Загрузитесь с Live USB, расшифруйте диск вручную и перенастройте `cryptenroll`.
«No TPM2 device found» Проверьте, что модуль `tpm_crb` или `tpm_tis` загружен: `lsmod \| grep tpm`