Da un Ubuntu 16.04 funzionante, sono riuscito nella crittografia della partizione root post-installazione, con la partizione root contenente tutto tranne / boot. Metto / avvio su un usb rimovibile separato. In particolare, l'ho fatto prima di eseguire l'aggiornamento a Ubuntu 18 e l'aggiornamento ha funzionato bene sulla versione del disco crittografato.
La crittografia non è stata eseguita "sul posto", il che andava bene per me perché non volevo sovrascrivere la versione funzionante fino a quando la nuova installazione non funzionava, comunque.
L'esecuzione della procedura corretta è estremamente semplice e veloce. (Anche se capire la procedura corretta è stato estremamente dispendioso in termini di tempo perché ho seguito alcune false indicazioni.)
CONTORNO
- Crea un disco USB Linux live: è conveniente avere la persistenza abilitata. Avviare su quel disco USB live.
- Crea un gruppo di volumi crittografato luks su una partizione vuota. (Nel mio caso era sullo stesso disco dell'originale Linux, ma potrebbe essere un altro disco.) Creare / (root) e scambiare volumi logici su quella partizione crittografata. Questi fungeranno da partizioni virtuali per quanto riguarda il Linux copiato.
- Copia i file dalla vecchia radice alla nuova radice.
- Configurare e partizionare un'altra USB per fungere da disco di avvio rimovibile.
- Imposta alcuni file nella nuova radice, fai un po 'di magia e chroot nella nuova radice, quindi installa grub sul disco di avvio dal nuovo ambiente root chroot.
DETTAGLI
1 - Avvio con un disco USB Linux live: è conveniente avere la persistenza abilitata.
Ubuntu 16 installato su un usb con unetbootin. La GUI consente di specificare "persistenza", ma è necessario anche un altro passaggio per far funzionare la persistenza: modificare /boot/grub/grub.cfg
per aggiungere --- persistent
come segue:
menuentry "Try Ubuntu without installing" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- persistent
initrd /casper/initrd
}
Avviare con l'USB live
2- Creare un gruppo di volumi crittografato luks su una partizione vuota. Crea / (root) e scambia volumi logici su quella partizione crittografata.
Supponiamo che la partizione inutilizzata da crittografare sia /dev/nvme0n1p4
.
Facoltativamente , se sulla partizione sono presenti vecchi dati che si desidera nascondere prima della crittografia e della formattazione, è possibile cancellare casualmente la partizione. Vedi la discussione qui .
dd if=/dev/urandom of=/dev/nvme0n1p4 bs=4096 status=progress
Imposta la crittografia.
cryptsetup -y -v luksFormat /dev/nvme0n1p4
Ti verrà chiesto di impostare una password.
cryptsetup luksOpen /dev/nvme0n1p4 crypt1
Ti verrà chiesto di inserire la password. Si noti che crypt1
è un nome deciso dell'utente arbitrario. Ora crea i volumi e il formato.
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
Utilizzare queste utilità per visualizzare i volumi e comprendere la gerarchia.
pvscan
vgscan
lvscan
ls -l /dev/mapper
ls -l /dev/crypt1
3- Copia i file dalla vecchia radice alla nuova radice
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 in modalità archivio, preservando tutte le modalità file e flag.
4- Configurare e partizionare un'altra USB per fungere da disco di avvio rimovibile.
Ho usato gparted per questo. Imposta due partizioni. La prima partizione è vfat
, la seconda ext2
. Ciascuno era 512 MB, potresti cavartela con meno. Assumi dispositivo /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- Configurare alcuni file nella nuova radice, fare un po 'di magia e chroot nella nuova radice, quindi installare grub sul disco di avvio dal nuovo ambiente root chroot.
Trova alcuni UUID per un uso successivo. Nota le uscite dai seguenti comandi:
blkid /dev/sdf1
blkid /dev/sdf2
blkid /dev/nvme0n1p4
Montare la partizione di root e avviare le partizioni
sudo mount /dev/mapper/crypt1--vg-root /mnt
sudo mount /dev/sdf2 /mnt/boot
sudo mount /dev/sdf1 /mnt/boot/efi
Imposta il file /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
dove "[uuid of ...]" è solo una combinazione lettera-numero-trattino.
Crea il file /mnt/etc/cryptab
# <target name> <source device> <key file> <options>
crypt1 UUID=[uuid of /dev/nvme0n1p4] none luks,discard,lvm=crypt1--vg-root
Qualche magia necessaria per accedere all'ambiente della directory principale:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
chroot /mnt
Ora imposta il disco USB di avvio con grub
:
apt install --reinstall grub-efi-amd64
grub-install --efi-directory=/boot/efi --boot-directory=/boot --removable
update-initramfs -k all -c
update-grub
Ora dovresti essere in grado di riavviare e avviare utilizzando il disco di avvio USB appena creato.
Toubleshooting-
(a) La rete deve essere connessa per il apt install --reinstall grub-efi-amd64
comando. Se la rete è connessa ma DNS non funziona, provare
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
(b) Prima di chiamare initramfs
, il vmlinuz...
file corrente usato nel linux originale deve essere presente nella nuova directory root. Se non lo è, trovalo e mettilo lì.
(c) Il grub-install
comando cercherà di default tutti gli altri dischi Linux che può trovare anche se non sono mount
editati e li inserirà nel menu di avvio sul nuovo USB di avvio. Di solito questo non è desiderato, quindi può essere evitato aggiungendo questa riga a /boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
NOTA:
un file di testo con la chiave di crittografia può essere aggiunto alla porta USB rimovibile.