Когда речь заходит о шифровании на сервере, большинство вспоминает LUKS2 и полное шифрование диска на уровне блочного устройства. На «железных» серверах обычно всё понятно: админ есть рядом с консолью, вводит пароль при загрузке, система стартует. На облачном VDS так сделать сложнее: нет физической консоли, есть только веб-консоль провайдера (иногда неудобная) и SSH, который поднимается уже после расшифровки диска.
В итоге многие отказываются от шифрования, потому что не хотят каждый раз руками вводить пароль через неудобную веб-консоль после перезагрузки. Но это не обязательно: можно настроить auto-unlock для LUKS2, чтобы зашифрованный том на VDS открывался автоматически.
В этой статье разберём, какие есть варианты, чем они отличаются по безопасности, и как практически настроить автоснятие блокировки через crypttab и дополнительные ключи.
Что даёт шифрование LUKS2 на VDS и какие у него ограничения
Сначала нужно честно ответить на вопрос: что именно вы защищаете, когда включаете LUKS2 на VDS. На физическом сервере LUKS защищает от кражи дисков или всего железа. На виртуальном сервере модель угроз другая: гипервизор и хранилище контролирует провайдер, и формально он может получить доступ к данным.
Однако LUKS2 на VDS всё равно полезен в нескольких сценариях:
- минимизация последствий утечек снапшотов и бэкапов на стороне хранилища;
- защита данных при ошибочной утилизации или переиспользовании блочных томов;
- дополнительный барьер в случае компрометации части инфраструктуры, но не гостевой ОС;
- снижение риска при временной передаче диска между проектами внутри одного облака.
Но важно понимать: если вы доверяете VDS минимуму (например, считаете провайдера потенциальным злоумышленником), то простое LUKS-шифрование на том же самом гипервизоре мало что даёт. Это уже разговор про отдельные HSM, вынос ключей на внешний узел, удалённый auto-unlock и достаточно сложные схемы.
В этой статье фокус — практичные конфигурации: когда вы хотите закрыть базовые риски и не усложнять инфраструктуру до паранойи, но при этом иметь рабочий LUKS2 с удобным автозапуском.
Как устроен LUKS2 autounlock на уровне Linux
Авторазблокировка LUKS-тома при старте системного systemd и initramfs опирается на два основных механизма:
- описание зашифрованных устройств в
/etc/crypttab; - наличие способа получить ключ (пароль, ключевой файл, скрипт) в момент загрузки.
Минимальный путь выглядит так:
- У вас уже создан LUKS2-том (например,
/dev/vdbили раздел/dev/vda2). - Вы добавляете к нему второй ключ (keyslot) в виде файла.
- Размещаете этот файл в доступном при загрузке месте.
- Описываете устройство и ключ в
/etc/crypttab. - Обновляете initramfs и загружаетесь.
Сразу видно главный компромисс: где вы храните ключевой файл. Если он лежит на том же VDS и на том же диске, то криптостойкость против физического доступа к хранилищу падает. Но при этом вы выигрываете в удобстве эксплуатации.

Варианты auto-unlock: от простого к более защищённому
На практике на VDS чаще всего используют три подхода к auto-unlock LUKS2:
- локальный ключевой файл на незашифрованном разделе (просто, но минимальная безопасность);
- ключ в initramfs (чуть лучше с точки зрения отделения от данных, но без магии);
- удалённый auto-unlock (ключ приходит по сети с доверенного узла).
Каждый подход можно донастроить: использовать разные keyslot, добавлять дополнительный интерактивный пароль, включать fallback-режимы, чтобы не получить «кирпич», если что-то пойдёт не так.
Базовая подготовка: создаём LUKS2-том и файловую систему
Предположим, у вас есть VDS с вторым диском /dev/vdb, который вы хотите зашифровать и монтировать как /data. Ниже — пример, адаптируйте имена устройств под свою систему.
Шаг 1. Инициализируем LUKS2
cryptsetup luksFormat --type luks2 /dev/vdb
Система попросит подтвердить и ввести парольный ключ (passphrase). Это будет первый keyslot — интерактивный.
Шаг 2. Открываем том
cryptsetup open /dev/vdb cryptdata
Теперь у вас появится устройство /dev/mapper/cryptdata.
Шаг 3. Создаём файловую систему и точку монтирования
mkfs.ext4 /dev/mapper/cryptdata
mkdir -p /data
mount /dev/mapper/cryptdata /data
Добавляем ключевой файл для autounlock
Теперь сделаем второй keyslot на LUKS2-томе, привязанный не к паролю, а к ключевому файлу. Файл может храниться:
- на root-разделе (если он не зашифрован);
- в initramfs;
- на отдельном томе (например, другом блочном устройстве или сетевой FS, если она поднимается до расшифровки).
Шаг 1. Создаём ключевой файл
mkdir -p /root/keys
chmod 700 /root/keys
head -c 64 /dev/urandom > /root/keys/cryptdata.key
chmod 600 /root/keys/cryptdata.key
Размер в 64 байта — обычная практика для LUKS2-ключа. Слишком короткий ключ бессмысленно ослабляет защиту.
Шаг 2. Добавляем keyslot с этим ключом
cryptsetup luksAddKey /dev/vdb /root/keys/cryptdata.key
Команда спросит исходный пароль (тот, что вы задавали при luksFormat) и запишет новый keyslot для ключевого файла.
Не удаляйте интерактивный keyslot с паролем. Он нужен как аварийный вариант входа в случае, если что-то сломается с auto-unlock или ключевой файл станет недоступен.
Авторазблокировка через /etc/crypttab
Теперь опишем устройство в /etc/crypttab, чтобы systemd или initramfs умел его открывать при загрузке.
Строка в crypttab имеет формат:
имя_маппера источник ключевой_файл опции
В нашем случае это будет примерно так:
cryptdata /dev/vdb /root/keys/cryptdata.key luks,discard
Типичный набор опций:
luks— указывает, что используется LUKS;discard— включает TRIM или UNMAP (если хранилище его поддерживает);nofail— не останавливать загрузку системы, если устройство не удалось открыть;x-systemd.device-timeout=— настраивает таймаут ожидания.
Например, более аккуратная строка может выглядеть так:
cryptdata /dev/vdb /root/keys/cryptdata.key luks,discard,nofail,x-systemd.device-timeout=30s
Не забываем про /etc/fstab
Чтобы файловая система монтировалась автоматически, добавьте запись в /etc/fstab:
/dev/mapper/cryptdata /data ext4 defaults,nofail 0 2
После правок проверьте конфигурацию без перезагрузки:
systemctl daemon-reload
systemctl restart systemd-cryptsetup@cryptdata.service
mount -a
Если ошибок нет и том смонтировался, можно планировать перезагрузку VDS.
Где хранить ключ: компромиссы безопасности
Самый спорный момент в auto-unlock — место хранения ключевого файла. На VDS это всегда компромисс между удобством и уровнем доверия к платформе.
Сценарий 1. Ключ на незашифрованном root-разделе
Это самый простой и, по сути, минимально безопасный вариант. При этом он:
- защищает от простого копирования блочного устройства без полного доступа к VM;
- не защищает от снимков всей VM (вместе с root-FS и ключом);
- не защищает от root-доступа в гостевой системе.
Если вы считаете, что угроза — это в первую очередь утечка отдельных томов или бэкапов хранилища, а не захват самой VM, такой вариант уже приносит пользу.
Сценарий 2. Ключ в initramfs
Чуть более аккуратный подход — упаковать ключ в initramfs, а не хранить его как файл в файловой системе. Это не даёт радикального прироста защиты, но усложняет прямое извлечение ключа на уровне root-FS.
Схема:
- Кладёте ключ в каталог, попадающий в initramfs (например,
/etc/cryptkeys). - Правите хуки сборки initramfs (например, для
dracutилиupdate-initramfs), чтобы ключ копировался. - В
crypttabуказываете путь, по которому ключ будет доступен в раннем юзерспейсе.
Пример для Debian или Ubuntu с initramfs-tools может выглядеть так:
mkdir -p /etc/cryptkeys
cp /root/keys/cryptdata.key /etc/cryptkeys/
chmod 600 /etc/cryptkeys/cryptdata.key
Создаёте простой скрипт /etc/initramfs-tools/hooks/cryptkeys:
#!/bin/sh
set -e
PREREQ=""
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
mkdir -p ${DESTDIR}/etc/cryptkeys
copy_file config /etc/cryptkeys/cryptdata.key ${DESTDIR}/etc/cryptkeys/cryptdata.key
Не забудьте сделать его исполняемым и пересобрать initramfs:
chmod +x /etc/initramfs-tools/hooks/cryptkeys
update-initramfs -u
Теперь в /etc/crypttab можно ссылаться на /etc/cryptkeys/cryptdata.key — он будет доступен уже в ранней стадии загрузки.
Сценарий 3. Удалённый auto-unlock (network key)
Для более продвинутой безопасности ключ можно хранить на отдельном доверенном сервере, а на VDS только выполнять протокол получения ключа при загрузке:
- VDS поднимает сеть в initramfs;
- обращается к удалённому сервису (по TLS, с аутентификацией TLS-клиентом, токеном и так далее);
- получает ключ, открывает LUKS2-том и продолжает загрузку.
Это схемы с использованием clevis, Tang и других инструментов. Они уже выходят за рамки базовой статьи, но для полноты картины важно понимать: так можно разнести риски между VDS и отдельным узлом, где хранятся ключи. При утечке только диска VDS данные останутся зашифрованными.
Тонкости настройки crypttab для LUKS2 на VDS
Чтобы autounlock работал стабильно, особенно на облачных платформах, нужно аккуратно подобрать опции crypttab и следить за именованием устройств.
Используйте UUID вместо /dev/vdX
Блочные устройства могут «переезжать» по именам (например, при добавлении дисков). Лучше сразу использовать UUID:
blkid /dev/vdb
Вы получите строку вида:
/dev/vdb: UUID="11111111-2222-3333-4444-555555555555" TYPE="crypto_LUKS"
В crypttab тогда можно записать:
cryptdata UUID=11111111-2222-3333-4444-555555555555 /root/keys/cryptdata.key luks,discard,nofail
Аналогичный подход стоит использовать и в /etc/fstab, чтобы монтирование не ломалось при смене порядка устройств.
Учитывайте особенности загрузчика и initramfs
Не все образы Linux в облаках одинаково умеют работать с зашифрованными корневыми томами. Для начала логично настраивать LUKS2 на дополнительных дисках данных, а root оставлять нешифрованным. Так вы:
- избежите проблем с загрузчиком, который не знает про LUKS;
- сможете экспериментировать с
crypttab, не ломая загрузку всей системы; - сохраните SSH-доступ при неудачном автозапуске LUKS, если root жив.
Когда получите стабильную схему на дисках данных, можно уже думать о переносе root в LUKS2: там появляется отдельная история с cryptroot в initramfs, параметрами ядра и fallback-консолью.
Дополнительно имеет смысл совместить это с жёсткой настройкой системных юнитов и сервисов. Подробно про hardening systemd-сервисов я разбирал в материале усиление безопасности systemd и песочницы сервисов на VDS.

Fail-safe: как не получить «кирпич» при неудачном auto-unlock
Настройка LUKS2 с autounlock на VDS потенциально опасна: ошибка в crypttab или initramfs может привести к тому, что машина перестанет грузиться до стадии SSH. Нужно заранее предусмотреть пути отступления.
1. Не удаляйте парольный keyslot
Всегда оставляйте хотя бы один интерактивный пароль на LUKS2, даже если используете ключевой файл. Тогда вы сможете открыть том вручную из rescue-образа или через веб-консоль провайдера.
2. Используйте параметр nofail и разумные таймауты
В crypttab добавьте nofail и ограничьте время ожидания устройства. Тогда если диск или ключевой файл по какой-то причине недоступны, система продолжит загрузку без зашифрованного тома. Например:
cryptdata UUID=11111111-2222-3333-4444-555555555555 /root/keys/cryptdata.key luks,discard,nofail,x-systemd.device-timeout=20s
В этом случае сервер поднимется, SSH будет доступен, а вы уже руками разберётесь с проблемой и смонтируете том позже.
3. Тестируйте пошагово
Не стоит сразу включать сложный сценарий с initramfs или удалённым ключом на боевом VDS:
- сначала сделайте простой autounlock с ключом на root;
- убедитесь, что
crypttabработает, перезагрузитесь несколько раз; - потом переносите ключ в initramfs или на отдельный том;
- всегда держите возможность зайти в rescue-режим от провайдера.
Диагностика проблем с crypttab и LUKS2
Частые проблемы при auto-unlock на VDS:
- не найден ключевой файл (ошибка в пути или он не попал в initramfs);
- не найдено исходное устройство (ошибка в UUID или имя блочного устройства изменилось);
- таймаут ожидания устройства (диск поднимается дольше, чем ждёт systemd);
- несовместимость версий
cryptsetupи опций LUKS2.
Полезные команды и файлы для отладки:
journalctl -b— смотрим сообщенияsystemd-cryptsetupи ошибки монтирования;systemctl status systemd-cryptsetup@cryptdata.service— статус конкретного устройства;cryptsetup luksDump /dev/vdb— проверяем keyslot и метаданные LUKS2;lsinitramfs /boot/initrd.img-$(uname -r)или команды для разбора initramfs — проверяем, попал ли ключ внутрь.
Особенности LUKS2, о которых стоит помнить на VDS
LUKS2 по сравнению с LUKS1 добавляет больше гибкости и метаданных, но при этом появляются некоторые нюансы:
- форматирует диск с контейнером метаданных LUKS2, который может быть более чувствителен к «кривым» снапшотам и миграциям;
- использует JSON-метаданные; их лучше не править руками, а работать только через
cryptsetup; - поддерживает более продвинутые PBKDF (например,
argon2id), что увеличивает время подбора, но и удлиняет время открытия тома (заметно на слабых VDS).
Для серверов с ограниченными ресурсами стоит аккуратно подбирать параметры PBKDF: слишком «тяжёлая» настройка может заметно замедлить автозагрузку, особенно если вы используете сетевой auto-unlock, где каждая лишняя миллисекунда на расчёт ключа увеличивает общее время старта.
Когда autounlock на VDS действительно оправдан
Не в каждом проекте нужен LUKS2 с auto-unlock. Он уместен, когда:
- вы хотите шифровать данные на диске (бэкапы, пользовательские файлы, базы) по требованиям политики или регуляторов;
- рутинные перезагрузки происходят без участия администратора (автообновления ядра, миграции);
- веб-консоль провайдера неудобна, и вам нужно, чтобы сервер поднимался в unattended-режиме;
- вы готовы осознанно принять компромисс: часть угроз снимается, часть остаётся.
Если же вы строите инфраструктуру с нулевым доверием к платформе, потребуется продвинутая схема с отдельным KMS, clevis или Tang, аппаратными токенами, а иногда и выносом критичных данных за пределы облака. Это уже отдельная архитектурная задача и серьёзное проектирование.
Резюме
Настройка LUKS2 с autounlock на VDS — вполне решаемая задача, если подходить к ней по шагам и понимать компромиссы:
- создаём LUKS2-том и файловую систему, монтируем вручную;
- добавляем keyslot с ключевым файлом;
- настраиваем
crypttabиfstabдля автозапуска; - выбираем место хранения ключа: root, initramfs или удалённый сервис;
- оставляем интерактивный пароль, используем
nofailи таймауты, тестируем пошагово; - мониторим логи
systemd-cryptsetupи initramfs при первых перезагрузках.
Так вы получите зашифрованный LUKS2-том на VDS, который автоматически расшифровывается при старте, не требуя ручного ввода пароля через консоль, и при этом сохраняет аварийный путь восстановления при любых сбоях.


