Em um Ubuntu 16.04 em funcionamento, consegui criptografar a partição raiz pós-instalação, com a partição raiz contendo tudo, exceto / boot. Eu coloquei / boot em um usb removível separado. Notavelmente, fiz isso antes de atualizar para o Ubuntu 18, e a atualização funcionou bem na versão do disco criptografado.
A criptografia não foi feita "no local", o que foi bom para mim, porque eu não queria substituir a versão de trabalho até que a nova instalação estivesse funcionando.
A execução do procedimento correto é extremamente simples e rápida. (Embora descobrir o procedimento correto consumisse muito tempo porque eu segui algumas pistas falsas).
ESBOÇO
- Crie um disco USB linux ativo - é conveniente ter a persistência ativada. Inicialize nesse disco USB ativo.
- Crie um grupo de volumes criptografados luks em uma partição vazia. (No meu caso, ele estava no mesmo disco que o linux original, mas poderia ser outro disco.) Crie / (root) e troque volumes lógicos nessa partição criptografada. Eles atuarão como partições virtuais no que diz respeito ao linux copiado.
- Copie os arquivos da raiz antiga para a nova raiz.
- Configure e particione outro USB para atuar como o disco de inicialização removível.
- Configure alguns arquivos na nova raiz, faça alguma mágica e faça o chroot na nova raiz e instale o grub no disco de inicialização a partir do novo ambiente raiz do chroot.
DETALHES
1 - Inicialize com um disco USB linux ativo - é conveniente ter a persistência ativada.
Instalou o Ubuntu 16 em um usb com o unetbootin. A GUI permite que a "persistência" seja especificada, mas também é necessária outra etapa para que a persistência funcione - modifique /boot/grub/grub.cfg
para adicionar da --- persistent
seguinte maneira:
menuentry "Try Ubuntu without installing" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- persistent
initrd /casper/initrd
}
Inicialize com o USB ao vivo
2- Crie um grupo de volumes criptografados luks em uma partição vazia. Crie / (root) e troque volumes lógicos nessa partição criptografada.
Suponha que a partição não utilizada seja criptografada /dev/nvme0n1p4
.
Opcionalmente , se você tiver dados antigos na partição que deseja ocultar antes da criptografia e formatação, poderá limpar aleatoriamente a partição. Veja a discussão aqui .
dd if=/dev/urandom of=/dev/nvme0n1p4 bs=4096 status=progress
Configure a criptografia.
cryptsetup -y -v luksFormat /dev/nvme0n1p4
Você será solicitado a definir uma senha.
cryptsetup luksOpen /dev/nvme0n1p4 crypt1
Você será solicitado a digitar a senha. Observe que este crypt1
é um nome decidido pelo usuário arbitrariamente. Agora crie os volumes e o 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 esses utilitários para visualizar os volumes e entender a hierarquia.
pvscan
vgscan
lvscan
ls -l /dev/mapper
ls -l /dev/crypt1
3- Copie arquivos da raiz antiga para a nova raiz
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 ...
copia no modo de arquivo, preservando todos os modos e sinalizadores de arquivo.
4- Configure e particione outro USB para atuar como o disco de inicialização removível.
Eu usei o gparted para isso. Configure duas partições. A primeira partição é vfat
a segunda ext2
. Cada um tinha 512 MB, você pode se safar com menos. Assuma o 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 alguns arquivos na nova raiz, faça alguma mágica e faça o chroot na nova raiz e, em seguida, instale o grub no disco de inicialização a partir do novo ambiente raiz do chroot.
Encontre alguns UUIDs para uso posterior. Observe as saídas dos seguintes comandos:
blkid /dev/sdf1
blkid /dev/sdf2
blkid /dev/nvme0n1p4
Monte a partição raiz e partições de inicialização
sudo mount /dev/mapper/crypt1--vg-root /mnt
sudo mount /dev/sdf2 /mnt/boot
sudo mount /dev/sdf1 /mnt/boot/efi
Configure o arquivo /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
onde "[uuid of ...]" é apenas uma combinação de letra, número e hífen.
Crie o arquivo /mnt/etc/cryptab
# <target name> <source device> <key file> <options>
crypt1 UUID=[uuid of /dev/nvme0n1p4] none luks,discard,lvm=crypt1--vg-root
Alguma mágica necessária para entrar no ambiente de diretório raiz:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
chroot /mnt
Agora configure o disco USB de inicialização com grub
:
apt install --reinstall grub-efi-amd64
grub-install --efi-directory=/boot/efi --boot-directory=/boot --removable
update-initramfs -k all -c
update-grub
Agora você deve poder reiniciar e inicializar usando o disco de inicialização USB recém-criado.
Solução de problemas
(a) A rede deve estar conectada para o apt install --reinstall grub-efi-amd64
comando. Se a rede estiver conectada, mas o DNS estiver falhando, tente
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
(b) Antes de chamar initramfs
, o vmlinuz...
arquivo atual usado no linux original deve estar presente no novo diretório raiz. Se não estiver, encontre-o e coloque-o lá.
(c) Por grub-install
padrão, o comando procura todos os outros discos Linux que ele encontrar, mesmo que não sejam mount
editados, e os coloca no menu de inicialização do novo USB de inicialização. Normalmente, isso não é desejado, portanto, pode ser evitado adicionando esta linha a /boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
NOTA:
Um arquivo de texto com a chave de criptografia pode ser adicionado ao USB de inicialização removível.