Шифрування дисків LUKS: що робити, коли забули пароль?

LUKS — система надійного шифрування жорстких дисків, розроблена для ОС Linux.

При початковому шифруванні вмісту диска (наприклад, в процесі установки операційної системи), необхідно вказати пароль, який буде використовуватися кожен раз при відкритті розділу LUKS.

Надалі, LUKS-пароль вводиться лише одного разу — під час завантаження ОС, тобто ви можете монтувати й демонтувати шифрований розділ стільки разів, скільки буде необхідно, без повторного введення пароля.

При роботі користувача з системою, що містить LUKS-розділи, можуть виникнути такі кейси:

  • ви забули свій пароль LUKS або отримали систему з зашифрованим диском від когось без передачі LUKS-ключа. Після перезавантаження системи, ви не зможете увійти в неї.
  • політики безпеки вимагають частої зміни LUKS-паролів. При цьому необхідно змінити LUKS-ключі, не пошкодивши дані розділу

Вісім слотів LUKS

Один LUKS-розділ може відкриватися одним з 8 можливих ключів. Звичайно, можна використовувати і єдиний ключ в одному слоті.

Щоб дізнатися поточний стан всіх слотів, використовується команда cryptsetup luksDump:

# cryptsetup luksDump /dev/sdb1 | grepSlotSlot
Key0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

У наведеному вище прикладі:

  • /DEV/sdb1 є LUKS-розділом
  • номера слотів починаються з 0
  • ENABLED вказує, що слот вже використовується
  • в цьому випадку для шифрованого розділу задано 2 паролі й вільні ще 6

Додавання нового LUKS-ключа

Для додавання нового ключа LUKS на зашифрований розділ /dev/sdb1 використовується команда luksAddKey:

# cryptsetup luksAddKey /dev/sdb1
Enter any passphrase:
Enter new passphrase for key slot:
Verify passphrase:

Тут:

  • при запиті “Enter any passphrase:” потрібно ввести один з вже наявних паролів для LUKS (наприклад, для слотів 0 і 1)
  • після цього потрібно ввести новий пароль, який займе новий слот відповідно (тут — слот 2)

Перевіримо, додався новий ключ:

# cryptsetup luksDump /dev/sdb1 | grep Slot
SlotKey0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Додавання нового LUKS-ключа в певний слот

Замість призначення ключа LUKS в перший вільний слот, ми можемо вказати номер певного слота за допомогою опції -S номер_слота (в прикладі нижче, слот №5):

# cryptsetup luksAddKey /dev/sdb1 -S 5

Перевірка показує, що все пройшло успішно:

# cryptsetup luksDump /dev/sdb1 | grep Slot
SlotKey0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: ENABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: ENABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Видалення наявного ключа

Для видалення певного ключа використовується команда cryptsetup luksRemoveKey, після чого у відповідь на запрошення “Enter LUKS passphrase to be deleted:” вводиться пароль того ключа, який ми хочемо видалити:

# cryptsetup luksRemoveKey /dev/sdb1
Enter LUKS passphrase to be deleted:

Видалення наявного ключа за номером слота

Щоб видалити якийсь певний ключ LUKS, досить знати парольну фразу хоча б для одного зі слотів:

# cryptsetup luksKillSlot /dev/sdb1 2
Enter any remaining LUKS passphrase:

Перевірка показує, що все вийшло правильно:

# cryptsetup luksDump /dev/sdb1 | grep Slot
SlotKey0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Додавання ключа LUKS з файлу

Новий ключ LUKS можна додати з уже наявного файлу ключів:

# cryptsetup luksAddKey  /dev/sdb1 masterkeyfile
Enter any passphrase:

Тут:

  • masterkeyfile задає ім’я бінарного файлу, що містить ключ LUKS
  • при запиті “Enter any passphrase:” вводиться будь-який з чинних паролів для LUKS-розділу /dev/sdb1
  • для ключа з masterkeyfile пароль вводити не потрібно

Скидання забутого ключа LUKS — отримання чинного ключа

Якщо ви перезавантажили сервер і не в змозі змонтувати зашифрований розділ LUKS, тому що ви забули свій пароль LUKS, то вам не пощастило.

Але, якщо зашифрований розділ LUKS вже відкритий і ви ще не перезавантажили систему, тобто ви забули пароль LUKS для розділу, який вже змонтований, ви можете призначити новий ключ LUKS.

У цьому сценарії, ви можете зробити наступні два кроки:

  • витягти поточний зашифрований ключ з розділу LUKS
  • створити новий LUKS-ключ, використовуючи витягнутий вище зашифрований ключ

У цьому прикладі, розділ /home1 зашифрований LUKS, але пароль до нього забутий.

# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1             127G   44G   76G  37% /

/dev/mapper/home1      93G  188M   88G   1% /home1

Назва тому — все, що слід в рядку після /dev/mapper / (1-й стовпець. Так, в нашому прикладі ім’я тому —  “home1”)

Команда dmsetup table -showkeys покаже зашифровані ключі всіх розділів, які встановлені на вашій системі.

# dmsetup table --showkeys
home1: 0 197259264 crypt aes-cbc-essiv:sha256 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c 0 8:17 4096

Частина поля після “AES-CBC-essiv: sha256” є зашифрованим паролем. Зберігаємо його в текстовий файл:

# VI existinglukskey.txt
607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c

Скидання забутого пароля LUKS — створення виконуваного файлу ключа

Тепер ми повинні перетворити цей чинний ключ з текстового файлу у двійковий файл. Використовуємо команду XXD:

# XXD -r -p existinglukskey.txt existinglukskey.bin

  • -r опція реверса (оскільки нам потрібен бінарник з тексту)
  • -p вказує на безперервний формат дампу
  • existinglukskey. txt — вхідний файл
  • existinglukskey.bin — файл, який буде містити наявний зашифрований пароль LUKS в бінарному вигляді

Скидання забутого ключа LUKS — додавання нового ключа

Нарешті, додаємо новий ключ LUKS, використовуючи наявний ключ LUKS, витягнутий в бінарний файл.

# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat existinglukskey.bin)
Enter new passphrase for key slot:
Verify passphrase:

Тут:

  • -master-key-file визначає бінарний файл з ключем
  • якийсь чинний пароль luksAddKey не запитує, оскільки він взяв його з виконуваного файлу
  • при запиті “Enter new passphrase for key slot:”, вкажіть новий пароль для LUKS. Постарайтеся його не забути.

Але якщо LUKS-пароль забутий вже після перезавантаження системи, дороги назад, на жаль, немає.

Залишити відповідь

Відповідь на коментар

Коментарі (1)

    Дякуємо, що поділились