Modifier le mot de passe sur un système de fichiers LUKS sans connaître le mot de passe

30

J'ai un serveur Debian Wheezy qui fonctionne depuis un certain temps avec un lecteur chiffré. Le mot de passe du lecteur chiffré ( /dev/sda5) a été perdu lorsque mon fichier de mot de passe chiffré a été corrompu.

J'aimerais pouvoir redémarrer ce serveur, mais cela nécessitera bien sûr ce mot de passe. Étant donné que le lecteur est clairement dans un état déchiffré, existe-t-il un moyen de changer le mot de passe sans connaître l'ancien?

cryptsetup luksChangeKey /dev/sda5 nécessite le mot de passe du volume.

Je pourrais bien sûr rsynctout éteindre et reconstruire, mais j'aimerais éviter cela. J'ai regardé à travers la mémoire ( #cat /dev/mem | less), mais je n'ai pas pu le trouver (ce qui est une très bonne chose!).

Ethan
la source
2
Hmmmm .... Quel serait l'intérêt d'avoir un système de fichiers crypté s'il était si facile d'y accéder sans mot de passe.
mdpc
7
@mdpc: Votre plaisanterie n'a pas de sens. Il a accès au système de fichiers, car il avait le mot de passe lors du dernier démarrage du serveur.
G-Man dit `` Réintègre Monica ''
2
Le simple fait que vous ayez eu le mot de passe (et qu'il a été corrompu) n'invalide pas mon commentaire. En général, si vous oubliez le mot de passe pour tout type de matériel crypté, il devrait être perdu pour toujours sinon à quoi servait le cryptage en premier lieu?
mdpc
3
@mdpc Présent, il a actuellement accès au système de fichiers.
Patrick
Même question sur le super utilisateur: mot de passe LUKS perdu, partition cryptée ouverte (sans réponse).
G-Man dit `` Réintègre Monica ''

Réponses:

40

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)

deviceet volume_namedoit être réglé de manière appropriée.
volume_nameest 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-filepour 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.

Patrick
la source
Je ne sais pas si je fais quelque chose de mal mais mon LUKS n'affiche pas du tout une chaîne comme celle que vous montrez dans l'exemple. C'est un petit numéro à 9 chiffres. Le mien montre également "8: 3 linéaire".
slm
@slm S'il s'affiche linear, ce n'est pas un volume LUKS ouvert (valeur incorrecte volume_namedans la commande fournie). Un volume LUKS ouvert aura cryptdans le 3ème champ. Dans cryptsetup luksOpen /dev/foo bar, la volume_namevaleur serait bar.
Patrick
Je l'ai maintenant. Il y a un volume sous /dev/mappernommé luks-...... C'est le volume que vous devez utiliser, pas le volume logique mappé LVM.
slm
1
Il semble qu'avec les versions récentes de dmsetup, le format de dmsetup tablea changé. Au moins pour moi, la clé principale est indiquée dans la colonne $6.
Karol Babioch
@KarolBabioch vous n'avez probablement pas spécifié le nom du volume?
frostschutz