К основному содержимому

LUKS: шифрование диска сервера и загрузка с ключом

Безопасность · 29.09.2026

Что такое 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 при выборе диска
← Назад в базу знаний Задать вопрос поддержке