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)
- Разметка диска
parted /dev/sdb --script mklabel gpt
parted /dev/sdb --script mkpart primary 1MiB 100MiB # /boot (не шифруется)
parted /dev/sdb --script mkpart primary 100MiB 100% # основной раздел под LUKS
- Инициализация LUKS
cryptsetup luksFormat --type luks2 /dev/sdb2
# Открытие контейнера
cryptsetup open /dev/sdb2 cryptlvm
- 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
- Файловые системы и монтирование
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
- /boot и initramfs
- /boot должен быть на отдельном незашифрованном разделе (/dev/sdb1).
- Установите дистрибутив, затем пересоберите initramfs с поддержкой crypt и lvm.
- Для Debian/Ubuntu:
update-initramfs -u -k all - Для RHEL/CentOS:
dracut -f
- 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 — логи разблокировки при загрузке