Сброс забытого LUKS ключа — установка нового ключа
Если вы перезагрузили (ваш) сервер, и не можете смонтировать ваш зашифрованный 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
Имя тома находится в первой колонке вывода команды «df -h» после «/dev/mapper/», в этом примере имя тома «home1».
Следующая команда покажет листинг всех ключей шифрования всех разделов которые смонтированы в системе:
# dmsetup table --showkeys
home1: 0 197259264 crypt aes-cbc-essiv:sha256 607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c 0 8:17 4096
Поле после «aes-cbc-essiv:sha256» — зашифрованный пароль. Получим зашифрованный LUKS ключ и сохраним в файл:
# vi existinglukskey.txt
607f482870c795a9b1e307ffbfc6643eaa219e9ef8c6773de02cd298c8fcda3c
Итак, теперь сконвертируем полученный ключ из текстового файла в двоичный файл. Для этого воспользуемся командой «xxd»:
# xxd -r -p existinglukskey.txt existinglukskey.bin
В этом примере:
- -r опция для обратного преобразования. Это будет конвертировать hexdump в binary.
- -p опция для обработки postscript. Здесь мне трудно адекватно перевести руководство man (output in postscript continuous hexdump style. Also known as plain hexdump style).
- existinglukskey.txt входной файл.
- existinglukskey.bin выходной файл. Он будет содержать существующий зашифрованный LUKS пароль в двоичном файле.
И, наконец, добавим новый LUKS ключ используя выделенный в двоичный файл существующий ключ:
# cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat existinglukskey.bin)
Enter new passphrase for key slot:
Verify passphrase:
В этом примере:
- —master-key-file Определяет двоичный файл. Не используйте входной existinglukskey.txt файл. Используйте выходной existinglukskey.bin файл.
- Как видно, команда «cryptsetup luksAddKey» не задаёт вопрос о существующем LUKS пароле, так как он берётся из двоичного файла.
- Когда появляется приглашение командной строки «Enter new passphrase for key slot:», введите новый LUKS пароль. И, в этот раз, не забывайте его.
Дамп LUKS MasterKey
Вы также можете сделать дамп MasterKey и хранить его в безопасном месте. Помните, что используя MasterKey дамп кто угодно может иметь доступ к вашему LUKS разделу.
# cryptsetup luksDump --dump-master-key /dev/sdb1
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
LUKS header information for /dev/sdb1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Payload offset: 4096
UUID: 146d639a-757c-4bcb-aee6-8fe815345104
MK bits: 256
MK dump: 60 7f 48 28 70 c7 95 a9 b1 e3 07 ff bf c6 64 3e
aa 21 9e 9e f8 c6 77 3d e0 2c d2 98 c8 fc da 3c
Итак, используя вышеописанные методы, необходимо для дальнейших действий сделать следующее:
- Определить устройство(а) с зашифрованным LUKS разделом.
- Определить, какие слоты свободны для записи ключа(ей).
- При необходимости — добавить новый ключ (резервный).
Вот другой способ:
If you need to obtain the master key have A drive decrypted and run the following as root
dmsetup table --showkeys
copy the key and put it into a text file then run
xxd -r -p masterKey.txt masterKey.bin
you would use masterKey.bin in your cryptsetup command as the master key file
Provided you have the master key and are root
cryptsetup —master-key-file pathToMasterKey luksOpen /dev/sdX bHDD
mount /dev/mapper/bHDD /mnt/bHDD