OSEN-НИЙ SAAALEСкидка 50% на виртуальный хостинг и VDS
до 30.11.2025 Подробнее
Выберите продукт

fscrypt на ext4: практическое шифрование каталогов на VDS и сравнение с LUKS

Разбираем нативное шифрование ext4 с fscrypt: чем оно отличается от LUKS на уровне диска, когда какой подход использовать на VDS, как включить поддержку в ядре и файловой системе, настроить PAM-авторазблокировку, ротацию ключей и резервное копирование. Пошаговый пример и чек-листы для эксплуатации.
fscrypt на ext4: практическое шифрование каталогов на VDS и сравнение с LUKS

Шифрование «на месте» давно стало нормой для серверов и VDS. Но в реальных задачах не всегда оправдан полный шифр диска через LUKS: иногда важнее гибко защитить отдельные каталоги, разделить доступ между пользователями и автоматизировать разблокировку на логине. Для этого отлично подходит fscrypt — утилита управления нативным шифрованием на уровне файловой системы (ext4, f2fs). В статье разберём, как включить поддержку шифрования ext4, зашифровать каталоги, настроить авторазблокировку через PAM, и когда имеет смысл комбинировать fscrypt с LUKS на VDS.

Что такое fscrypt и когда он нужен на VDS

fscrypt — пользовательская утилита для управления встроенным в ядро Linux шифрованием файловых систем (для нас — ext4). В отличие от LUKS, который шифрует блоки устройства и прозрачно скрывает весь том, fscrypt работает на уровне директорий/файлов. Ключевая идея: вы выбираете конкретные каталоги, назначаете для них политики шифрования (ключи, алгоритмы, опции), а ядро прозрачно шифрует содержимое и имена файлов в этих каталогах.

Сильные стороны fscrypt на VDS:

  • Гибкость: можно шифровать только чувствительные каталоги (например, /srv/secrets, /home/<user>/private), не трогая весь том.
  • Мультипользовательский сценарий: разные ключи для разных каталогов/пользователей; легко ограничить область видимости данных.
  • Автоматизация на логине: через PAM модуль каталоги пользователя могут автоматически разблокироваться при входе и блокироваться при выходе.
  • Нулевая боль с автозагрузкой: сервер (VDS) может перезагружаться без интерактивного ввода пароля в initramfs, а нужные каталоги разблокируются на этапе входа пользователя или служебного аккаунта.

Где LUKS удобнее:

  • Полная защита всего тома: метаданные файловой системы, свободное место, swap — всё шифруется. Для строгой модели угроз это проще.
  • Более привычная операционка резервного копирования «сырого» блочного устройства с сохранением шифрованного состояния.

Итог по моделям угроз: на VDS fscrypt хорош для разграничения внутри гостевой ОС и защиты конкретных данных «в состоянии покоя» на диске. LUKS полезен, когда нужна цельная защита всего устройства. Можно и комбинировать: LUKS для тома, fscrypt для отдельных пользовательских областей и секций с особыми ключами.

Требования и проверка окружения

Вам потребуется ядро Linux с поддержкой файлового шифрования (опция ядра CONFIG_FS_ENCRYPTION), файловая система ext4 с включённой фичей encrypt, и пакет fscrypt в системе. На актуальных Debian/Ubuntu это обычно доступно «из коробки», но проверим.

Проверяем поддержку ядром

uname -r
zgrep FS_ENCRYPTION /proc/config.gz || zgrep FS_ENCRYPTION /boot/config-$(uname -r)

Ищем CONFIG_FS_ENCRYPTION=y или =m. Если параметр отсутствует — потребуется ядро с поддержкой файлового шифрования.

Пакеты и утилиты

apt update
apt install -y fscrypt e2fsprogs

Утилита e2fsprogs нужна для проверки и, при необходимости, включения фичи encrypt в ext4.

Проверяем и включаем фичу encrypt в ext4

Посмотрим, включена ли опция в самой ФС:

lsblk -f
# допустим, нужный раздел: /dev/vda1, смонтирован на /
tune2fs -l /dev/vda1 | grep 'Filesystem features'

Ищем в списке encrypt. Если её нет, включить можно только на размонтированной ФС. Для корневого раздела это обычно делается из rescue-среды или live-образа. Общая последовательность:

umount /dev/vda1
fsck.ext4 -f /dev/vda1
tune2fs -O encrypt /dev/vda1
fsck.ext4 -f /dev/vda1
mount /dev/vda1 /mnt

Для не-root разделов (например, отдельного /srv) операция проще: временно перенесите сервисы с каталога, размонтируйте, включите опцию и смонтируйте обратно.

Примечания совместимости:

  • ext4 c casefold и encrypt вместе поддерживаются в новых ядрах. Если используете casefold, убедитесь, что ваше ядро достаточно свежее.
  • ext4 с шифрованием требует журналирования; это стандартно включено.

Проверка поддержки ext4 encrypt и инициализация fscrypt на сервере

Быстрый старт: шифруем каталог на ext4

Далее предполагается, что файловая система смонтирована и поддерживает encrypt, а пакет fscrypt установлен.

Инициализация fscrypt на файловой системе

# Подготовка конфигурации и служебных структур на конкретной ФС (точке монтирования)
fscrypt setup /
# или для отдельного раздела, смонтированного на /srv
fscrypt setup /srv

Команда создаёт служебные директории и базовую конфигурацию. Повторите для каждой точки монтирования, где планируете использовать шифрование.

Создаём протектор (ключ) и шифруем каталог

В fscrypt используются «протекторы» — способы получить ключ (логин, пароль, файл-ключ, KMS и т.д.), которые затем привязываются к каталогу через «политику». Самый простой вариант — протектор-пароль (или логон-протектор для PAM).

# Пример: создаём каталог для шифрования
mkdir -p /srv/secure-data

# Шифруем каталог и создаём протектор-пароль
fscrypt encrypt /srv/secure-data
# Мастер задаст тип протектора (Password, Custom) и параметры политики

В ходе мастера укажите сильный пароль и, если доступно, выберите политику v2 (для новых ядер). Политика определяет алгоритмы для содержимого и имён файлов, размер паддинга имён и прочее.

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

fscrypt status /srv/secure-data

Вы увидите, что каталог зашифрован, привязан к конкретной политике и протектору. Когда протектор не введён (директория «заблокирована»), имена файлов на диске остаются зашифрованными, а доступ к содержимому невозможен.

Разблокировка и блокировка

# Разблокировать каталог вручную (ввести пароль протектора)
fscrypt unlock /srv/secure-data

# Заблокировать (удалить ключ из ключринга процесса/сессии)
fscrypt lock /srv/secure-data

# Сводный статус точки монтирования
fscrypt status /

В «разблокированном» состоянии процессы с нужными правами видят обычные имена и содержимое файлов. На диске при этом данные остаются в шифрованном виде — то есть снимки VDS на уровне гипервизора всё равно будут содержать шифротекст.

PAM: автоматическая разблокировка на логине

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

Установка и базовое включение

apt install -y fscrypt

На Debian/Ubuntu обычно достаточно добавить модуль в стадийность session. Для систем с пакетами PAM по умолчанию добавьте строку в общий профиль сессии:

# Редактируем /etc/pam.d/common-session
# Добавьте строку ближе к концу файла:
session optional pam_fscrypt.so

После этого при входе пользователя pam_fscrypt сможет разблокировать каталоги, привязанные к «логон-протектору» этого пользователя, а при выходе — очистить ключи. Чтобы пользоваться именно логон-протектором, создайте его для пользователя и привяжите к каталогу:

# От имени пользователя (или с sudo -u)
fscrypt setup $HOME
fscrypt encrypt $HOME/private --source=pam_passphrase

Далее каталог $HOME/private будет разблокироваться при входе пользователя и блокироваться при выходе. Для системных сервисов вместо PAM обычно применяют либо ручную разблокировку в unit-файле через ExecStartPre, либо заранее активный ключ в ключринге службы.

Виртуальный хостинг FastFox
Виртуальный хостинг для сайтов
Универсальное решение для создания и размещения сайтов любой сложности в Интернете от 95₽ / мес

Политики шифрования: v1 vs v2, имена и содержимое

Современные ядра поддерживают «политики v2», которые упрощают ротацию ключей, улучшают совместимость с аппаратным ускорением и аппаратным инлайн-шифрованием. Если мастер fscrypt encrypt предлагает выбрать версию политики — выбирайте v2 на актуальных ядрах. Для старых ядер останется v1, что тоже рабочий вариант.

Что важно понимать:

  • Шифруются и содержимое, и имена файлов внутри защищённого каталога. Однако часть метаданных ФС (размеры, время mtime/ctime, деревья каталогов вне защищённых директорий) остаются видимыми как факт существования объектов.
  • Размер шифрованных имён больше исходных, поэтому политики предлагают «паддинг» имён. Обычно дефолты подходят.
  • Алгоритм для содержимого и для имён может отличаться (выбирается политикой). На серверах с AES-NI выбирайте профили на базе AES; для CPU без AES есть варианты вроде Adiantum, но это больше для встраиваемых систем.

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

На современных VDS с поддержкой AES-NI накладные расходы fscrypt на ext4 обычно умеренные и в большинстве веб-нагрузок малозаметны. Несколько практических заметок:

  • CPU: убедитесь, что гипервизор пробрасывает флаги AES-NI гостю. Проверьте grep aes /proc/cpuinfo.
  • I/O-профиль: операции с большим количеством мелких файлов и длинными именами чувствительнее к накладным расходам. Если это ваш случай, шифруйте только самые чувствительные деревья.
  • Журнал ext4: режимы журналирования (data=ordered по умолчанию) совместимы с шифрованием. Агрессивные параметры вроде commit= на производительность шифрования влияют косвенно. Полезно свериться с практиками тюнинга в материале про настройки ext4 и XFS для VDS.
  • Наблюдаемость: метрики CPU, контекстных переключений и iowait в связке с профилем нагрузки дадут вам честную картину реального overhead.

Схема работы fscrypt: шифрование содержимого и имён, аспекты производительности

Ротация ключей и смена пароля

Смена пароля протектора не требует «расшифровать-зашифровать» весь каталог: используется перерапаковка ключевого материала. Для этого применяйте утилиту fscrypt соответствующей версии (в современных реализациях доступна команда для смены/перепаковки протектора).

# Изменить пароль протектора (поддержка зависит от версии fscrypt)
fscrypt change-passphrase --protector=<id>
# либо
fscrypt rewrap --protector=<id>

Актуальные названия подкоманд могут отличаться в зависимости от дистрибутива и версии утилиты; ориентируйтесь на fscrypt --help и справку пакета. Важный момент: меняется именно ключ протектора; данные в каталоге не перешифровываются целиком.

Резервное копирование, перенос и снапшоты

Как влияет fscrypt на бэкапы и миграции:

  • Снимки на уровне гипервизора VDS (storage snapshots) всегда содержат шифротекст, независимо от того, «разблокирован» ли каталог в гостевой ОС. Это плюс для защиты данных «на полке».
  • Резервные копии, которые вы делаете изнутри системы обычными инструментами (rsync, tar), видят расшифрованный вид, если каталог разблокирован. Чтобы сохранять бэкап в защищённом виде вне узла, добавляйте отдельный уровень шифрования (например, криптослой в самом бэкап-решении). Подробно о надёжной передаче и хранении бэкапов см. разбор про rclone с режимом crypt.
  • Перенос каталога между серверами удобнее делать на приложенческом уровне (логическая миграция). Если нужен перенос шифрованного состояния «как есть», проще перемещать весь том (например, LUKS + файловая система внутри). Для fscrypt учитывайте, что политика и протектор привязаны к ФС/точке монтирования.

Минимальный чек-лист бэкапа каталога с fscrypt внутри гостевой ОС:

  • Убедитесь, что бэкап-решение шифрует архив вне узла, если это требуется моделью угроз.
  • Храните отдельно секреты для протекторов (пароли, ключевые файлы) и процедуры восстановления.
  • Периодически тестируйте восстановление на стенде.
FastFox SSL
Надежные SSL-сертификаты
Мы предлагаем широкий спектр SSL-сертификатов от GlobalSign по самым низким ценам. Поможем с покупкой и установкой SSL бесплатно!

Совместное использование с LUKS: когда это оправдано

Комбинация нередко выглядит так: базовая защита — LUKS на уровне блочного устройства (root и/или data), а поверх — точечное шифрование критичных каталогов через fscrypt и разные протекторы. Это даёт «двухключевую» модель: физический диск шифрован, и отдельные чувствительные зоны имеют свои ключи и процедуру ротации.

Однако для VDS с требованиями к автоматическому перезапуску (после ядровых апдейтов, аварий и т.п.) LUKS в initramfs усложняет жизнь: нужен удалённый ввод пароля, сетевой разблокировщик и т.п. В таких сценариях часто выбирают fscrypt как основной инструмент защиты на уровне данных, а LUKS применяют для вторичных томов, где допустим управляемый процесс разблокировки. Если у вас небольшой проект на виртуальном хостинге, оцените, действительно ли нужна сложность с полнодисковым шифрованием — иногда достаточно защитить несколько каталогов.

Эксплуатационный чек-лист

  • Документируйте, какие каталоги зашифрованы, какими протекторами и кто их держатель.
  • Для пользовательских каталогов используйте PAM-логон-протектор; для сервисных — явную разблокировку в systemd юнитах.
  • Ротируйте пароли при кадровых изменениях; не откладывайте процедуру перепаковки протекторов.
  • Мониторьте логи разблокировок и отказов в journalctl.
  • Тестируйте восстановление доступа из процедуры «с нуля» не реже раза в квартал.

FAQ и подводные камни

  • Можно ли зашифровать уже заполненный каталог? Да, fscrypt encrypt шифрует существующий каталог. На больших деревьях это займёт время; планируйте окно обслуживания.
  • Видно ли содержание файлов после разблокировки другим пользователям? Управляет это уже модель прав доступа в ОС. fscrypt обеспечивает шифрование на диске и механизм ключей, но UNIX-права остаются важны.
  • Работает ли на NFS/overlay? fscrypt — про локальные ФС, поставленные ядром; NFS-клиент и overlayfs имеют ограничения. Для шифрования в контейнерах используйте тома-хранилища на хосте с fscrypt и аккуратно монтируйте внутрь.
  • Шифруются ли метаданные целиком? Нет. Шифруются имена и содержимое, но часть метаданных ФС остаётся видимой (например, размеры, таймстемпы). Для сокрытия всего массива используйте LUKS.
  • Можно ли «перенести» политику на другой сервер? Политики и протекторы привязаны к ФС. Миграции разумнее делать логически, либо переносить весь том целиком.
  • Совместимость с systemd-homed? systemd-homed умеет сам управлять шифрованием домашних каталогов. Не смешивайте самостоятельную настройку pam_fscrypt и systemd-homed без необходимости.

Пошаговый пример для VDS: каталог с секретами приложения

Соберём всё воедино на примере каталога /srv/app/secret-store на ext4:

  1. Проверяем поддержку ядра и ФС, устанавливаем инструменты:
apt update
apt install -y fscrypt e2fsprogs
zgrep FS_ENCRYPTION /proc/config.gz || zgrep FS_ENCRYPTION /boot/config-$(uname -r)
  1. Убеждаемся, что на разделе есть encrypt (при необходимости включаем в офлайне):
tune2fs -l /dev/vdb1 | grep 'Filesystem features'
  1. Инициализируем fscrypt на точке монтирования:
fscrypt setup /srv
  1. Готовим каталог и шифруем его:
mkdir -p /srv/app/secret-store
fscrypt encrypt /srv/app/secret-store
# Выбираем Password protector и, если доступно, policy v2
  1. Разблокировка для сервисного аккаунта перед стартом приложения (unit-файл):
# Фрагмент unit-файла приложения (как идея)
# ExecStartPre=/usr/bin/fscrypt unlock /srv/app/secret-store
# ExecStopPost=/usr/bin/fscrypt lock /srv/app/secret-store

Такой подход обеспечит доступ приложению только во время работы сервиса.

Итоги

fscrypt на ext4 — практичный инструмент для VDS, когда вам нужна гибкая защита конкретных данных, мультипользовательские сценарии и автоматизация через PAM без усложнения раннего этапа загрузки. Он не заменяет LUKS для строгих требований «всё зашифровано от и до», но отлично дополняет его. Начните с проверки поддержки ядра и ФС, включите фичу encrypt в ext4, инициализируйте fscrypt на нужной точке монтирования, зашифруйте каталоги и настройте PAM для удобства. Дальше — эксплуатационная дисциплина: ротация ключей, логирование разблокировок и регулярные тесты восстановления доступа.

Поделиться статьей

Вам будет интересно

rclone serve: S3/WebDAV/HTTP как универсальный шлюз к Object Storage OpenAI Статья написана AI (GPT 5)

rclone serve: S3/WebDAV/HTTP как универсальный шлюз к Object Storage

Покажем, как превратить Object Storage в универсальный сервис с rclone serve: отдача по HTTP, WebDAV и S3, настройка VFS‑кэша и TT ...
Podman Quadlet: rootless systemd на VDS — практическое руководство OpenAI Статья написана AI (GPT 5)

Podman Quadlet: rootless systemd на VDS — практическое руководство

Quadlet превращает .container/.pod в systemd‑юниты. В связке с rootless Podman и systemd --user это чистый и безопасный способ дер ...
HashiCorp Nomad на VDS: альтернатива Kubernetes, jobs/allocations и сервис‑дискавери с Consul OpenAI Статья написана AI (GPT 5)

HashiCorp Nomad на VDS: альтернатива Kubernetes, jobs/allocations и сервис‑дискавери с Consul

Хотите оркестрацию контейнеров и сервисов без сложности Kubernetes? Покажу, как развернуть Nomad на облачных VDS, подключить Consu ...