Comment configurer LVM & LUKS pour décoder automatiquement la partition?


21

J'ai récemment installé le serveur ubuntu 11.04 avec le cryptage lvm complet (installé à partir de la configuration). Je souhaite maintenant utiliser un fichier clé pour faire un déverrouillage automatique. J'ai essayé de suivre ce guide http://ubuntuforums.org/showthread.php?t=837416

J'ai généré une clé avec cette commande: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

je l'ai inséré /boot/grubparce que je pense qu'il n'est pas crypté. Lorsque j'essaie d'ajouter la clé avec cette commande, sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile elle me demande la phrase secrète et quand je la mets, rien ne se passe, rien n'est imprimé à l'écran! Je l'ignore et continue les autres étapes et redémarre mais rien ne s'est passé et il demande la phrase secrète.

Merci pour l'aide .


Voulez-vous dire déchiffrer sans saisir de phrase secrète? Si le processus de démarrage pouvait le faire, les clés nécessaires pour déchiffrer le volume devraient se trouver sur le système à un endroit accessible pendant le démarrage. Comment vous attendriez-vous à ce que cela vous protège contre le vol de données?
James Henstridge

oui, je pense que je vais mettre la clé dans une partition cachée ou un lecteur flash USB. Est-ce possible ?
isoman

Le problème est que si le chargeur de démarrage peut localiser la clé, une personne inspectant le code de démarrage (non chiffré) pourra également la localiser. Si vous stockez la clé sur une clé USB, vous devez être sûr que la clé ne sera pas volée avec l'ordinateur. Si vous ne branchez la clé que lors du démarrage, ce n'est pas plus pratique que de saisir une phrase secrète.
James Henstridge

Réponses:


27

Je viens de vivre cela sur mon nouveau serveur domestique, cela a pris beaucoup de recherches et de recherches, mais je l'ai fait fonctionner. Je vais essayer de reproduire les étapes ici. J'utilise Ubuntu Server 11.10 et j'ai commencé avec une installation à peu près standard en utilisant LVM chiffré, donc je vais simplement relier les modifications que j'ai apportées à partir de là.

Installer:

  • / dev / sda1 est ma partition / boot non chiffrée
  • / dev / sda5 est ma partition lvm qui contient tout le reste - root, swap et home
  • / dev / sdc1 est la partition sur ma clé USB où je vais stocker le fichier de clés

Tout d'abord, j'ai créé un fichier clé, juste dans mon répertoire personnel:

dd if=/dev/urandom of=keyfile bs=512 count=4

(vous pouvez utiliser une taille de bloc plus grande ou compter pour une clé plus grande)

Dites à cryptsetup la nouvelle clé (c'est le contenu qui est important, pas le nom de fichier):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

Ensuite, j'ai formaté ma clé USB avec ext2 et lui ai donné une étiquette. J'ai utilisé une étiquette, afin que plus tard je puisse la monter par étiquette et remplacer la clé USB en cas de problème.

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(bien sûr, votre appareil variera)

Maintenant, copiez le fichier de clés sur le lecteur flash USB, appartenant au mode racine 400:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

Modifiez / etc / crypttab. Mine contenue à l'origine

sd5_crypt UUID=(...) none luks

que j'ai changé en

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

Enfin, mettez à jour les initramfs:

sudo update-initramfs -uv

Il démarre maintenant à l'aide du fichier de clés sur la clé USB. Si je retire la clé USB (disons, quand je pars en vacances), elle ne démarre pas et mes données sont sécurisées.

Si quelqu'un sait comment l'obtenir pour demander la phrase secrète si le lecteur flash USB est manquant, ce serait pratique comme solution de rechange. J'espère que cela vous aidera, tout ajout ou correction serait plus que bienvenu!


3
Si vous ne savez pas comment obtenir une invite de mot de passe, vous pouvez utiliser une partition de démarrage dans le lecteur flash pour charger via un autre initramfs qui recherche un fichier de clés et avoir le démarrage par défaut sur le disque dur charger un initramfs régulier qui vous invite à Un mot de passe.
Rétablir Monica - ζ--

1
@ 3pic Je ne suis pas sûr à 100% depuis que je l'ai fait il y a plusieurs mois. Mais Ubuntu démarre dans un système de fichiers virtuel. keyscript=/lib/cryptsetup/scripts/passdevlui ajoute un passdevscript. Et puis update-initramfs -uvreconstruit l'archive du système de fichiers.
VarunAgw

1
@RandyOrrison c'est vraiment super. Ça marche. Mais ... après avoir dépassé l'initram, il reste assis pendant une ou deux minutes avec A start job is running for dev-sda8:-keyfile.device (1min 18s...)etc. Il passe, tout est monté, mais il se bloque pendant un moment. Le journal indique "Expiration du délai d'attente pour le périphérique dev-sda8: -sda7keyfile.device; La dépendance a échoué pour la configuration de Crypto pour sda7crypt." Bien sûr, il a déjà été monté par initram, mais ... Que fais-je de mal?
deitch

1
Pour une raison quelconque, il ne semble pas aimer / travailler avec systemd; il ignorera tout simplement le keyscriptchamp.
Etienne Bruines

1
Dans Ubuntu 17.10+, l'outil update-initramfs ne générera pas d'image initramfs capable de démarrer un volume luks si votre système de fichiers racine se trouve sur un volume luks et possède un fichier clé. Vous pouvez le faire fonctionner en laissant "none" comme valeur de fichier clé et en définissant les options pour avoir keyscript = / etc / my-keyscript, où / etc / my-keyscript est un script shell qui imprime la clé.
Macil

6

Ces instructions de howtoforge.com m'ont permis de démarrer avec un volume de décryptage automatique.

Comment: déverrouiller automatiquement des lecteurs chiffrés LUKS avec un fichier de clés

Étape 1: créer un fichier de clés aléatoire

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

Étape 2: rendre le fichier de clés en lecture seule pour root

sudo chmod 0400 /root/keyfile

Cela rendra le fichier clé lisible uniquement par root. Si quelqu'un a accès à ce fichier de clés, vous avez quand même un problème plus important sur votre ordinateur.

Vous pouvez également afficher votre fichier de clés souhaité dans root: root et le déplacer dans le dossier / root

Étape 3: ajouter le fichier de clés à LUKS

Les appareils compatibles LUKS / dm_crypt peuvent contenir jusqu'à 10 fichiers / mots de passe différents. Donc, à côté du mot de passe déjà configuré, nous allons ajouter ce fichier de clés comme méthode d'autorisation supplémentaire.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdX est bien sûr votre appareil LUKS.

Vous serez d'abord invité à entrer un mot de passe (existant) pour déverrouiller le lecteur. Si tout fonctionne bien, vous devriez obtenir une sortie comme celle-ci:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

Étape 4: créer un mappeur

Les périphériques LUKS doivent créer un mappeur qui peut ensuite être référencé dans le fstab. Ouvrez / etc / crypttab

sudo nano /etc/crypttab

et ajoutez ensuite une ligne comme celle-ci:

sdX_crypt      /dev/sdX  /root/keyfile  luks

ou vous pouvez utiliser l'UUID de l'appareil:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt est le nom du mappeur en cours de création. Vous pouvez utiliser ici n'importe quel nom, par exemple "musique" ou "films" ou "sfdsfawe" ....

Enregistrez et fermez le fichier en tapant ctrl-x, entrez, entrez. Ctrl-x ferme nano mais demande d'abord d'enregistrer le fichier [yes = enter] et quel doit être le nom [same name = enter].

Ce que nous avons fait là-bas, c'est que / root / keyfile doit être utilisé à la place de l'entrée de mot de passe pour déverrouiller le lecteur.

Étape 5: Montez l'appareil dans fstab

Maintenant, nous avons un appareil déverrouillé (enfin, pas encore mais au démarrage du système) et nous avons juste besoin de le monter maintenant. Ouvrez / etc / fstab:

sudo nano /etc/fstab

et ajoutez une nouvelle entrée comme:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

Assurez-vous que vous avez le nom de mappeur correct que vous avez ajouté à l'étape 4. Assurez-vous également que le point / dossier de montage existe. Après l'avoir ajouté, enregistrez à nouveau le fichier et fermez-le (ctrl-x, entrez, entrez).

Étape 6: redémarrer ou remonter

C'est ça. Vous pouvez maintenant redémarrer et les appareils supplémentaires doivent être déverrouillés et montés automatiquement. Vous pouvez également le tester en remontant tous les appareils:

sudo mount -a

1
vous oubliez de mettre à jour initramfs, 100% nécessaire
3pic

6

Améliorant la réponse de Randy Orrison , voici un petit script que j'ai créé, qui fera que le système se rabattra sur la demande de mot de passe à l'utilisateur s'il ne trouve pas le fichier clé.

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

Enregistrer et remplacer keyscript=/lib/cryptsetup/scripts/passdevdans /etc/crypttable chemin de ce fichier et lancez sudo update-initramfs -uvet vous avez terminé.


Je suppose que votre solution ne fonctionne pas pour le lecteur USB pour plus d'un fichier clé. Je veux dire si j'ai plus d'une partition cryptée (home, swap, root). Il semble qu'il ne démonte pas le pilote USB après la commande cat. Avez-vous une idée de comment y remédier?
Khamidulla

Cela fonctionne pour moi (Xubuntu 17.10) mais j'ai dû éditer grub et supprimer "splash". J'ai également dû enregistrer le fichier dans un emplacement approprié (/ lib / cryptsetup / scripts / unlock_custom) et le chmod le 755. Je ne sais pas si les éclaboussures ou la copie à l'endroit spécifique l'ont fait fonctionner pour moi, mais cela n'a pas fonctionné avant. Quoi qu'il en soit, cela fonctionne mais au démarrage, après Startet AppArmor initialization.avoir obtenu: Un travail de démarrage est en cours d'exécution pour dev-disk keyfile.device (1m 30s). Après le début des années 90, je peux utiliser mon système ... je ne sais pas comment résoudre ce problème de démarrage ...
firepol

1

@deitch J'ai eu la même configuration que @Randy Orrison et j'ai rencontré le même problème que vous et il s'avère que c'est un bogue de systemd qui essaie de monter à nouveau le système de fichiers / car il trouve l'entrée correspondante dans / etc / crypttab.

Pour résoudre ce problème, je viens de supprimer l'entrée de sda5_crypt de / etc / crypttab une fois que la commande update-initramfs -uv a été exécutée.

Redémarrez et tout fonctionne bien comme prévu.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.