Змініть пароль у файловій системі LUKS, не знаючи пароля


30

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

Я хотів би мати можливість перезавантажити цей сервер, але для цього, звичайно, знадобиться цей пароль. Оскільки накопичувач явно знаходиться в розшифрованому стані, чи є спосіб змінити пароль, не знаючи старого?

cryptsetup luksChangeKey /dev/sda5 вимагає пароль гучності.

Я, звичайно, міг би rsyncвсе відібрати і відновити, але хотів би цього уникнути. Я переглянув пам'ять ( #cat /dev/mem | less), але не зміг її знайти (що дуже добре!).


2
Хммм .... Який би сенс мати зашифровану файлову систему, якби так легко отримати доступ до неї без пароля.
mdpc

7
@mdpc: Ваш запит не має сенсу. У нього є доступ до файлової системи, оскільки він мав пароль при останньому завантаженні сервера.
G-Man каже: "Відновіть Моніку"

2
Тільки тому, що ви HAD пароль (і він отримав пошкодження), не скасовує мій коментар. Загалом, якщо ви забудете пароль для будь-якого типу зашифрованого матеріалу, його слід назавжди втратити, інакше в чому полягав сенс його шифрування?
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

@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.