Изменить пароль в файловой системе LUKS, не зная пароля


30

У меня есть сервер Debian Wheezy, который некоторое время работал с зашифрованным диском. Пароль для зашифрованного диска ( /dev/sda5) был потерян, когда мой файл зашифрованного пароля был поврежден.

Я хотел бы иметь возможность перезагрузить этот сервер, но для этого, конечно, потребуется этот пароль. Поскольку диск явно находится в расшифрованном состоянии, есть ли способ изменить пароль, не зная старого?

cryptsetup luksChangeKey /dev/sda5 требует пароль тома.

Я мог бы, конечно, rsyncвсе отключить и восстановить, но я бы хотел этого избежать. Я просмотрел память ( #cat /dev/mem | less), но не смог ее найти (что очень хорошо!).


2
Хмммм .... Какой смысл иметь зашифрованную файловую систему, если бы было так легко получить доступ к ней без пароля.
mdpc

7
@mdpc: Ваш клеветник не имеет смысла. У него есть доступ к файловой системе, потому что у него был пароль при последней загрузке сервера.
G-Man говорит: «Восстановите Монику»

2
Тот факт, что у вас был пароль (и он был поврежден), не лишает законной силы мой комментарий. В общем, если вы забудете пароль для любого типа зашифрованного материала, он должен быть утерян навсегда, в противном случае, зачем вообще его шифровать?
mdpc

3
@mdpc Настоящее время, он имеет текущий доступ к файловой системе.
Патрик

Ответы:


40

Да, вы можете сделать это, получив доступ к главному ключу во время расшифровки тома.

Быстро и грязно добавить новую фразу-пароль:

device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)

deviceи volume_nameдолжен быть установлен соответствующим образом.
volume_nameимя расшифрованного тома, который вы видите в /dev/mapper.


Объяснение:

Тома LUKS шифруют свои данные с помощью мастер-ключа. Каждая добавленная вами парольная фраза просто хранит копию этого мастер-ключа, зашифрованную этой парольной фразой. Поэтому, если у вас есть мастер-ключ, вам просто нужно использовать его в новом слоте ключа.

Давайте разберем команду выше.

$ dmsetup table --showkeys $volume_name

Это сбрасывает кучу информации об активно дешифрованном томе. Вывод выглядит так:

0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096

Поле № 5 является главным ключом.

 

$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p

Не собираюсь показывать выходные данные этого, поскольку это двоичные данные, но для этого нужно получить главный ключ для тома, а затем преобразовать его в необработанные двоичные данные, которые понадобятся позже.

 

$ cryptsetup luksAddKey $device --master-key-file <(...)

Это говорит cryptsetup добавить новый ключ к тому. Обычно для этого действия требуется существующий ключ, однако мы используем его, --master-key-fileчтобы сообщить, что вместо этого мы хотим использовать мастер-ключ. Это оболочка командной подстановки & перенаправления. Он в основном выполняет все внутри, отправляет вывод в канал, а затем заменяет путь к этому каналу.
<(...)<(...)

 

Таким образом, вся команда - это всего лишь одна строка для сжатия нескольких операций.


Я не уверен, что делаю что-то не так, но мои LUKS вообще не показывают строку, подобную той, что вы показываете в примере. Это короткий маленький 9-значный номер. Также мой показывает как "линейный 8: 3".
СЛМ

@slm Если он отображается linear, то это не открытый том LUKS (неверное значение volume_nameв предоставленной команде). Открытый том LUKS будет иметь cryptв 3-м поле. В cryptsetup luksOpen /dev/foo bar, volume_nameзначение будет bar.
Патрик

Понял сейчас. Там есть том под /dev/mapperназванием luks-...... Это том, который вам нужно использовать, а не LVM, сопоставленный логический том.
SLM

1
Похоже, что в последних версиях dmsetup формат dmsetup tableизменился. По крайней мере, для меня мастер-ключ показан в столбце $6.
Кароль Бабиох

@KarolBabioch вы наверное не указали название тома?
frostschutz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.