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/sda5
requiere la contraseña del volumen.
Por supuesto, podría rsync
desconectar 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)
device
y volume_name
debe establecerse apropiadamente.
volume_name
es 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-file
decirle 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.