À partir d'une Ubuntu 16.04 fonctionnelle, j'ai réussi à crypter la partition racine après l'installation, la partition racine contenant tout sauf /boot. J'ai mis /boot sur un usb amovible séparé. Notamment, j'ai fait cela avant de mettre à niveau vers Ubuntu 18, et la mise à niveau a fonctionné correctement sur la version du disque crypté.
Le cryptage n'a pas été effectué "en place", ce qui me convenait parfaitement car je ne voulais pas écraser la version de travail avant que la nouvelle configuration ne fonctionne, de toute façon.
L'exécution de la procédure correcte est extrêmement simple et rapide (bien que la détermination de la procédure correcte ait pris énormément de temps car j'ai suivi quelques fausses pistes).
OUTLINE
- Créez un disque USB linux vivant - il est pratique d'avoir la persistance activée. Démarrez sur ce disque USB vivant.
- Créez un groupe de volume crypté luks sur une partition vide. (Dans mon cas, c'était sur le même disque que le linux original, mais cela pourrait être un autre disque). Créez des volumes logiques / (root) et swap sur cette partition chiffrée. Ceux-ci agiront comme des partitions virtuelles en ce qui concerne le linux copié.
- Copiez les fichiers de l'ancienne racine vers la nouvelle.
- Configurez et partitionnez une autre clé USB qui servira de disque de démarrage amovible.
- Configurez quelques fichiers dans la nouvelle racine, faites un peu de magie, et chrootez dans la nouvelle racine, puis installez Grub sur le disque de démarrage à partir du nouvel environnement racine chrooté.
DÉTAILS
1 - Démarrer avec un disque USB linux vivant - il est pratique d'avoir la persistance activée.
J'ai installé Ubuntu 16 sur un usb avec unetbootin. L'interface graphique permet de spécifier la "persistance", mais une autre étape est également nécessaire pour que la persistance fonctionne - modifier /boot/grub/grub.cfg
à ajouter --- persistent
comme suit :
menuentry "Try Ubuntu without installing" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- persistent
initrd /casper/initrd
}
Démarrez avec l'USB live
2- Créez un groupe de volume crypté luks sur une partition vide. Créez des volumes logiques / (root) et swap sur cette partition chiffrée.
Supposons que la partition inutilisée à crypter est /dev/nvme0n1p4
.
En option, Si vous avez des données anciennes sur la partition que vous voulez cacher avant le cryptage et le formatage, vous pouvez effacer la partition au hasard. Voir la discussion ici .
dd if=/dev/urandom of=/dev/nvme0n1p4 bs=4096 status=progress
Configurez le cryptage.
cryptsetup -y -v luksFormat /dev/nvme0n1p4
Il vous sera demandé de définir un mot de passe.
cryptsetup luksOpen /dev/nvme0n1p4 crypt1
Il vous sera demandé de saisir le mot de passe. Notez que crypt1
est un nom arbitraire décidé par l'utilisateur. Maintenant, créez les volumes et le format.
pvcreate /dev/mapper/crypt1
vgcreate crypt1-vg /dev/mapper/crypt1
lvcreate -L 8G crypt1-vg -n swap
mkswap /dev/crypt1-vg/swap
lvcreate -l 100%FREE crypt1-vg -n root
mkfs.ext4 /dev/crypt1-vg/root
Utilisez ces utilitaires pour visualiser les volumes et comprendre la hiérarchie.
pvscan
vgscan
lvscan
ls -l /dev/mapper
ls -l /dev/crypt1
3- Copier les fichiers de l'ancienne racine vers la nouvelle
mkdir /tmp/old-root
mount /dev/ubuntu-vg/root /tmp/old-root/
mkdir /tmp/new-root
mount /dev/crypt1-vg/root /tmp/new-root/
cp -a /tmp/old-root/. /tmp/new-root/
umount /tmp/old-root
umount /tmp/new-root
cp -a ...
copie en mode archive, en préservant tous les modes et drapeaux de fichiers.
4- Configurez et partitionnez une autre clé USB qui servira de disque de démarrage amovible.
J'ai utilisé gparted pour cela. Créez deux partitions. La première partition est vfat
le second ext2
. Chacun était de 512 Mo, vous pouvez vous en sortir avec moins. Supposons que l'appareil /dev/sdf
.
# The first partition: (will be /dev/sdf1)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: fat32
Label: (leave)
# The second partition: (will be /dev/sdf2)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: ext4
Label: (leave)
5- Configurer quelques fichiers dans la nouvelle racine, faire un peu de magie, et chrooter dans la nouvelle racine et ensuite installer Grub sur le disque de démarrage à partir du nouvel environnement racine chrooté.
Trouver quelques UUIDs pour une utilisation ultérieure. Notez les sorties des commandes suivantes :
blkid /dev/sdf1
blkid /dev/sdf2
blkid /dev/nvme0n1p4
Monter la partition racine et les partitions de démarrage
sudo mount /dev/mapper/crypt1--vg-root /mnt
sudo mount /dev/sdf2 /mnt/boot
sudo mount /dev/sdf1 /mnt/boot/efi
Configurer le fichier /mnt/etc/fstab
/dev/mapper/crypt1--vg-root / ext4 errors=remount-ro 0 1
/dev/mapper/crypt1--vg-swap none swap sw 0 0
UUID=[uuid of /dev/sdf2] /boot ext2 defaults 0 2
UUID=[uuid of /dev/sdf1] /boot/efi vfat umask=0077 0 1
où "[uuid de ...]" est juste une combinaison lettre-numéro-hyphen.
Créer le fichier /mnt/etc/cryptab
# <target name> <source device> <key file> <options>
crypt1 UUID=[uuid of /dev/nvme0n1p4] none luks,discard,lvm=crypt1--vg-root
Une certaine magie est nécessaire pour entrer dans l'environnement du répertoire racine :
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
chroot /mnt
Maintenant, configurez le disque USB de démarrage avec grub
:
apt install --reinstall grub-efi-amd64
grub-install --efi-directory=/boot/efi --boot-directory=/boot --removable
update-initramfs -k all -c
update-grub
Vous devriez maintenant être en mesure de redémarrer et de démarrer en utilisant le disque de démarrage USB nouvellement créé.
Tir à la carabine -
(a) Le réseau doit être connecté pour que le apt install --reinstall grub-efi-amd64
commande. Si le réseau est connecté mais que le DNS échoue, essayez de
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
(b) Avant d'appeler initramfs
le courant vmlinuz...
utilisé dans le linux original doit être présent dans le nouveau répertoire racine. S'il ne l'est pas, trouvez-le et placez-le là.
(c) Le site grub-install
recherchera par défaut tous les autres disques linux qu'elle peut trouver même s'ils ne sont pas mount
et les mettre dans le menu de démarrage sur la nouvelle clé USB de démarrage. Habituellement, cela n'est pas souhaité, donc cela peut être évité en ajoutant cette ligne à /boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
NOTE : Un fichier texte contenant la clé de cryptage peut être ajouté à la clé USB de démarrage amovible.