Cambia password su un filesystem LUKS senza conoscere la password


30

Ho un server Debian Wheezy che è in esecuzione da un po 'con un'unità crittografata. La password per l'unità crittografata ( /dev/sda5) è andata persa quando il mio file di password crittografato è stato danneggiato.

Mi piacerebbe poter riavviare questo server, ma questo ovviamente richiederà quella password. Poiché l'unità è chiaramente in uno stato decrittografato, esiste un modo per modificare la password senza conoscere quella precedente?

cryptsetup luksChangeKey /dev/sda5 richiede la password del volume.

Ovviamente potrei rsynctutto e ricostruire, ma vorrei evitarlo. Ho guardato attraverso la memoria ( #cat /dev/mem | less), ma non sono riuscito a trovarlo (che è una cosa molto buona!).


2
Hmmmm .... Quale sarebbe il punto di avere un filesystem crittografato se fosse così facile accedervi senza la password.
mdpc,

7
@mdpc: la tua battuta non ha senso. Egli ha accesso al file system, perché lui aveva la password quando l'ultimo server avviato.
G-Man dice 'Reinstate Monica' il

2
Solo perché hai AVUTO la password (ed è stata corrotta) non invalida il mio commento. In generale, se si dimentica la password per qualsiasi tipo di materiale crittografato, dovrebbe essere persa per sempre, altrimenti che senso aveva crittografarlo in primo luogo?
mdpc,

3
@mdpc Tempo presente, ha accesso corrente al filesystem.
Patrick,

Risposte:


40

Sì, puoi farlo accedendo alla chiave principale mentre il volume viene decrittografato.

Il veloce e sporco per aggiungere una nuova passphrase:

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

devicee volume_namedovrebbe essere impostato in modo appropriato.
volume_nameè il nome del volume decrittografato, quello che vedi in /dev/mapper.


Spiegazione:

I volumi LUKS crittografano i loro dati con una chiave master. Ogni passphrase che aggiungi semplicemente memorizza una copia di questa chiave master crittografata con quella passphrase. Quindi se hai la chiave principale, devi semplicemente usarla in un nuovo slot per chiavi.

Consente di separare il comando sopra.

$ dmsetup table --showkeys $volume_name

Questo scarica un sacco di informazioni sul volume attivamente decifrato. L'output è simile al seguente:

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

Il campo n. 5 è la chiave principale.

 

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

Non mostrerà l'output di questo dato che si tratta di dati binari, ma ciò che fa è afferrare la chiave master per il volume e quindi convertirlo in dati binari non elaborati che sono necessari in seguito.

 

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

Questo sta dicendo a cryptsetup di aggiungere una nuova chiave al volume. Normalmente questa azione richiede una chiave esistente, tuttavia usiamo --master-key-fileper dirgli che vogliamo usare invece la chiave principale.
È il <(...)comando di sostituzione e reindirizzamento della shell. Fondamentalmente esegue tutto all'interno, invia l'output a una pipe, quindi sostituisce il <(...)con un percorso a quella pipe.

 

Quindi l'intero comando è solo una riga per condensare diverse operazioni.


Non sono sicuro se sto facendo qualcosa di sbagliato ma il mio LUKS non mostra affatto una stringa come quella che stai mostrando nell'esempio. È un piccolo numero di 9 cifre. Anche il mio mostra come "lineare 8: 3".
slm

@slm Se viene visualizzato linear, non si tratta di un volume LUKS aperto (valore errato per volume_namenel comando fornito). Un volume LUKS aperto avrà cryptnel terzo campo. In cryptsetup luksOpen /dev/foo bar, il volume_namevalore sarebbe bar.
Patrick,

Ho capito adesso. C'è un volume sotto il /dev/mappernome luks-...... Questo è il volume che devi utilizzare, non LVM, volume logico mappato.
slm

1
Sembra che con le versioni recenti di dmsetup il formato di dmsetup tablesia cambiato. Almeno per me la chiave principale è mostrata in colonna $6.
Karol Babioch,

@KarolBabioch probabilmente non hai specificato il nome del volume?
frostschutz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.