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

LUKS и LVM: полное руководство по шифрованию дисков и гибкому управлению томами в Linux

LUKS и LVM: полное руководство по шифрованию дисков и гибкому управлению томами в Linux

Введение

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

В этой статье мы разберём, как эти технологии работают по отдельности и как их объединить для достижения максимальной эффективности.

Часть 1. LUKS — стандарт шифрования в Linux

LUKS — это стандарт для управления зашифрованными дисками. Он работает на уровне блочных устройств, шифруя всё содержимое раздела или диска целиком.

Ключевые особенности LUKS:

  • Шифрование всего устройства: Защищает не только файлы, но и метаданные, включая имена файлов и структуру директорий.
  • Множество ключей: LUKS поддерживает до 8 слотов для парольных фраз или ключевых файлов. Это позволяет администратору иметь мастер-ключи, а пользователям — свои пароли для доступа к данным.
  • Стойкость к атакам: Использует проверенные алгоритмы (по умолчанию aes-xts-plain64 с 256- или 512-битным ключом) и защищает от атак по словарю за счёт хэширования пароля (обычно argon2i или pbkdf2).

Базовые операции с LUKS

1. Создание зашифрованного раздела
Предположим, у нас есть неиспользуемый раздел /dev/sdb1.

# Инициализируем раздел как LUKS-контейнер
cryptsetup luksFormat /dev/sdb1

# Открываем контейнер, задав ему имя (например, 'secure_data')
cryptsetup open /dev/sdb1 secure_data

# Теперь у нас появилось устройство /dev/mapper/secure_data

2. Работа с ключами
Добавление резервного ключа:

cryptsetup luksAddKey /dev/sdb1 --key-slot 1

Удаление ключа из слота 0:

cryptsetup luksKillSlot /dev/sdb1 0

Часть 2. LVM — гибкость управления дисками

LVM создаёт дополнительный абстракционный слой между физическими дисками и файловыми системами. Вместо работы с разделами (/dev/sda1) вы работаете с логическими томами (/dev/mapper/vg_data-lv_home).

Иерархия LVM:

  • PV (Physical Volume): Физический диск или раздел (например, /dev/sdb1).
  • VG (Volume Group): Группа томов или пул из одного или нескольких PV.
  • LV (Logical Volume): Логический том, который создаётся внутри VG и на который форматируется файловой системой.

Преимущества LVM:

  • Динамическое изменение размера: Тома можно увеличивать или уменьшать на лету без размонтирования.
  • Снапшоты: Создание мгновенных снимков состояния тома для резервного копирования.
  • Миграция данных: Возможность перемещать данные с одного физического диска на другой без остановки работы.

Часть 3. Синергия: LUKS поверх LVM или LVM поверх LUKS?

Существует два основных подхода к объединению этих технологий.

Вариант А: LVM на зашифрованном томе (LVM on LUKS) — РЕКОМЕНДУЕМЫЙ

Это наиболее распространённый и безопасный подход.

  1. Физический диск -> Раздел (например, /dev/sda2).
  2. Раздел -> LUKS-контейнер (/dev/mapper/cryptlvm).
  3. LUKS-контейнер -> Физический том LVM (PV).
  4. PV -> Группа томов (VG).
  5. VG -> Логические тома (LV).

Схема:
[Физический диск] -> [Раздел] -> [LUKS] -> [PV] -> [VG] -> [LV1, LV2, ...]

Преимущества: Шифруется вся группа томов целиком одним паролем. Простота управления.

Пример настройки:

# 1. Создаём LUKS на разделе
cryptsetup luksFormat /dev/sda2
cryptsetup open /dev/sda2 cryptlvm

# 2. Создаём LVM внутри
pvcreate /dev/mapper/cryptlvm
vgcreate vg_system /dev/mapper/cryptlvm
lvcreate -L 20G -n lv_root vg_system
lvcreate -L 8G -n lv_swap vg_system
lvcreate -l 100%FREE -n lv_home vg_system

# 3. Форматируем и монтируем
mkfs.ext4 /dev/mapper/vg_system-lv_root
mkswap /dev/mapper/vg_system-lv_swap
mkfs.ext4 /dev/mapper/vg_system-lv_home

Вариант Б: Зашифрованные логические тома (LUKS on LVM)

  1. Физический диск -> PV -> VG.
  2. VG -> LV.
  3. Каждый LV -> отдельный LUKS-контейнер.

Схема:
[PV] -> [VG] -> [LV1] -> [LUKS1]
-> [LV2] -> [LUKS2]

Преимущества: Разные пароли для разных томов (например, для /home и /var/log).
Недостатки: Требуется вводить пароль для каждого тома при загрузке. Сложнее в управлении.

Часть 4. Автоматизация разблокировки при загрузке (initramfs)

Чтобы система загружалась без ручного ввода пароля для каждого тома, используются два механизма:

  1. Файл-ключ (Keyfile): Ключ хранится на отдельном USB-носителе или на незашифрованном разделе /boot.

    dd if=/dev/urandom of=/boot/keyfile bs=1024 count=4
    chmod 600 /boot/keyfile
    cryptsetup luksAddKey /dev/sda2 /boot/keyfile
    

    Затем файл-ключ прописывается в /etc/crypttab.

  2. TPM (Trusted Platform Module): Ключ извлекается из чипа безопасности TPM. Это наиболее современный и удобный способ для корпоративных сред. Инструменты вроде clevis и tang позволяют реализовать сетевую разблокировку.

Часть 5. Практический сценарий: миграция существующей системы на LUKS+LVM

Предположим, у вас есть работающая система на /dev/sda2 без шифрования. Задача — мигрировать её с минимальным простоем.

Алгоритм действий:

  1. Создайте резервную копию всех данных.
  2. Загрузитесь с Live-USB.
  3. Смонтируйте корневой раздел и скопируйте данные на временный носитель.
  4. Инициализируйте /dev/sda2 как LUKS-контейнер.
  5. Внутри LUKS создайте PV, VG и LV.
  6. Скопируйте данные обратно на новый логический том.
  7. Обновите /etc/fstab, /etc/crypttab и пересоберите initramfs (update-initramfs -u).
  8. Перезагрузитесь.

Этот процесс требует внимательности, но является стандартной процедурой для повышения безопасности унаследованных систем.

Заключение

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

Чек-лист для внедрения

  • Диски используют таблицу разделов GPT.
  • Создан отдельный EFI-раздел (/boot/efi) и раздел /boot.
  • Основная система находится на LUKS-контейнере.
  • Внутри LUKS развёрнут LVM.
  • Для автоматической загрузки настроен TPM или используется USB-ключ.
  • Настроено регулярное резервное копирование метаданных LVM (vgcfgbackup).