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

> Шифрование диска LUKS защищает данные сервера при физическом изъятии носителя: luksFormat, crypttab, keyfile, Clevis+Tang и backup заголовка на практике.

## Что такое LUKS и зачем шифровать диск сервера

LUKS (Linux Unified Key Setup) — стандартная подсистема шифрования дисков в Linux поверх dm-crypt. LUKS шифрует блочное устройство целиком: раздел, LVM-том или весь диск, и без правильного ключа данные на нём выглядят как случайный набор байт. Для арендованного VDS или выделенного сервера это не абстрактная защита: физический диск на площадке провайдера не находится под полным контролем клиента, его могут изъять, заменить в рамках сервисных работ или списать в утиль с остатком данных. Шифрование диска LUKS снимает этот риск — без ключа содержимое непригодно для чтения.

Важно понимать модель угроз: LUKS защищает данные в состоянии покоя (data at rest) — на выключенном сервере или на изъятом носителе. Пока сервер работает и раздел смонтирован, данные доступны в открытом виде любому процессу с нужными правами, поэтому LUKS не заменяет [защиту доступа по SSH](https://www.zevshost.net/ru/kb/ssh-hardening-server/) и разграничение прав в системе.

## 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
```

Файл бэкапа храните отдельно от сервера — например, в [хранилище секретов](https://www.zevshost.net/ru/kb/hranenie-sekretov-vault/) или зашифрованным через [GPG](https://www.zevshost.net/ru/kb/gpg-shifrovanie-failov/) перед выгрузкой во внешнее хранилище. 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](https://www.zevshost.net/ru/kb/linux-file-permissions/) и учли AES-NI при выборе диска

---

Источник: https://www.zevshost.net/ru/kb/luks-shifrovanie-diska/
