web-dev-qa-db-fra.com

Double installation Ubuntu avec Whole Disk Encryption

Mon objectif est que je souhaite un double amorçage Xubuntu/Ubuntu, avec un attrait: je veux que le disque soit entièrement crypté avec le cryptage intégral du disque dm-crypt (fourni natif). Maintenant, je sais qu’au départ de l’installation, le programme d’installation d’Ubuntu ne me simplifiera pas la tâche, et peut-être que ce n’est pas faisable, car je ne suis pas sûr de pouvoir tromper les outils en créant les deux configurations initrd différentes pour chaque système de fichiers racine. .

Alors des questions:

  1. Quelqu'un l'a-t-il déjà fait et y a-t-il un moyen simple qui me manque pour le faire?

  2. Étant donné (1) est un négatif ... a. Devrais-je créer des volumes chiffrés de base distincts pour chaque installation (xubuntu/ubuntu) ou devrais-je simplement créer un volume chiffré et y séparer des partitions d'installation? Je me penche vers ce dernier pour simplifier le processus. Cependant, je ne sais pas comment le chargeur de démarrage va gérer cela.

b. Une fois le premier ordinateur installé, si je vais avec 1 volume chiffré, comment puis-je le déchiffrer et installer la deuxième distribution (et obtenir le chargeur de démarrage, initrd, etc. mis à jour correctement)?

J'ai posé des questions sur les aspects de sécurité de Security Stack Exchange.

2
Tek Tengu

Voici le récit complet.

J'ai regroupé les étapes en phases entre les redémarrages:

  1. Préliminaires
  2. Sauvegardez vos données
  3. Redémarrez sur USB en direct pour les tâches principales a. pré-installation: faire de la place sur le disque b. installation: faire le partitionnement manuel c. post-installation: supplément initramfs
  4. Redémarrez sur Ubuntu principal pour mettre à jour grub
  5. Redémarrez sur Ubuntu secondaire pour ajouter un fichier de clé
  6. Redémarrez sur Ubuntu secondaire pour la finition
  7. Rappels pour les installations futures
  8. À propos de/boot non crypté

0. Préliminaires

Je l'ai fait sur un ordinateur portable doté du BIOS (pour plus de détails UEFI, voir chiffrement intégral du disque Ubuntu avec crypté/boot ), et Ubuntu 15.10 chiffré déjà installé (mais il pourrait aussi s'agir de 14.04 LTS). J'ai répété la procédure pour installer Ubuntu 16.10 sur la version précédente 16.04, puis pour installer 18.04 sur la version antérieure 16.10. Cependant, j'ai dû effacer le contenu du volume logique que j'ai utilisé pour root (/) pour l'installation de Bionic. Chaque fois que je l'ai laissé non effacé, Ubiquity ou update-initramfs a échoué de différentes manières.

Je ferai référence aux partitions et aux volumes LVM par les noms créés par l'installation standard d'Ubuntu sur le disque dur/dev/sda:

$ lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINT
NAME                    TYPE  FSTYPE      MOUNTPOINT
sda                     disk              
├─sda1                  part  ext2        /boot
├─sda2                  part              
└─sda5                  part  crypto_LUKS 
  └─sda5_crypt          crypt LVM2_member 
    ├─ubuntu--vg-root   lvm   ext4        /
    └─ubuntu--vg-swap_1 lvm   swap        [SWAP]

Le conteneur LUKS "sda5_crypt" occupe tout l'espace de la partition logique. Réduire un conteneur LUKS est beaucoup trop difficile pour moi; Je ne veux pas détruire l'installation existante d'Ubuntu en l'essayant. Alors au lieu de cela, j'ai décidé de réduire le volume logique "root" pour laisser de la place à de nouvelles installations.

Le seul espace non chiffré sur le disque est donc la partition 255M/boot. Il serait possible de scinder cette partition, mais deux moitiés égales ne contiendraient que deux versions du noyau chacune, et pour moi cela ne suffit pas. Alors au lieu de cela, j'ai décidé de placer le nouveau répertoire/boot sous le nouveau/root (en ne le pointant pas vers un autre emplacement). Cela crée des complications supplémentaires, mais laisse également de la place pour plusieurs installations parallèlement à Ubuntu principal.

Toutes les commandes suivantes doivent être exécutées avec les droits Sudo , j'ai donc ignoré la partie Sudo de toutes les lignes de commande.

De plus, je parlerai d '"Ubuntu secondaire", car je ne sais pas quel Linux vous souhaitez installer. Remplacez "Ubuntu secondaire" (et tous les détails spécifiques à Ubiquity) par votre choix de saveur.

1. Sauvegardez vos données

En plus de vos sauvegardes habituelles, vous pouvez également créer une copie distincte des paramètres essentiels (tels que/etc/crypttab) dans un emplacement facilement accessible. Cela ne sera pas nécessaire si tout se passe comme prévu, mais cela peut vous aider à garder votre calme.

2. Redémarrez sur USB en direct pour les tâches principales

2.a. pré-installation: faire de la place sur le disque

Ouvrez le conteneur LUKS et activez LVM.

cryptsetup luksOpen /dev/sda5 sda5_crypt
vgscan
vgchange -ay

Réduisez le volume racine existant.

e2fsck -f /dev/mapper/ubuntu--vg-root
#resize2fs -p /dev/mapper/ubuntu--vg-root 16G
lvreduce -L 16G --resizefs /dev/ubuntu-vg/root
  • La ligne commentée est présente au cas où vous ne voudriez pas que "lvreduce --resizefs" effectue le bit de redimensionnement de manière fiable. Exécutez le "resize2fs" si cela vous fait sentir mieux.

Ajouter un nouveau volume racine. La taille est à vous de choisir; 16G est juste un exemple.

lvcreate -L 16G -n root2 ubuntu-vg

Créez un nouveau swap uniquement si vous pensez que vous pouvez faire fonctionner le mode hibernation avec LUKS. Sinon, laissez les deux installations partager l’espace de permutation existant.

lvcreate -L 4G -n swap2 ubuntu-vg

Créer un nouveau volume de données semble une chose évidente à faire, mais ce n'est pas essentiel pour l'installation comme décrit ici.

lvcreate -l 100%FREE -n data ubuntu-vg

À ce stade, un débutant peut vouloir redémarrer sans la clé USB en direct et se connecter à Ubuntu principal pour vérifier que cela fonctionne toujours. Si vous le faites, n'oubliez pas de rouvrir le conteneur LUKS lorsque vous redémarrez sur le live-USB.

En outre, veillez à utiliser la bonne commande pour ouvrir le conteneur LUKS . Par exemple, si vous cliquez sur l'icône que vous voyez dans la barre latérale du programme de lancement, le conteneur s'ouvrira sous un nom incorrect, ce qui entraînera l'échec ultérieur de update-initramfs.

cryptsetup luksOpen /dev/sda5 sda5_crypt

2.b. installation: faire le partitionnement manuel

Lancez le programme d'installation et choisissez "Quelque chose d'autre" pour le type d'installation.

  • Pointez sur votre nouveau volume racine (/ dev/ubuntu-vg/root2).
  • Ne pointez/démarrez nulle part.
  • Faites un point d'échange vers votre nouveau volume d'échange si vous en avez créé un, et sinon vers l'ancien.
  • Vérifiez soigneusement qu'aucune autre partition ou volume LVM ne participe à l'installation.
  • Placez grub sur un volume logique. Le volume importe peu, car le but est de s'assurer que gub-install échoue . Pour la première fois, c'est l'option la plus sûre. Plus tard, lorsque vous aurez fait cela plusieurs fois, vous saurez exactement quand choisir/dev/sda.

Passez au reste de l'installation.

  • Si l'installateur vous demande si les montages doivent être démontés, vous avez effectué une opération non mentionnée ici. Démontez vos montures supplémentaires.

À la fin de l'installation, choisissez de continuer les tests.

  • Lorsque le programme d'installation signale que l'installation de grub a échoué, choisissez de continuer sans grub.
  • Si la fenêtre contextuelle reste bloquée, réduisez simplement la fenêtre du programme d'installation.

2.c. post-installation: supplément initramfs

Montez les deux volumes racine.

mkdir /mnt/newroot && mount /dev/mapper/ubuntu--vg-root2 /mnt/newroot
mkdir /mnt/oldroot && mount /dev/mapper/ubuntu--vg-root /mnt/oldroot

Copiez le fichier/etc/crypttab de l’ancien volume racine vers le nouveau.

cp -p /mnt/oldroot/etc/crypttab /mnt/newroot/etc/
cat /mnt/newroot/etc/crypttab

Si le fichier que vous avez déjà copié fait référence à un fichier de clés, copiez également le fichier de clés et le script dont vous avez besoin pour charger la clé dans initrd.img.

cp -p /mnt/oldroot/crypto_keyfile.bin /mnt/newroot/
cp -p /mnt/oldroot/etc/initramfs-tools/hooks/crypto_keyfile /mnt/newroot/etc/initramfs-tools/hooks/
  • La première fois, la clé n'existe pas encore et il est préférable de la créer ultérieurement, car la résolution des problèmes est plus facile lorsque les modifications ne sont pas toutes effectuées en même temps.

La dernière étape cruciale consiste à charger les modifications dans initrd.img dans la prison chroot.

for DEV in dev dev/pts sys proc; do mount --bind /$DEV /mnt/newroot/$DEV; done

chroot /mnt/newroot update-initramfs -u

# Note reverse order.
for DEV in proc sys dev/pts dev; do umount /mnt/newroot/$DEV; done
  • Si vous obtenez un message d'erreur indiquant "cryptsetup: AVERTISSEMENT: ligne non valide dans/etc/crypttab", vous n'avez pas ouvert le conteneur LUKS sous le nom approprié.

Ranger (non nécessaire à 100%, surtout si vous n'avez pas choisi la persistance lorsque vous avez créé votre live USB).

umount /mnt/oldroot && rmdir /mnt/oldroot
umount /mnt/newroot && rmdir /mnt/newroot

Vous pouvez également essayer de nettoyer en fermant le conteneur LUKS, mais si vous deviez réduire la fenêtre du programme d'installation, vous obtiendrez un message d'erreur indiquant "Périphérique ou ressource occupé". Ne vous inquiétez pas, il sera fermé à l'arrêt de toute façon.

cryptsetup luksClose sda5_crypt
  • La partie la plus difficile est maintenant terminée.

3. Redémarrez sur Ubuntu principal pour mettre à jour grub

Editez le fichier/etc/default/grub pour permettre à/boot chiffré d’inclure:

GRUB_ENABLE_CRYPTODISK=y
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda5:sda5_crypt"
  • Si vous définissez la valeur de GRUB_ENABLE_CRYPTODISK sur "true" ou "1" ou toute autre chose, update-grub se plaindra que la valeur doit être "1", mais doit être "y". Ceci est un bogue connu.
  • Comme d'habitude, veillez à ne pas ajouter de nouvelle ligne à la fin du fichier.

Ensuite, mettez à jour grub - principalement pour ajouter Ubuntu nouvellement installée au menu, mais également pour les paramètres modifiés.

update-grub

4. Redémarrez sur Ubuntu secondaire pour ajouter un fichier de clé

Lorsque vous choisissez le menu secondaire Ubuntu from grub, il vous sera demandé un mot de passe pour ouvrir le conteneur LUKS. Et puis on vous demande à nouveau le même mot de passe. Une fois que vous êtes connecté, nous devons résoudre le problème de devoir taper le mot de passe deux fois. Nous le faisons en ajoutant un fichier de clé au conteneur LUKS.

Premièrement, nous voulons savoir combien de clés le conteneur LUKS possède déjà. Un conteneur LUKS peut avoir jusqu'à huit clés (numérotées 0..7), nous voulons donc créer uniquement les clés dont nous avons réellement besoin.

cryptsetup luksDump /dev/sda5
  • Dans Wily Werewolf, le conteneur contient déjà trois clés. Aucune idée pourquoi.

Ensuite, nous créons le nouveau fichier de clés.

dd bs=512 count=4 if=/dev/urandom of=/crypto_keyfile.bin
chmod a=,u+r /crypto_keyfile.bin

Ensuite, nous ajoutons la nouvelle clé au conteneur. La commande sera comme pour un mot de passe existant, tapez donc celui que vous connaissez.

cryptsetup luksAddKey /dev/sda5 /crypto_keyfile.bin

Nous avons toujours besoin d'un script que update-initramfs exécute pour charger la clé dans initrd.img. Placez le fichier dans/etc/initramfs-tools/hooks/et définissez sa protection.

chmod +x /etc/initramfs-tools/hooks/crypto_keyfile

Le script n'a besoin que d'une ligne:

cp /crypto_keyfile.bin "${DESTDIR}"
  • Le nom du script, ainsi que le nom du fichier de clés, est à vous de décider.

Nous devons également ajouter une référence à la clé de/etc/crypttab. Avant la modification, cela ressemble à ceci:

sda5_crypt UUID=sda5-uuid-here none luks,discard

Après la modification, cela devrait ressembler à ceci:

sda5_crypt UUID=sda5-uuid-here /crypto_keyfile.bin luks,discard,keyscript=/bin/cat

Nous sommes enfin prêts à mettre à jour les initramfs:

update-initramfs -u

5. Redémarrez sur Ubuntu secondaire pour la finition.

Cette fois, lorsque vous choisissez le menu secondaire Ubuntu à partir de grub, vous devrez taper le mot de passe LUKS une seule fois.

Copiez le fichier de clés sur l'ancien volume racine pour la sauvegarde.

mkdir /mnt/oldroot
mount /dev/mapper/ububtu--vg-root /mnt/oldroot
cp /crypto_file /mnt/oldroot/

Copiez également les paramètres de grub pour la sauvegarde (de l'ancien volume racine au nouveau). Étant donné que le menu grub est partagé par les deux installations, ses paramètres sont identiques, et le menu peut être installé via l'une ou l'autre des installations. Donc, même si vous préférez garder Ubuntu principal en haut du menu pour le moment, vous aurez peut-être besoin d'une copie de sauvegarde des paramètres ultérieurement.

cp /mnt/oldroot/etc/default/grub /etc/default/
umount /mnt/oldroot
rmdir /mnt/oldroot

Vous pouvez également vouloir modifier les options de montage des volumes logiques (principalement les volumes racine), de sorte que les deux installations n'exposent pas leurs parties confidentielles dans les interfaces graphiques. Je pourrais vous donner un modèle pour/etc/fstab, mais heureusement, Disks fait un travail si décent que je n'ai pas besoin de le faire.

Enfin, vous pouvez commencer le déploiement normal de l’Ubuntu secondaire et déployer le nouveau volume de données dans les deux installations.

6. Rappels pour les installations futures

  • Lorsque vous écrasez l'une des installations Ubuntu, vous devez toujours répéter les mêmes étapes post-installation, à l'exception de la création d'un nouveau fichier de clés pour LUKS.
  • La nécessité du fichier de clés peut disparaître dans toute version ultérieure. En fait, je n'ai trouvé aucune documentation appropriée pour la partie d'installation de l'installation de cryptage, donc je crains que rien ne change à ce sujet. Il faut se méfier!

7. À propos de/boot non crypté

Si vous choisissez de scinder la partition principale non chiffrée pour libérer de l'espace pour le nouveau/boot, vous pouvez supprimer certaines des étapes que j'ai présentées:

  • Vous n'avez pas besoin d'un fichier de clé, vous n'avez donc pas besoin du script pour charger la clé dans initrd.img, et vous n'avez pas besoin d'ajouter une référence au fichier de clé dans/etc/crypttab. Même dans ce cas, vous devez toujours ajouter le fichier/etc/crypttab et exécuter update-initramfs in chroot jail en phase de post-installation.
  • Si le nouveau/boot n'est pas chiffré, vous n'avez pas besoin non plus de GRUB_ENABLE_CRYPTODISK dans vos paramètres grub et vous n'avez pas besoin de définir les paramètres de démarrage sur GRUB_CMDLINE_LINUX. Même dans ce cas, vous devez toujours exécuter update-grub pour ajouter l’installation secondaire au menu grub.
3
AimoE

Remarque: j'ai répondu à la question, mais ce que vous voulez probablement, c'est mon dernier paragraphe.

Partitionnement manuel et configurations à double démarrage

Vous devrez installer à partir du CD alternatif pour dmcrypt. Sélectionnez le partitionnement manuel dans le programme d'installation. Si vous souhaitez deux volumes chiffrés distincts, faites-en des partitions principales ou étendues ou des partitions EFI et laissez suffisamment d'espace pour l'autre volume lors de l'installation du premier système d'exploitation. Si vous souhaitez deux distributions Linux partageant un volume chiffré (mais vous ne voulez probablement pas cela, comme je l'explique ci-dessous), créez un volume chiffré volumineux et créez les systèmes de fichiers pour chaque système d'exploitation lors de l'installation de ce dernier.

Faites du volume chiffré un volume physique LVM et créez un groupe de volumes qui couvre uniquement ce volume physique. Si deux systèmes d'exploitation partagent le volume chiffré, ils partagent également le groupe de volumes: les groupes de volumes permettent de gérer plusieurs volumes, et dans cette configuration, il n'y en a qu'un. Créez au moins un volume logique pour chaque système de fichiers racine. Si les deux systèmes d'exploitation partagent le volume chiffré et que vous ne souhaitez pas utiliser le mode veille prolongée, ils peuvent partager la zone d'échange.

Laissez une zone de démarrage suffisamment grande, qui doit être non chiffrée. Je recommande au moins 1 Go (vous permet de stocker un CD de secours en cas d'urgence) à moins que votre espace disque ne soit très limité, mais 200 Mo suffisent pour un seul noyau et un autre noyau.

Avoir deux partitions de démarrage distinctes est le moyen le plus simple à installer. Laissez une distribution contrôler le secteur de démarrage et installez le chargeur de démarrage de la distribution secondaire sur le premier secteur de sa partition de démarrage. Chargez en chaîne le chargeur de démarrage de la distribution secondaire à partir du chargeur de démarrage principal.

Si vous voulez une seule partition de démarrage, installez Grub sur un seul système d'exploitation et partagez /boot entre les deux systèmes d'exploitation.

Installer deux distributions Linux

Le double démarrage est douloureux à utiliser et n'est pas nécessaire dans la plupart des situations. Si vous souhaitez exécuter deux systèmes d'exploitation, utilisez une forme de virtualisation. Le seul cas d'utilisation possible pour le double démarrage concerne le test de plusieurs systèmes d'exploitation sur le même matériel coûteux (même si vous pouvez vous le permettre, il est plus pratique de disposer de machines distinctes par système d'exploitation).

Vous aurez besoin du double démarrage si vous voulez deux installations Linux distinctes avec des mots de passe différents. Même dans ce cas, vous pourrez peut-être mettre en œuvre la stratégie de sécurité souhaitée en établissant des comptes distincts ou en créant des conteneurs virtualisés distincts, chacun avec ses propres utilisateurs root.

Pour exécuter Linux sur Linux, vous n’avez peut-être même pas besoin de virtualisation: vous pouvez exécuter des programmes à partir d’une autre installation avec chroot . Avec Ubuntu ou une autre distribution basée sur Debian comme système d’exploitation maître, schroot rend cela très facile. Si vous utilisez schroot avec une distribution secondaire différente, vous devrez probablement l'installer séparément, donc sur un volume séparé. Si la distribution secondaire est basée sur Debian et que vous n'avez jamais besoin de la démarrer, vous pouvez l'installer dans un sous-répertoire avec debootstrap . Voir mon guide schroot .

Double installation Ubuntu/Xubuntu

Si vous voulez essayer à la fois Ubuntu et Xubuntu, vous n'avez pas besoin de tout ce rigmarole. Xubuntu et Ubuntu sont la même distribution avec des packages par défaut différents. Installez Ubuntu à partir de n’importe quelle variante et assurez-vous que les packages buntu-desktop et xubuntu-desktop sont installés. Sélectionnez votre environnement préféré lorsque vous vous connectez et vous utiliserez Ubuntu/Unity, également appelé Ubuntu, ou Ubuntu/XFCE, également appelé Xubuntu.

0
Gilles

J'ai récemment installé un autre Ubuntu à côté d'Ubuntu chiffré que j'avais déjà sur mon ordinateur. Pour l'essentiel, j'ai suivi les instructions de Plusieurs installations de Linux Distro sur un disque dur crypté LUKS entrée de blog.

Cependant, je voulais garder l’installation existante intacte, mais comme redimensionner un conteneur LUKS existant est beaucoup trop difficile pour moi, et comme je ne voulais pas re-partitionner tout le disque, j’ai fini par réorganiser les volumes LVM à l’intérieur. le conteneur LUKS existant utilisant un live-USB. Cette décision m'a fait légèrement dévier des instructions, car je devais en quelque sorte placer le nouveau dossier/boot dans le conteneur LUKS. Il s'est avéré être plus simple que prévu, cependant.

Alors, toujours connecté au live-USB, j'ai lancé le programme d'installation et choisi le partitionnement manuel. J'ai pointé "/" sur un nouveau volume logique et laissé l'installateur placer le nouveau/boot dans le conteneur LUKS en ne le pointant nulle part ailleurs. J'ai également indiqué que l’échange vers un nouveau volume logique, bien que je ne sois pas sûr que le mode veille prolongée fonctionne avec LUKS. Pour l'installation de grub, j'ai choisi une cible dans laquelle l'installation échoue sûrement. À la fin, j'ai choisi de "continuer à tester" , et juste après, de continuer sans installation de grub.

Avant le redémarrage après l'installation, j'ai copié/etc/crypttab du premier volume racine d'Ubuntu vers le nouveau volume racine et j'ai exécuté update-initramfs -u avec chroot. . C'est l'étape cruciale.

Après le redémarrage, je me suis connecté au premier Ubuntu, édité/etc/default/grub pour ajouter GRUB_ENABLE_CRYPTODISK = y et modifier GRUB_CMDLINE_LINUX afin qu'il contienne "cryptdevice =/dev/sda5: sda5_crypt", a exécuté update-grub et a redémarré.

Après le redémarrage, une fois la nouvelle installation installée et opérationnelle, j'ai ajouté un fichier de clé pour éviter d'avoir à saisir le mot de passe LUKS à deux reprises au démarrage (car/boot est maintenant crypté). Pour ajouter le fichier de clés, j'ai suivi des instructions presque identiques provenant de plusieurs sources. Je crois que le "cryptage Linux Mint" de Pavel Kogan l'entrée de blog doit être la source originale.

Tout s'est avéré beaucoup plus simple que prévu, bien que je sois obligé de surmonter certains obstacles idiots (comme le bogue "valeur de GRUB_ENABLE_CRYPTODISK: util/grub-install.c indique '1' mais util/config.c attend 'y' ").

0
AimoE