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

LUKS + LVM на Linux: полное руководство по настройке и восстановлению

Введение

Шифрование дисков с помощью LUKS (Linux Unified Key Setup) в связке с LVM (Logical Volume Manager) — стандарт де-факто для защиты данных на серверах и рабочих станциях. В этом руководстве мы пройдём путь от чистой установки до процедур восстановления.

Архитектура

  • LUKS — уровень блочного шифрования (dm-crypt). Обеспечивает конфиденциальность данных на диске.
  • LVM — уровень логических томов. Даёт гибкость: ресайз, снапшоты, миграция.
  • Типичная цепочка: физический диск → PV (Physical Volume) → VG (Volume Group) → LV (Logical Volume) → LUKS → ФС.

Пошаговая настройка (на примере /dev/sdb)

  1. Разметка диска
parted /dev/sdb --script mklabel gpt
parted /dev/sdb --script mkpart primary 1MiB 100MiB  # /boot (не шифруется)
parted /dev/sdb --script mkpart primary 100MiB 100%   # основной раздел под LUKS
  1. Инициализация LUKS
cryptsetup luksFormat --type luks2 /dev/sdb2
# Открытие контейнера
cryptsetup open /dev/sdb2 cryptlvm
  1. LVM поверх LUKS
pvcreate /dev/mapper/cryptlvm
vgcreate vg_system /dev/mapper/cryptlvm
lvcreate -L 8G -n swap vg_system
lvcreate -L 30G -n root vg_system
lvcreate -l 100%FREE -n home vg_system
  1. Файловые системы и монтирование
mkfs.ext4 /dev/vg_system/root
mkfs.ext4 /dev/vg_system/home
mkswap /dev/vg_system/swap

mount /dev/vg_system/root /mnt
mkdir /mnt/home
mount /dev/vg_system/home /mnt/home
mkswap /dev/vg_system/swap && swapon/dev/vg_system/swap
  1. /boot и initramfs
  • /boot должен быть на отдельном незашифрованном разделе (/dev/sdb1).
  • Установите дистрибутив, затем пересоберите initramfs с поддержкой crypt и lvm.
  • Для Debian/Ubuntu: update-initramfs -u -k all
  • Для RHEL/CentOS: dracut -f
  1. fstab и crypttab
    /etc/fstab:
/dev/vg_system/root  /      ext4  defaults  0 1
/dev/vg_system/home  /home  ext4  defaults  0 2
/dev/vg_system/swap  none   swap  sw        0 0
/dev/sdb1            /boot  ext4  defaults  0 2

/etc/crypttab:

cryptlvm /dev/sdb2 none luks

Восстановление доступа

Если потерян пароль, но есть бэкап заголовка LUKS:

cryptsetup luksHeaderRestore /dev/sdb2 --header-backup-file /root/luks-header-backup.img

Если есть ключевой файл:

cryptsetup open /dev/sdb2 cryptlvm --key-file /root/keyfile

Если нужно добавить новый пароль (требуется хотя бы один активный слот):

cryptsetup luksAddKey /dev/sdb2

Производительность и TPM

  • Алгоритмы: aes-xts-plain64 с ключом 512 бит — оптимальный баланс.
  • Для ускорения на современных CPU включите AES-NI (обычно в ядре по умолчанию).
  • TPM2+systemd-cryptenroll: позволяет автоматическую разблокировку при доверенной загрузке.
    systemd-cryptenroll --tpm2-device=/dev/tpm0 --tpm2-pcrs=7+11 /dev/sdb2
    

Чек-лист production-ready

  • Заголовок LUKS забэкапирован и хранится оффсайт
  • Ключевые файлы защищены (chmod 600) и хранятся в Vault/SOPS
  • Проверена загрузка с паролем и с ключевым файлом
  • Настроен мониторинг доступности томов (lvdisplay, cryptsetup status)
  • Documented runbook по восстановлению

Заключение

LUKS+LVM даёт надёжную защиту без потери гибкости. Главное — дисциплина бэкапов заголовков и управление ключами. С этим стек работает годами без сюрпризов.

Типичные ошибки

  • Забыли пересобрать initramfs после настройки crypttab — система не загрузится.
  • /boot на зашифрованном разделе — GRUB не сможет прочитать ядро.
  • Нет бэкапа заголовка LUKS — при повреждении первых секторов данные потеряны.
  • Ключевой файл с правами 644 — любой пользователь может его прочитать.

Мониторинг

  • cryptsetup status cryptlvm — статус контейнера
  • lvdisplay, vgdisplay — состояние LVM
  • journalctl -u systemd-cryptsetup — логи разблокировки при загрузке