Добавить в корзинуПозвонить
Найти в Дзене

TPM 2.0 & Secure boot для Linux дистрибутивов

Чтобы Linux работал с TPM 2.0 и Secure Boot, нужно решить две разные, но связанные задачи. Вот что стоит проверить:
Дистрибутивы с поддержкой «из коробки»
Большинство современных дистрибутивов уже имеют подписанные загрузчики и работают с включённым Secure Boot без дополнительных действий:
- Fedora / RHEL / CentOS Stream
Оглавление

Чтобы 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`