# 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/uk/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/uk/kb/hranenie-sekretov-vault/) або зашифрованим через [GPG](https://www.zevshost.net/uk/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/uk/kb/linux-file-permissions/) і врахували AES-NI при виборі диска

---

Джерело: https://www.zevshost.net/uk/kb/luks-shifrovanie-diska/
