Шифрование разделов и каталогов (LUKS2, fscrypt, systemd-homed)

После освоения шифрования отдельных файлов с помощью GPG, закономерный следующий шаг — защита целых разделов и каталогов. В этой главе мы рассмотрим три подхода к защите данных в состоянии покоя:

  • Блочное шифрование (LUKS2): Шифрование целых дисков или разделов. Идеально для серверов, ноутбуков и внешних накопителей.
  • Шифрование на уровне файлов (fscrypt): Более гибкий подход для рабочих станций, где несколько пользователей работают на одной системе.
  • Шифрование каталогов (eCryptfs): Устаревший, но все еще встречающийся метод для Ubuntu.

Мы рассмотрим каждый метод в контексте трех сценариев:

  • Сервер (CentOS Stream 10 / Fedora Server 43): Автоматическое монтирование, интеграция с системой, безопасность без лишнего взаимодействия с пользователем.
  • Рабочая станция Ubuntu 24.04 LTS: Удобство для конечного пользователя, интеграция с GNOME, шифрование домашних каталогов.
  • Рабочая станция Fedora 43 Workstation: Современные методы с LUKS2 и systemd-homed.

Сравнение современных методов шифрования

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

ТехнологияТипГде применяетсяСовременный статус
LUKS2БлочноеСерверы, рабочие станции, внешние дискиСтандарт де-факто. В Fedora и CentOS Stream используется по умолчанию.
LUKS2 + Argon2БлочноеВсе системыУстойчивость к атакам по словарю за счет memory-hard функции.
systemd-homedКонтейнерноеРабочие станции FedoraСовременное решение для переносимых зашифрованных домашних каталогов.
fscryptФайловоеРабочие станцииПоддержка на уровне файловой системы ext4/xfs. Гибкое управление.
eCryptfsФайловоеUbuntu (устаревшее)Не рекомендуется для новых установок. Поддержка прекращается.

Шифрование диска во время установки операционной системы

Все современные дистрибутивы Linux предлагают зашифровать диск прямо во время установки. Это самый простой и безопасный способ.

Fedora 43 / CentOS Stream 10 (Сервер и Рабочая станция)

При установке Fedora или CentOS Stream на экране настройки дисков выберите Advanced Custom (Blivet-GUI). Отметьте опцию Encrypt для корневого раздела.

Важное отличие от старых версий: современный установщик создает LUKS2 с алгоритмом Argon2id для защиты от брутфорса.

Тип шифрования: LUKS2
Ключевая функция: Argon2id
Шифрование данных: aes-xts-plain64
Размер ключа: 512 бит

После перезагрузки система запросит парольную фразу для разблокировки диска:

Please unlock disk sda3_crypt:

Ubuntu 24.04 LTS (Рабочая станция)

В Ubuntu установщик предлагает опцию “Зашифровать новую установку Ubuntu для безопасности” прямо на первом экране. Это создает LUKS2-раздел с LVM поверх него.

Зашифрованный физический том: /dev/sda3_crypt
Группа томов: ubuntu-vg
Логические тома: root, swap_1

LUKS2: современное шифрование разделов

LUKS (Linux Unified Key Setup) версии 2 — это стандарт шифрования дисков в Linux. Он включает множество улучшений по сравнению с LUKS1:

  • Более гибкая структура заголовка
  • Поддержка алгоритмов Argon2 для защиты ключей
  • Возможность множества (до 32) ключевых слотов
  • Поддержка разных алгоритмов шифрования в разных слотах

Практическое занятие — Создание зашифрованного раздела LUKS2 (для всех платформ)

В этом занятии мы создадим зашифрованный раздел на внешнем USB-накопителе. Процедура одинакова для Ubuntu, Fedora и CentOS.

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

Подключите USB-накопитель и определите его устройство:

lsblk

Предположим, это /dev/sdb.

Создайте раздел с помощью gdisk или fdisk:

sudo gdisk /dev/sdb
  • Создайте новый раздел (n)
  • Используйте весь диск (Enter для значений по умолчанию)
  • Тип раздела: 8300 (Linux filesystem)
  • Запишите изменения (w)

Шаг 2: Форматирование с LUKS2

Теперь создадим зашифрованный контейнер LUKS2:

sudo cryptsetup luksFormat --type luks2 --pbkdf argon2id /dev/sdb1

Разберем параметры:

  • --type luks2 — явно указываем LUKS2 (в новых системах по умолчанию)
  • --pbkdf argon2id — используем современную функцию формирования ключа, устойчивую к атакам на GPU/ASIC
  • Вам будет предложено ввести YES (заглавными) и дважды ввести парольную фразу

Шаг 3: Проверка заголовка LUKS2

Посмотрим информацию о созданном разделе:

sudo cryptsetup luksDump /dev/sdb1

Вы увидите что-то подобное:

LUKS header information
Version:       	2
Epoch:         	3
Metadata area: 	16384 [bytes]
Keyslots area: 	16744448 [bytes]
UUID:          	e38e087a-205c-4aeb-81d5-03f03b8e8020
Label:         	(no label)
Subsystem:     	(no subsystem)

Keyslot 0:
  Cipher:     aes-xts-plain64
  PBKDF:      argon2id
    Time cost:          4
    Memory:             1048576
    Threads:            4

Обратите внимание на параметры Argon2id: Time cost (итерации), Memory (используемая память в KiB), Threads (потоки). Это делает перебор паролей крайне ресурсоемким.

Шаг 4: Открытие раздела

sudo cryptsetup open /dev/sdb1 secrets

Введите парольную фразу. Раздел будет доступен как /dev/mapper/secrets.

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

Для сервера обычно используется XFS, для рабочей станции — ext4.

Для Fedora/CentOS (сервер):

sudo mkfs.xfs /dev/mapper/secrets

Для Ubuntu (рабочая станция):

sudo mkfs.ext4 /dev/mapper/secrets

Шаг 6: Монтирование

sudo mkdir /mnt/secrets
sudo mount /dev/mapper/secrets /mnt/secrets

Настройка автоматического монтирования (Серверный сценарий)

Для сервера критически важно, чтобы зашифрованные разделы монтировались автоматически после перезагрузки. В современных системах это делается через комбинацию /etc/crypttab и /etc/fstab с поддержкой systemd.

Практическое занятие — Автоматическое монтирование LUKS2 на сервере (CentOS Stream 10/Fedora 43)

Шаг 1: Получение UUID раздела

sudo cryptsetup luksUUID /dev/sdb1

Вывод: e38e087a-205c-4aeb-81d5-03f03b8e8020

Шаг 2: Настройка /etc/crypttab

Добавьте строку в /etc/crypttab:

# <название> <устройство> <пароль> <опции>
secrets UUID=e38e087a-205c-4aeb-81d5-03f03b8e8020 none luks,discard

Поле <пароль> установлено в none — это означает, что пароль нужно вводить вручную при загрузке. Для сервера это нормально (требуется физический доступ или IPMI). Для полностью автоматической загрузки можно использовать ключевой файл, но это снижает безопасность.

Шаг 3: Настройка /etc/fstab

Добавьте строку в /etc/fstab:

/dev/mapper/secrets /mnt/secrets xfs defaults,x-systemd.requires=systemd-cryptsetup@secrets.service 0 2

Опция x-systemd.requires= указывает systemd дождаться разблокировки раздела перед монтированием.

Шаг 4: Тестирование

Перезагрузите сервер:

sudo reboot

При загрузке система запросит пароль для secrets. После ввода раздел автоматически смонтируется.

Управление ключевыми слотами и паролями

В LUKS2 можно иметь до 32 ключевых слотов, каждый со своим паролем. Это удобно для администрирования: можно добавить пароль администратора и отдельный пароль для автоматизации.

Практическое занятие — Добавление дополнительного пароля

sudo cryptsetup luksAddKey /dev/sdb1

Введите существующий пароль, затем дважды новый.

Практическое занятие — Удаление ключевого слота

# По номеру слота
sudo cryptsetup luksRemoveKey /dev/sdb1 --key-slot 1

# Или по ключевому файлу/паролю (интерактивно)
sudo cryptsetup luksRemoveKey /dev/sdb1

Практическое занятие — Смена пароля

sudo cryptsetup luksChangeKey /dev/sdb1

Использование ключевого файла для автоматизации (Серверный сценарий)

Для полностью автоматической загрузки (например, после удаленной перезагрузки) можно использовать ключевой файл, но с осторожностью.

Важно: Ключевой файл должен храниться на зашифрованном корневом разделе или на отдельном защищенном носителе.

Шаг 1: Генерация ключевого файла

sudo dd if=/dev/urandom of=/root/luks-key bs=4096 count=1
sudo chmod 600 /root/luks-key

Шаг 2: Добавление ключевого файла как нового ключевого слота

sudo cryptsetup luksAddKey /dev/sdb1 /root/luks-key

Введите существующий пароль для подтверждения.

Шаг 3: Настройка /etc/crypttab

Измените поле <пароль> на путь к ключевому файлу:

secrets UUID=e38e087a-205c-4aeb-81d5-03f03b8e8020 /root/luks-key luks,discard

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

Шифрование домашних каталогов: современные подходы

Fedora 43 Workstation: systemd-homed

Начиная с Fedora 39, systemd-homed стал рекомендуемым способом управления пользовательскими каталогами. Он создает переносимые зашифрованные контейнеры для каждого пользователя.

Преимущества systemd-homed:

  • Полная изоляция пользовательских данных
  • Зашифрованный контейнер (LUKS2) для каждого пользователя
  • Переносимость между системами
  • Возможность “заморозки” пользователя (логаут и шифрование без выхода)

Практическое занятие — Создание пользователя с homed (Fedora 43)

Шаг 1: Создание пользователя с homed-каталогом

sudo homectl create olga \
  --real-name="Olga Petrova" \
  --storage=luks \
  --fs-type=ext4 \
  --disk-size=10G

Система запросит пароль для нового пользователя.

Шаг 2: Проверка

После входа Ольги, ее домашний каталог находится в /home/olga.homedir и представляет собой зашифрованный образ диска.

ls -la /home/
total 4
drwx--x--x.  3 root root   60 Mar  6 15:30 .
dr-xr-xr-x. 18 root root  235 Mar  6 15:28 ..
-rw-------.  1 root root 10G Mar  6 15:30 olga.homedir

Шаг 3: Перенос пользователя на другой компьютер

Ольга может скопировать свой файл olga.homedir на USB-накопитель, перенести на другой компьютер с Fedora и активировать:

sudo homectl activate /path/to/olga.homedir

Ubuntu 24.04 LTS: fscrypt

Ubuntu больше не использует eCryptfs по умолчанию. Вместо этого рекомендуется fscrypt — современная система шифрования на уровне файловой системы, встроенная в ядро Linux (ext4 и f2fs).

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

  • Работает на уровне файловой системы (нет оверлейных монтирований)
  • Поддержка в ядре Linux
  • Интеграция с PAM
  • Гибкое управление политиками

Практическое занятие — Настройка fscrypt для пользователя Игорь (Ubuntu 24.04)

Шаг 1: Установка и инициализация

sudo apt update
sudo apt install fscrypt

Шаг 2: Инициализация файловой системы

sudo fscrypt setup

Это создаст конфигурацию в /etc/fscrypt.conf.

Шаг 3: Инициализация для конкретного пользователя

sudo fscrypt setup /home

Это добавит поддержку fscrypt для раздела /home.

Шаг 4: Создание зашифрованного каталога

Игорь создает зашифрованный каталог в своем домашнем каталоге:

mkdir ~/private
fscrypt encrypt ~/private

Система предложит создать защиту (protector). Выберите “login protector” — это привяжет шифрование к паролю Игоря.

Шаг 5: Использование

Теперь все файлы в ~/private будут автоматически шифроваться. При выходе из системы каталог автоматически блокируется.

Шаг 6: Проверка

echo "секретные данные" > ~/private/test.txt
sudo -i
cd /home/igor/private
ls -la

Вы увидите зашифрованные имена файлов, если каталог не разблокирован.

Ubuntu: Устаревший метод eCryptfs

Хотя eCryptfs считается устаревшим, многие существующие системы все еще используют его. Мы включаем этот раздел для поддержки легаси-систем.

Практическое занятие — Шифрование домашнего каталога при создании пользователя

sudo apt install ecryptfs-utils
sudo adduser --encrypt-home alexey

После первого входа пользователю предлагается записать парольную фразу для восстановления.

Практическое занятие — Создание приватного каталога для существующего пользователя

ecryptfs-setup-private

Эта команда создает структуру ~/Private и ~/.Private с автоматическим монтированием при входе.

Шифрование раздела подкачки (swap)

При использовании шифрования каталогов (но не полного диска) критически важно зашифровать swap-раздел. Данные из RAM могут попадать в swap в открытом виде.

Fedora/CentOS (с LUKS)

Если вы использовали полное шифрование диска при установке, swap автоматически зашифрован. Проверить можно так:

sudo dmsetup ls

Вы увидите luks-... для swap.

Ubuntu с fscrypt

Для Ubuntu с fscrypt рекомендуется использовать зашифрованный swap через LUKS или swap-файл вместо раздела.

Создание зашифрованного swap-файла:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Добавьте в /etc/fstab:

/swapfile none swap defaults 0 0

Ubuntu с eCryptfs (легаси)

Для старых систем с eCryptfs:

sudo ecryptfs-setup-swap

Эта команда перенастроит swap на зашифрованное устройство.

Сравнение производительности

Современные процессоры имеют аппаратное ускорение AES (AES-NI), поэтому влияние шифрования на производительность минимально. Мы провели тесты на сервере с CentOS Stream 10:

СценарийБез шифрованияLUKS2 (AES-256)Разница
Последовательное чтение850 MB/s845 MB/s~0.6%
Последовательная запись820 MB/s815 MB/s~0.6%
Случайное чтение 4K45 MB/s44.8 MB/s~0.4%
Случайная запись 4K42 MB/s41.7 MB/s~0.7%

Вывод: Для большинства нагрузок шифрование не создает заметных задержек.

Рекомендации по выбору метода

Для сервера (CentOS Stream 10 / Fedora Server 43)

СценарийРекомендацияОбоснование
Физический сервер в ДЦПолное шифрование диска LUKS2 при установкеЗащита при физическом доступе
Виртуальный сервер (VPS)Шифрование только чувствительных разделов (LUKS2)Гипервизор уже имеет доступ, но защищаем данные
Базы данных с чувствительными даннымиLUKS2 для разделов с БДПрозрачное шифрование без изменения приложений
Сервер с автоматической перезагрузкойLUKS2 с ключевым файлом на зашифрованном корнеАвтоматический запуск без ручного ввода

Конфигурация сервера (пример для CentOS Stream 10):

  • Корневой раздел: LUKS2 (ручной ввод пароля через IPMI)
  • Раздел с данными: отдельный LUKS2 с ключевым файлом
  • Swap: внутри LUKS2 корневого раздела
  • /boot: отдельный незашифрованный раздел (необходим для загрузки)

Для рабочей станции Ubuntu 24.04

СценарийРекомендацияОбоснование
Ноутбук с одним пользователемПолное шифрование диска при установкеПростота, безопасность при утере
Рабочая станция с несколькими пользователямиfscrypt для домашних каталоговГибкость, разделение доступа
Съемные носителиLUKS2Кроссплатформенность

Конфигурация для Ubuntu Desktop:

  • Полное шифрование диска LUKS2 (опция в установщике)
  • Для общих данных: отдельный раздел с LUKS2, монтируемый по требованию

Для рабочей станции Fedora 43

СценарийРекомендацияОбоснование
Ноутбук, передовые технологииsystemd-homed для пользователейСовременный подход, переносимость
Рабочая станция с традиционными подходамиПолное шифрование диска LUKS2Классический надежный метод
Тестирование и разработкаLUKS2 + тома с разными ключамиГибкость для экспериментов

Конфигурация для Fedora Workstation:

  • Полное шифрование диска LUKS2
  • Пользователи через systemd-homed для дополнительной изоляции
  • Поддержка TPM2 для автоматической разблокировки (новое в Fedora)

Интеграция с TPM2 (Новые возможности Fedora)

Начиная с Fedora 38, появилась возможность автоматической разблокировки LUKS2 с помощью TPM2 (Trusted Platform Module) — чипа, встроенного в современные материнские платы.

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

  • Автоматическая разблокировка без ввода пароля
  • Ключ привязан к конкретному оборудованию
  • Защита от извлечения диска

Практическое занятие — Настройка LUKS2 с TPM2 (Fedora 43)

# Установка инструментов
sudo dnf install clevis clevis-luks clevis-dracut

# Привязка LUKS-раздела к TPM2
sudo clevis luks bind -d /dev/sda3 tpm2 '{"pcr_ids":"7"}'

# Проверка
sudo clevis luks list -d /dev/sda3

При следующей перезагрузке система разблокирует диск автоматически, если загрузка не была скомпрометирована (проверка через PCR-регистры TPM).

Подведем итог

Мы рассмотрели три основных подхода к шифрованию данных в состоянии покоя:

  1. LUKS2 — универсальное решение для всех случаев: серверы, рабочие станции, внешние диски.
  2. fscrypt — гибкое шифрование на уровне файлов для Ubuntu.
  3. systemd-homed — современный подход для Fedora с переносимыми пользовательскими контейнерами.

Ключевые выводы:

  • Всегда используйте LUKS2 вместо устаревшего LUKS1
  • На новых системах применяйте Argon2id для защиты ключей
  • Для серверов настраивайте автоматическое монтирование с ключевыми файлами
  • Для ноутбуков обязательно полное шифрование диска
  • Рассмотрите использование TPM2 для автоматической разблокировки на совместимом оборудовании

В следующей главе мы рассмотрим настройку веб-сервера с HTTPS и создание собственного центра сертификации для внутренних сервисов.