Alterar a senha em um sistema de arquivos LUKS sem saber a senha

Alterar a senha em um sistema de arquivos LUKS sem saber a senha

Eu tenho um servidor Debian Wheezy que está rodando há algum tempo com uma unidade criptografada. A senha da unidade criptografada ( /dev/sda5) foi perdida quando meu arquivo de senha criptografada foi corrompido.

Gostaria de poder reiniciar este servidor, mas é claro que isso exigirá essa senha. Como a unidade está claramente descriptografada, existe uma maneira de alterar a senha sem saber a antiga?

cryptsetup luksChangeKey /dev/sda5requer a senha do volume.

É claro que eu poderia rsyncdesligar tudo e reconstruir, mas gostaria de evitar isso. Procurei na memória ( #cat /dev/mem | less), mas não consegui encontrar (o que é uma coisa muito boa!).

Responder1

Sim, você pode fazer isso acessando a chave mestra enquanto o volume é descriptografado.

A maneira rápida e suja de adicionar uma nova senha:

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_namedeve ser definido adequadamente.
volume_nameé o nome do volume descriptografado, aquele que você vê em /dev/mapper.


Explicação:

Os volumes LUKS criptografam seus dados com uma chave mestra. Cada senha adicionada simplesmente armazena uma cópia dessa chave mestra criptografada com essa senha. Portanto, se você tiver a chave mestra, basta usá-la em um novo slot de chave.

Vamos desmontar o comando acima.

$ dmsetup table --showkeys $volume_name

Isso despeja um monte de informações sobre o volume descriptografado ativamente. A saída é semelhante a esta:

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

O campo nº 5 é a chave mestra.

 

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

Não vou mostrar a saída disso, pois são dados binários, mas o que isso faz é pegar a chave mestra do volume e convertê-la em dados binários brutos que serão necessários posteriormente.

 

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

Isso diz ao cryptsetup para adicionar uma nova chave ao volume. Normalmente esta ação requer uma chave existente, no entanto, usamos --master-key-filepara informar que queremos usar a chave mestra.
A <(...)substituição e redirecionamento do comando shell. Basicamente, ele executa tudo dentro, envia a saída para um canal e, em seguida, substitui o <(...)por um caminho para esse canal.

 

Portanto, todo o comando é apenas uma linha para condensar várias operações.

informação relacionada