Zmień hasło w systemie plików LUKS bez znajomości hasła

30

Mam serwer Debian Wheezy, który działa przez jakiś czas z zaszyfrowanym dyskiem. Hasło do zaszyfrowanego dysku ( /dev/sda5) zostało utracone, gdy mój zaszyfrowany plik hasła został uszkodzony.

Chciałbym móc zrestartować ten serwer, ale to oczywiście wymaga tego hasła. Ponieważ dysk jest wyraźnie w stanie odszyfrowanym, czy istnieje sposób na zmianę hasła bez znajomości starego?

cryptsetup luksChangeKey /dev/sda5 wymaga hasła woluminu.

Mógłbym oczywiście rsyncwszystko wyłączyć i odbudować, ale chciałbym tego uniknąć. Przeglądałem pamięć ( #cat /dev/mem | less), ale nie byłem w stanie jej znaleźć (co jest bardzo dobrą rzeczą!).

Ethan
źródło
2
Hmmmm .... Jaki byłby sens posiadania zaszyfrowanego systemu plików, gdyby tak łatwo było uzyskać do niego dostęp bez hasła.
mdpc
7
@mdpc: Twój quip nie ma sensu. On ma dostęp do systemu plików, ponieważ on miał hasło, gdy serwer ostatnim uruchomieniu.
G-Man mówi „Przywróć Monikę”
2
To, że MASZ hasło (i zostało uszkodzone), nie unieważnia mojego komentarza. Ogólnie rzecz biorąc, jeśli zapomnisz hasło do dowolnego rodzaju zaszyfrowanego materiału, powinno ono zostać utracone na zawsze, w przeciwnym razie jaki był sens szyfrowania go w pierwszej kolejności?
mdpc
3
@mdpc Czas teraźniejszy, ma bieżący dostęp do systemu plików.
Patrick
To samo pytanie na temat Superużytkownika: Zgubione hasło LUKS, otwarta szyfrowana partycja (brak odpowiedzi).
G-Man mówi „Reinstate Monica”

Odpowiedzi:

40

Tak, możesz to zrobić, uzyskując dostęp do klucza głównego podczas odszyfrowywania woluminu.

Szybkie i brudne dodanie nowego hasła:

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

devicei volume_namepowinny być odpowiednio ustawione.
volume_nameto nazwa odszyfrowanego woluminu, tego, w którym się widzisz /dev/mapper.


Wyjaśnienie:

Woluminy LUKS szyfrują swoje dane za pomocą klucza głównego. Każde dodane hasło po prostu przechowuje kopię tego klucza głównego zaszyfrowaną tym hasłem. Jeśli więc masz klucz główny, wystarczy użyć go w nowym gnieździe na klucz.

Pozwala rozerwać powyższe polecenie.

$ dmsetup table --showkeys $volume_name

To zrzuca garść informacji o aktywnie odszyfrowanym woluminie. Dane wyjściowe wyglądają następująco:

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

Pole nr 5 to klucz główny.

 

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

Nie pokażę wyniku tego, ponieważ są to dane binarne, ale to, co to robi, to pobrać klucz główny dla woluminu, a następnie przekształcić go w surowe dane binarne, które są potrzebne później.

 

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

To mówi cryptsetup, aby dodał nowy klucz do woluminu. Zwykle ta czynność wymaga istniejącego klucza, jednak --master-key-fileinformujemy, że chcemy zamiast tego użyć klucza głównego.
Jest <(...)to podstawianie i przekierowywanie poleceń powłoki. Zasadniczo wykonuje wszystko w środku, wysyła dane wyjściowe do potoku, a następnie zastępuje <(...)ścieżkę do tego potoku.

 

Tak więc całe polecenie jest tylko linijką, aby skondensować kilka operacji.

Patrick
źródło
Nie jestem pewien, czy robię coś źle, ale mój LUKS w ogóle nie pokazuje łańcucha takiego jak ten pokazany w przykładzie. To krótki, 9-cyfrowy numer. Również moje pokazuje jako „liniowy 8: 3”.
slm
@slm Jeśli się wyświetla linear, to nie jest to otwarty wolumin LUKS (niepoprawna wartość dla volume_namepodanego polecenia). Otwarty wolumin LUKS będzie miał cryptw 3. polu. W cryptsetup luksOpen /dev/foo barThe volume_namewartość będzie bar.
Patrick
Mam to teraz. Istnieje wolumin pod /dev/mappernazwą luks-...... To wolumin, którego musisz użyć, a nie LVM, zmapowany wolumin logiczny.
slm
1
Wygląda na to, że w ostatnich wersjach dmsetup format się dmsetup tablezmienił. Przynajmniej dla mnie klucz główny jest pokazany w kolumnie $6.
Karol Babioch,
@KarolBabioch prawdopodobnie nie podałeś nazwy woluminu?
frostschutz