До основного вмісту

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 при виборі диска
← Назад до бази знань Поставити питання підтримці