Desde un Ubuntu 16.04 que funcionaba, logré encriptar la partición raíz después de la instalación, con la partición raíz que contenía todo excepto / boot. Puse / boot en un usb extraíble por separado. En particular, hice esto antes de actualizar a Ubuntu 18, y la actualización funcionó bien en la versión de disco cifrado.
El cifrado no se realizó "en su lugar", lo cual estuvo bien para mí porque no quería sobrescribir la versión funcional hasta que la nueva configuración funcionara, de todos modos.
Realizar el procedimiento correcto es extremadamente simple y rápido. (Aunque descubrir el procedimiento correcto fue extremadamente lento porque seguí algunas pistas falsas).
CONTORNO
- Cree un disco USB de Linux en vivo: es conveniente tener habilitada la persistencia. Inicie en ese disco USB en vivo.
- Cree un grupo de volúmenes cifrados luks en una partición vacía. (En mi caso, estaba en el mismo disco que el Linux original, pero podría ser otro disco). Crear / (raíz) e intercambiar volúmenes lógicos en esa partición cifrada. Estos actuarán como particiones virtuales en lo que respecta al linux copiado.
- Copie los archivos de la raíz anterior a la nueva raíz.
- Configure y particione otro USB para que actúe como disco de arranque extraíble.
- Configure algunos archivos en la nueva raíz, haga un poco de magia y haga un chroot en la nueva raíz y luego instale grub en el disco de arranque desde el nuevo entorno raíz chroot'd.
DETALLES
1 - Arranque con un disco USB de Linux en vivo: es conveniente tener habilitada la persistencia.
Instalé Ubuntu 16 en un usb con unetbootin. La GUI permite que se especifique "persistencia", pero también se requiere otro paso para que la persistencia funcione: modifíquela /boot/grub/grub.cfg
para agregarla de la --- persistent
siguiente manera:
menuentry "Try Ubuntu without installing" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- persistent
initrd /casper/initrd
}
Arrancar con el USB en vivo
2- Cree un grupo de volúmenes encriptados luks en una partición vacía. Cree / (raíz) e intercambie volúmenes lógicos en esa partición cifrada.
Suponga que la partición no utilizada que se cifrará es /dev/nvme0n1p4
.
Opcionalmente , si tiene datos antiguos en la partición que desea ocultar antes del cifrado y el formateo, puede borrar la partición al azar. Ver discusión aquí .
dd if=/dev/urandom of=/dev/nvme0n1p4 bs=4096 status=progress
Configura el cifrado.
cryptsetup -y -v luksFormat /dev/nvme0n1p4
Se le pedirá que establezca una contraseña.
cryptsetup luksOpen /dev/nvme0n1p4 crypt1
Se le pedirá que ingrese la contraseña. Tenga en cuenta que crypt1
es un nombre arbitrario decidido por el usuario. Ahora cree los volúmenes y el 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
Use estas utilidades para ver los volúmenes y comprender la jerarquía.
pvscan
vgscan
lvscan
ls -l /dev/mapper
ls -l /dev/crypt1
3- Copie archivos de la raíz antigua a la nueva raíz
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 ...
copias en modo de archivo, conservando todos los modos de archivo y banderas.
4- Configure y particione otro USB para que actúe como el disco de arranque extraíble.
Solía dividirme para esto. Establecer dos particiones. La primera partición es vfat
, la segunda ext2
. Cada uno tenía 512 MB, podría salirse con la suya con menos. Asumir 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- Configure algunos archivos en la nueva raíz, haga un poco de magia y haga un chroot en la nueva raíz y luego instale grub en el disco de arranque desde el nuevo entorno raíz chroot'd.
Encuentre algunos UUID para su uso posterior. Tenga en cuenta los resultados de los siguientes comandos:
blkid /dev/sdf1
blkid /dev/sdf2
blkid /dev/nvme0n1p4
Montar la partición raíz y las particiones de arranque
sudo mount /dev/mapper/crypt1--vg-root /mnt
sudo mount /dev/sdf2 /mnt/boot
sudo mount /dev/sdf1 /mnt/boot/efi
Configura el archivo /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
donde "[uuid of ...]" es solo una combinación de letra, número y guión.
Crea el archivo /mnt/etc/cryptab
# <target name> <source device> <key file> <options>
crypt1 UUID=[uuid of /dev/nvme0n1p4] none luks,discard,lvm=crypt1--vg-root
Se requiere algo de magia para ingresar al entorno del directorio raíz:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
chroot /mnt
Ahora configure el disco USB de arranque 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
Ahora debería poder reiniciar y arrancar usando el disco de arranque USB recién creado.
Solución de problemas
(a) La red debe estar conectada para el apt install --reinstall grub-efi-amd64
comando. Si la red está conectada pero DNS está fallando, intente
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
(b) Antes de llamar initramfs
, el vmlinuz...
archivo actual utilizado en el linux original debe estar presente en el nuevo directorio raíz. Si no es así, encuéntralo y colócalo allí.
(c) El grub-install
comando buscará de manera predeterminada todos los demás discos de Linux que pueda encontrar, incluso si no están mount
editados, y los colocará en el menú de inicio en el nuevo USB de inicio. Por lo general, esto no es deseable, por lo que puede evitarse agregando esta línea a /boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
NOTA:
Se puede agregar un archivo de texto con la clave de cifrado al USB de arranque extraíble.