Comment charger LUKS passphrase de l'USB, retombant au clavier?
Je veux mettre en place une tête Linux (Debian Wheezy) PC avec chiffrement intégral de disque dur, avec la possibilité de débloquer le disque avec un lecteur USB, ou en entrant un mot de passe au clavier. Mon point de départ est une nouvelle installation à l'aide de la base de tout le disque l'option de chiffrement dans l'Installateur Debian, qui gère tout, en plus de /boot comme un LUKS-crypté groupe de volumes logiques et me donne l'option de clavier. Je vais décrire ma solution actuelle dans une réponse, dans l'espoir qu'il sera utile et que d'autres peuvent l'améliorer.
Voici certaines des questions que j'avais:
-
La configuration d'un mot de passe et de le mettre sur la clé USB.
-
Le chargement des modules USB dans le temps.
-
D'attente pour le lecteur USB reconnu par Linux avant d'essayer de lire.
-
L'identification du lecteur USB (et non pas une autre voiture qui arrive à être inséré).
-
La rédaction d'un "keyscript" pour tirer un mot de passe au large de la clé USB.
-
Veiller à ce que la chute-retour à clavier coups de pied dans tous les USB en cas d'insuffisance.
Je vais accepter une réponse avec des améliorations significatives et upvote réponses qui offrent des contributions.
source d'informationauteur Andrew
Vous devez vous connecter pour publier un commentaire.
Beaucoup de ma solution est dérivé de la poste, À l'aide d'UNE Clé USB Pour Le LUKS Passphrase.
Créer un aléatoire de mot de passe:
Insérez un lecteur USB.
dmesg
sortie affichera le nom de l'appareil; assumer/dev/sdd
. La Figure de sa taille:J'ai décidé d'installer la phrase, à la fin de la raw de l'appareil, pensant qu'il pourrait survivre à toute utilisation accidentelle de la clé USB.
Ajouter le mot de passe pour le volume LUKS:
Cela n'affecte pas la main entré de mot de passe de l'installateur. La phrase de passe de fichier peut être supprimé:
Trouver un nom unique pour la clé USB, de sorte que nous pouvons l'identifier lorsqu'ils sont présents:
Vous devriez voir un lien symbolique. Je vais l'appeler
/dev/disk/by-id/<ID>
.Modifier
/etc/crypttab
. Vous devriez voir une ligne comme:Modifier pour:
La
keyscript
visés ci-dessus devront lire le mot de passe de l'appareil USB. Cependant, il doit faire plus que cela. Pour comprendre comment il est utilisé, vérifiez/usr/share/initramfs-tools/scripts/local-top/cryptroot
le script qui s'exécute au démarrage pour déverrouiller le périphérique racine. Remarque lorsqu'unkeyscript
est réglé, c'est simplement de l'exécuter et de la sortie de canalisation àluksOpen
avec aucune autre vérification. Il n'y a aucun moyen de signaler une erreur (la clé USB n'est pas présent) ou revenir à la saisie au clavier. Si la phrase de passe échoue, le keyscript lance à nouveau dans une boucle, jusqu'à un certain nombre de fois, mais on ne nous dit pas qui itération nous sommes sur. Aussi, nous n'avons aucun contrôle sur le moment où la keyscript est exécuté, de sorte que nous ne pouvons pas être sûr que Linux a reconnu le lecteur USB.Je me suis adressée à certains hacks:
Sondage sur le lecteur USB et attendez 3 secondes pour qu'il apparaisse. Cela fonctionne pour moi, mais j'aimerais savoir une meilleure façon.
Créer un fichier fictif
/passphrase-from-usb-tried
lors de la première exécution pour indiquer que nous avons été exécuté au moins une fois.Si nous avons été exécuté au moins une fois, ou le périphérique USB ne peut pas être trouvé, exécutez la
askpass
programme utilisé parcryptroot
pour la saisie au clavier.Le script final:
Enfin, nous devons veiller à ce que ce script est disponible dans l'initramfs. Créer
/etc/initramfs-tools/hooks/passphrase-from-usb
contenant:Les pilotes USB ne sont pas présents dans mon initramfs. (Il semble qu'ils sont par défaut dans les versions ultérieures de Debian.) J'ai dû ajouter en ajoutant à
/etc/initramfs-tools/modules
:Quand tout est fait, la mise à jour de l'initramfs:
L'idéal serait pour moi si je pouvais tout simplement faire une petite clé USB contenant un mot de passe qui sera
déverrouiller le disque. Non seulement ce serait pratique pour les serveurs (où vous pouvez laisser la clé USB dans la
serveur - le but est d'être en mesure de retourner cassé disques durs sans avoir à se soucier des données confidentielles), il serait également très bien pour mon portable: Insérez la clé USB lors du démarrage et de l'enlever après
le déverrouillage de la cryptodisk.
J'ai écrit un patch qui va chercher la racine de tous les appareils pour le fichier 'cryptkey.txt" et essayer de décrypter
avec chaque ligne comme une clé. Si cela échoue: Revenir à la saisie de la phrase de passe.
Il signifie que la clé ne peut pas contenir de \n, mais qui s'appliquerait à tout tapé en touche, trop. La bonne nouvelle est que vous pouvez utiliser le même disque USB pour stocker la clé pour plusieurs machines: Vous n'avez pas besoin d'un autre disque USB pour chacun d'eux. Donc, si vous avez un lecteur USB dans votre physique porte-clés, vous pouvez utiliser le même lecteur pour toutes les machines de démarrage lors de l'être physiquement proches.
Vous ajoutez la clé avec:
Et puis mettre la même clé comme une ligne dans un fichier sur la clé USB/MMC disque appelé "cryptkey.txt'. Le patch est ici:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864647
Si les pilotes USB, MMC pilotes ou les systèmes de fichiers ne sont pas présents dans votre initramfs, vous devez les ajouter en ajoutant dans /etc/initramfs-tools/modules:
Quand tout est fait, la mise à jour de l'initramfs:
Il peut être trouvé sous forme de patch et fichier: https://gitlab.com/ole.tange/tangetools/tree/master/decrypt-root-with-usb