Cambiar la contraseña en un sistema de archivos LUKS sin conocer la contraseña

Cambiar la contraseña en un sistema de archivos LUKS sin conocer la contraseña

Tengo un servidor Debian Wheezy que lleva un tiempo ejecutándose con una unidad cifrada. La contraseña de la unidad cifrada ( /dev/sda5) se perdió cuando mi archivo de contraseña cifrado se corrompió.

Me gustaría poder reiniciar este servidor, pero, por supuesto, eso requerirá esa contraseña. Dado que la unidad está claramente en un estado descifrado, ¿hay alguna manera de cambiar la contraseña sin conocer la anterior?

cryptsetup luksChangeKey /dev/sda5requiere la contraseña del volumen.

Por supuesto, podría rsyncdesconectar todo y reconstruirlo, pero me gustaría evitarlo. Busqué en la memoria ( #cat /dev/mem | less), pero no pude encontrarlo (¡lo cual es algo muy bueno!).

Respuesta1

Sí, puede hacerlo accediendo a la clave maestra mientras se descifra el volumen.

El método rápido y sucio para agregar una nueva frase de contraseña:

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

devicey volume_namedebe establecerse apropiadamente.
volume_namees el nombre del volumen descifrado, el que ves en /dev/mapper.


Explicación:

Los volúmenes LUKS cifran sus datos con una clave maestra. Cada frase de contraseña que agregue simplemente almacena una copia de esta clave maestra cifrada con esa frase de contraseña. Entonces, si tiene la llave maestra, simplemente necesita usarla en una nueva ranura para llave.

Deshagamos el comando anterior.

$ dmsetup table --showkeys $volume_name

Esto arroja una gran cantidad de información sobre el volumen descifrado activamente. La salida se ve así:

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

El campo #5 es la clave maestra.

 

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

No mostraré el resultado de esto como datos binarios, pero lo que hace es tomar la clave maestra para el volumen y luego convertirla en datos binarios sin procesar que se necesitarán más adelante.

 

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

Esto le indica a cryptsetup que agregue una nueva clave al volumen. Normalmente, esta acción requiere una clave existente; sin embargo, solemos --master-key-filedecirle que queremos usar la clave maestra en su lugar.
Se <(...)trata de sustitución y redirección de comandos de shell. Básicamente ejecuta todo lo que hay dentro, envía la salida a una tubería y luego la sustituye <(...)por una ruta a esa tubería.

 

Entonces, todo el comando es solo una línea para condensar varias operaciones.

información relacionada