Шифрование «на месте» давно стало нормой для серверов и 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 установлен.
Инициализация 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, либо заранее активный ключ в ключринге службы.
Политики шифрования: 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 change-passphrase --protector=<id>
# либо
fscrypt rewrap --protector=<id>
Актуальные названия подкоманд могут отличаться в зависимости от дистрибутива и версии утилиты; ориентируйтесь на fscrypt --help и справку пакета. Важный момент: меняется именно ключ протектора; данные в каталоге не перешифровываются целиком.
Резервное копирование, перенос и снапшоты
Как влияет fscrypt на бэкапы и миграции:
- Снимки на уровне гипервизора VDS (storage snapshots) всегда содержат шифротекст, независимо от того, «разблокирован» ли каталог в гостевой ОС. Это плюс для защиты данных «на полке».
- Резервные копии, которые вы делаете изнутри системы обычными инструментами (rsync, tar), видят расшифрованный вид, если каталог разблокирован. Чтобы сохранять бэкап в защищённом виде вне узла, добавляйте отдельный уровень шифрования (например, криптослой в самом бэкап-решении). Подробно о надёжной передаче и хранении бэкапов см. разбор про rclone с режимом crypt.
- Перенос каталога между серверами удобнее делать на приложенческом уровне (логическая миграция). Если нужен перенос шифрованного состояния «как есть», проще перемещать весь том (например, LUKS + файловая система внутри). Для
fscryptучитывайте, что политика и протектор привязаны к ФС/точке монтирования.
Минимальный чек-лист бэкапа каталога с fscrypt внутри гостевой ОС:
- Убедитесь, что бэкап-решение шифрует архив вне узла, если это требуется моделью угроз.
- Храните отдельно секреты для протекторов (пароли, ключевые файлы) и процедуры восстановления.
- Периодически тестируйте восстановление на стенде.
Совместное использование с 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:
- Проверяем поддержку ядра и ФС, устанавливаем инструменты:
apt update
apt install -y fscrypt e2fsprogs
zgrep FS_ENCRYPTION /proc/config.gz || zgrep FS_ENCRYPTION /boot/config-$(uname -r)
- Убеждаемся, что на разделе есть
encrypt(при необходимости включаем в офлайне):
tune2fs -l /dev/vdb1 | grep 'Filesystem features'
- Инициализируем
fscryptна точке монтирования:
fscrypt setup /srv
- Готовим каталог и шифруем его:
mkdir -p /srv/app/secret-store
fscrypt encrypt /srv/app/secret-store
# Выбираем Password protector и, если доступно, policy v2
- Разблокировка для сервисного аккаунта перед стартом приложения (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 для удобства. Дальше — эксплуатационная дисциплина: ротация ключей, логирование разблокировок и регулярные тесты восстановления доступа.


