web-dev-qa-db-fra.com

Comment configurer LVM et LUKS pour chiffrer automatiquement la partition?

J'ai récemment installé le serveur Ubuntu 11.04 avec le cryptage complet LVM (installé à partir de l'installation). Je souhaite maintenant utiliser un fichier de clé pour le 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 mis dans /boot/grub parce que je pense que ce n'est pas chiffré. Quand j'essaie d'ajouter la clé avec cette commad Sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile, il me demande le mot de passe et quand je le 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 .

21
isoman

Je viens juste de voir cela sur mon nouveau serveur domestique, il a fallu beaucoup de recherches sur Google et de devinettes, mais ça marche. 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 utilisant LVM chiffré, je vais donc vous décrire 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 de ma clé USB sur laquelle je vais stocker le fichier de clés

Tout d'abord, j'ai créé un fichier de clés, 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 attribué une étiquette. J'ai utilisé une étiquette pour pouvoir la monter par étiquette plus tard et remplacer le lecteur flash 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, qui appartient 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. Le mien initialement contenu

sd5_crypt UUID=(...) none luks

que j'ai changé pour

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 en utilisant le fichier de clés sur le lecteur flash USB. Si je retire le lecteur flash (par exemple, lorsque je pars en vacances), il ne démarre pas et mes données sont sécurisées.

Si quelqu'un sait comment le demander pour demander le mot de passe si le lecteur flash USB est manquant, ce serait pratique comme solution de secours. J'espère que cela vous aidera, tout ajout ou toute correction serait la bienvenue!

26
Randy Orrison

Ces instructions de howtoforge.com m’ont permis de démarrer avec un volume à déchiffrement automatique.

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

Étape 1: Créer un fichier de clé 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 à la racine

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 de toute façon un problème plus grave sur votre ordinateur.

Vous pouvez également envoyer votre fichier de clé souhaité à root: root et le déplacer dans le dossier/root.

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

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

Sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdX est bien sûr votre appareil LUKS.

Tout d'abord, vous serez invité à entrer un mot de passe (existant) pour déverrouiller le lecteur. Si tout fonctionne bien, vous devriez obtenir un résultat comme celui-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. Ouvrir/etc/crypttab

Sudo nano /etc/crypttab

et ajoutez ensuite une ligne comme ceci:

sdX_crypt      /dev/sdX  /root/keyfile  luks

ou vous pouvez utiliser l'UUID du périphérique:

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 il demande d’abord de sauvegarder le fichier [yes = enter] et ce que le nom doit être [same name = enter].

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

Étape 5: Montez le périphérique dans fstab

Nous avons maintenant un périphérique déverrouillé (enfin, pas encore, mais au démarrage du système) et nous devons simplement 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 bon nom de mappeur 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émarrez ou remontez

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

Sudo mount -a
6
The New Guy

Amélioration réponse de Randy Orrison , voici un petit script que j'ai créé, qui obligera le système à demander à l'utilisateur un mot de passe s'il ne parvient pas à trouver le fichier de 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

Enregistrez-le et remplacez keyscript=/lib/cryptsetup/scripts/passdev dans /etc/crypttab par le chemin d'accès à ce fichier et exécutez Sudo update-initramfs -uv et vous avez terminé.

6
VarunAgw

@deitch J'avais la même configuration que @Randy Orrison et j'ai rencontré le même problème que vous et il s'avère qu'il s'agit d'un bogue de systemd qui tente de monter le système de fichiers/à nouveau lorsqu'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 dans/etc/crypttab une fois que la commande update-initramfs -uv a été exécutée.

Redémarrez et tout fonctionne comme prévu.

1
mukul kirtane