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

LUKS и LVM: полное руководство по настройке шифрования дисков в Linux

LUKS и LVM: полное руководство по настройке шифрования дисков в Linux

Введение

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

Теоретическая база

Что такое LUKS

LUKS — это стандарт, который определяет заголовок и структуру зашифрованного раздела. Он хранит информацию о ключах в специальном заголовке (header) в начале устройства. Это позволяет:

  • Иметь несколько парольных фраз (key slots) для одного раздела.
  • Легко менять пароли без перешифрования всего диска.
  • Обеспечивать совместимость между различными дистрибутивами Linux.

Что такое LVM

LVM — это слой абстракции над физическими дисками. Он позволяет создавать логические тома, которые не привязаны к физическим границам разделов. Преимущества:

  • Динамическое изменение размера томов.
  • Снапшоты (снимки состояния).
  • Объединение нескольких дисков в один том (LVM striping).

Практическая реализация

Шаг 1: Подготовка диска

Предположим, у нас есть новый диск /dev/sdb.

# Очистка старых метаданных (опционально, но рекомендуется)
wipefs -a /dev/sdb

# Создание физического тома LVM
pvcreate /dev/sdb

Шаг 2: Создание LUKS-контейнера

Создадим зашифрованный раздел на всём диске.

# Инициализация LUKS. Выбираем надёжный алгоритм (aes-xts-plain64 с 512-битным ключом)
cryptsetup luksFormat --type luks2 --cipher aes-xts-plain64 --key-size 512 /dev/sdb

# Открытие контейнера
cryptsetup open /dev/sdb crypt_data

Теперь устройство доступно как /dev/mapper/crypt_data.

Шаг 3: Настройка LVM поверх LUKS

# Создание группы томов
vgcreate vg_secure /dev/mapper/crypt_data

# Создание логических томов
lvcreate -L 20G -n root vg_secure
lvcreate -L 4G -n swap vg_secure
lvcreate -l 100%FREE -n home vg_secure

Шаг 4: Создание файловых систем и монтирование

mkfs.ext4 /dev/vg_secure/root
mkfs.ext4 /dev/vg_secure/home
mkswap /dev/vg_secure/swap

# Монтирование для установки ОС или переноса данных
mount /dev/vg_secure/root /mnt
mkdir /mnt/home
mount /dev/vg_secure/home /mnt/home
swapon /dev/vg_secure/swap

Автоматизация: /etc/crypttab и /etc/fstab

Чтобы система запрашивала пароль при загрузке и автоматически монтировала тома, необходимо настроить конфигурационные файлы.

/etc/crypttab

crypt_data UUID=ваш-uuid-диска none luks

Параметр none указывает, что ключ будет запрошен у пользователя.

/etc/fstab

/dev/mapper/vg_secure-root  /          ext4    defaults        0 1
/dev/mapper/vg_secure-home  /home      ext4    defaults        0 2
/dev/mapper/vg_secure-swap  none       swap    sw              0 0

Восстановление и аварийные сценарии

Смена парольной фразы

# Добавить новый слот
cryptsetup luksAddKey /dev/sdb

# Удалить старый слот (нужно знать его индекс, обычно 0)
cryptsetup luksRemoveKey /dev/sdb

Резервное копирование заголовка LUKS

Это критически важно. Если заголовок повредится, данные будут потеряны безвозвратно.

cryptsetup luksHeaderBackup /dev/sdb --header-backup-file /root/luks_header_backup.img

Храните этот файл на отдельном носителе.

Заключение

Комбинация LUKS и LVM предоставляет мощный, гибкий и безопасный инструмент для управления данными в Linux. Несмотря на кажущуюся сложность, следование данному алгоритму позволяет развернуть защищённую среду даже начинающему системному администратору. Главное — всегда иметь резервную копию заголовка LUKS и помнить, что при потере пароля и бэкапа заголовка данные восстановить невозможно.

Дополнительный раздел: интеграция с TPM 2.0

Для автоматизации разблокировки при загрузке без ввода пароля можно использовать модуль TPM 2.0. Это особенно актуально для серверов.

  1. Установите необходимые пакеты: clevis и clevis-luks.
  2. Привяжите зашифрованный том к TPM:
    clevis bind luks -d /dev/sdb tpm2 '{"hash":"sha256","key":"rsa","pcr_ids":"7"}'
    
  3. Обновите dracut для включения модулей при загрузке:
    dracut -f
    

Теперь при загрузке система автоматически извлечет ключ из TPM, если измерения PCR не изменились.