Oui, vous pouvez le faire en accédant à la clé principale pendant que le volume est déchiffré.
Le rapide et sale pour ajouter une nouvelle phrase secrète:
device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)
device
et volume_name
doit être réglé de manière appropriée.
volume_name
est le nom du volume déchiffré, celui que vous voyez dans /dev/mapper
.
Explication:
Les volumes LUKS chiffrent leurs données avec une clé principale. Chaque phrase secrète que vous ajoutez stocke simplement une copie de cette clé principale chiffrée avec cette phrase secrète. Donc, si vous avez la clé principale, vous devez simplement l'utiliser dans un nouvel emplacement de clé.
Permet de déchirer la commande ci-dessus.
$ dmsetup table --showkeys $volume_name
Cela vide un tas d'informations sur le volume activement décrypté. La sortie ressemble à ceci:
0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096
Le champ # 5 est la clé principale.
$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p
Je ne vais pas montrer la sortie de cela car ce sont des données binaires, mais ce que cela fait, c'est saisir la clé principale du volume, puis la convertir en données binaires brutes qui seront nécessaires plus tard.
$ cryptsetup luksAddKey $device --master-key-file <(...)
Cela indique à cryptsetup d'ajouter une nouvelle clé au volume. Normalement, cette action nécessite une clé existante, mais nous utilisons --master-key-file
pour lui dire que nous voulons utiliser la clé principale à la place.
La <(...)
substitution et la redirection de la commande is shell. Il exécute essentiellement tout ce qui se trouve à l'intérieur, envoie la sortie à un tuyau, puis remplace le <(...)
par un chemin vers ce tuyau.
Donc, toute la commande est juste une ligne pour condenser plusieurs opérations.