Що таке 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 при виборі диска