Что такое LUKS и зачем шифровать диск сервера
LUKS (Linux Unified Key Setup) — стандартная подсистема шифрования дисков в Linux поверх dm-crypt. LUKS шифрует блочное устройство целиком: раздел, LVM-том или весь диск, и без правильного ключа данные на нём выглядят как случайный набор байт. Для арендованного VDS или выделенного сервера это не абстрактная защита: физический диск на площадке провайдера не находится под полным контролем клиента, его могут изъять, заменить в рамках сервисных работ или списать в утиль с остатком данных. Шифрование диска LUKS снимает этот риск — без ключа содержимое непригодно для чтения.
Важно понимать модель угроз: LUKS защищает данные в состоянии покоя (data at rest) — на выключенном сервере или на изъятом носителе. Пока сервер работает и раздел смонтирован, данные доступны в открытом виде любому процессу с нужными правами, поэтому LUKS не заменяет защиту доступа по SSH и разграничение прав в системе.
Full-disk encryption или шифрование только раздела /data — что выбрать
Full-disk encryption шифрует весь диск, включая корневой раздел, и требует ввода пароля или ключа ещё до старта системы — обычно на этапе загрузчика GRUB. Это максимальная защита, но на удалённом сервере без доступа к консоли IPMI/KVM она рискованна: если разблокировка не пройдёт автоматически, сервер не поднимется, а вы физически не сможете подойти и ввести пароль.
Практичнее для аренды VDS и выделенных серверов — шифровать только раздел с данными, например /dev/sdb1, смонтированный как /data. Система загружается как обычно, а зашифрованный раздел открывается отдельно скриптом или автоматически через crypttab. Такой подход хорошо сочетается с готовыми панелями управления — cPanel или ISPmanager 6, которые не требуют, чтобы вся система была под LUKS.
| Вариант | Что защищено | Риск при удалённой загрузке |
|---|---|---|
| Full-disk encryption | Вся ОС и данные | Высокий без IPMI/KVM |
| Шифрование /data | Только раздел с данными | Низкий, ОС грузится сама |
| LVM поверх LUKS | Гибкое разбиение зашифрованного тома | Средний, зависит от initramfs |
Как создать LUKS-контейнер: luksFormat и luksOpen на практике
Перед форматированием убедитесь, что раздел не содержит нужных данных — luksFormat необратимо уничтожает всё, что было на устройстве. Минимальный рабочий сценарий для раздела /dev/sdb1:
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 data
mkfs.ext4 /dev/mapper/data
mkdir -p /data
mount /dev/mapper/data /data
Команда luksFormat по умолчанию использует AES в режиме XTS с ключом 256 бит и запрашивает пароль-фразу для первого слота. После luksOpen устройство появляется в /dev/mapper/data и монтируется как обычный раздел. Проверить параметры контейнера можно командой cryptsetup luksDump /dev/sdb1.
Как настроить автоматическую разблокировку при загрузке через /etc/crypttab
Без автоматизации сервер после перезагрузки остановится на запросе пароля LUKS в консоли, недоступной удалённо. Запись в /etc/crypttab вида:
data /dev/sdb1 /root/keys/data.key luks
указывает системе открывать раздел ключевым файлом /root/keys/data.key при загрузке. Ключевой файл добавляется в LUKS отдельным слотом: cryptsetup luksAddKey /dev/sdb1 /root/keys/data.key, а сам файл нужно держать на защищённом носителе с правами chmod 400 — если он лежит на том же диске без дополнительной защиты, шифрование теряет смысл против изъятия всего сервера целиком.
Для сервера без физического доступа более надёжный вариант — network-bound disk encryption через Clevis и Tang: ключ разблокировки автоматически получается по сети от отдельного Tang-сервера в момент загрузки, и диск не расшифруется, если сервер физически унесли в другую сеть. Настройка выполняется утилитой clevis luks bind после привязки Tang-адвертайзмента — подробности есть в документации upstream-проекта Clevis/Tang.
Как резервировать LUKS header и управлять ключевыми слотами
LUKS-заголовок хранит мастер-ключ в зашифрованном виде и метаданные слотов. Если header повреждён — например, часть диска перезаписана — данные не восстановить, даже зная пароль. Backup обязателен и делается до ввода контейнера в эксплуатацию:
cryptsetup luksHeaderBackup /dev/sdb1 --header-backup-file /root/keys/sdb1-header.img
Файл бэкапа храните отдельно от сервера — например, в хранилище секретов или зашифрованным через GPG перед выгрузкой во внешнее хранилище. LUKS поддерживает до 8 ключевых слотов, что позволяет иметь отдельный пароль администратора и отдельный keyfile для автозагрузки без обмена одним общим секретом:
cryptsetup luksAddKey /dev/sdb1— добавить новый пароль или keyfile в свободный слотcryptsetup luksRemoveKey /dev/sdb1— удалить конкретный пароль из слотаcryptsetup luksKillSlot /dev/sdb1 1— принудительно очистить слот по номеру
Итог: чек-лист LUKS-шифрования для арендованного сервера
Современные процессоры почти всегда поддерживают AES-NI — аппаратное ускорение AES, и потери от шифрования обычно не превышают нескольких процентов производительности диска. Проверить поддержку можно командой grep aes /proc/cpuinfo; без неё шифрование заметно нагружает CPU при больших объёмах записи.
- Определили, нужен ли full-disk encryption или достаточно шифрования раздела
/data - Создали контейнер через
cryptsetup luksFormatи проверили егоluksDump - Настроили
/etc/crypttabс keyfile или Clevis+Tang для автозагрузки без консоли - Сделали
luksHeaderBackupи вынесли файл за пределы сервера - Добавили отдельные ключевые слоты для администратора и для автоматизации
- Проверили права на ключевые файлы по базовым правилам доступа Linux и учли AES-NI при выборе диска