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/sda5
requer a senha do volume.
É claro que eu poderia rsync
desligar 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)
device
e volume_name
deve 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-file
para 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.