Sim, você pode fazer isso acessando a chave mestra enquanto o volume é descriptografado.
A rápida e suja para 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, o que você vê /dev/mapper
.
Explicação:
Os volumes LUKS criptografam seus dados com uma chave mestra. Cada frase secreta adicionada simplesmente armazena uma cópia dessa chave mestra criptografada com essa frase secreta. Portanto, se você possui a chave mestra, basta usá-la em um novo slot de chave.
Vamos separar o comando acima.
$ dmsetup table --showkeys $volume_name
Isso despeja um monte de informações sobre o volume descriptografado ativamente. A saída é assim:
0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096
O campo 5 é a chave mestra.
$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p
Não vai mostrar a saída disso, pois são dados binários, mas o que isso faz é pegar a chave mestra do volume e depois convertê-la em dados binários brutos, necessários posteriormente.
$ cryptsetup luksAddKey $device --master-key-file <(...)
Isso está dizendo ao cryptsetup para adicionar uma nova chave ao volume. Normalmente, essa ação requer uma chave existente, no entanto, usamos --master-key-file
para dizer que queremos usar a chave mestra.
A <(...)
substituição e redirecionamento do comando is shell Basicamente, executa tudo o que está 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.