Minha empresa está trabalhando na implementação de alguns sistemas Ubuntu em alguns de seus novos esforços de teste e fui encarregado de uma solução de criptografia para eles. Tendo sido um usuário principalmente do Windows com apenas um conhecimento prático de Ubuntu e Linux/Unix em geral, isso tem sido um pouco desafiador, mas intrigante. Eu sei que muitos serviços de criptografia funcionam com Windows, mas notei a falta deles no Ubuntu e depois de ler mais de 20 postagens aqui sobre isso, decidi que uma nova instalação com criptografia completa de disco é a única opção realista. Dito isto, alguns dos sistemas já estão em uso e não poderiam ser simplesmente apagados e instalados novamente com criptografia. Eu precisaria de TODAS as configurações e alterações, bem como dos arquivos existentes copiados/com backup. Portanto, não é tão simples quanto copiar/home. Fiquei curioso para saber qual seria o melhor curso de ação para mim, tenho uma cópia completa da partição (usei o gparted para fazer uma cópia rápida para externo) para minha máquina de teste e uma nova instalação do Ubuntu com LUKS. Estou familiarizado com os fundamentos do clonezilla, mas não acredito que isso me ajude aqui, pelo que percebi.
tldr: Preciso mover uma instalação completa do Ubuntu 16.04 para um disco criptografado. Algumas máquinas serão habilitadas para TPM e outras não. Preciso saber o melhor curso de ação para cada uma. Obrigado por ajudar um novo administrador.
BÔNUS se você puder descrever uma maneira que não requer acesso externo à rede, mas não é obrigatório. Ou seja, se precisar de um pacote, posso baixá-lo em um PC de teste para USB/CD/DVD e instalar o pacote offline.
Responder1
Descrito abaixo está um procedimento que usei com sucesso várias vezes. Funciona para Ubuntu 16.04 e 18.04. Ao contrário da solução proposta por @Arno em sua resposta, não requer edição manual das opções de inicialização do kernel. Em vez disso, ele depende da update-grub
geração de configuração adequada com base em /etc/crypttab
- uma solução mais canônica (trocadilho não intencional) que também é usada pelo Ubuntu ao instalar com sua criptografia padrão baseada em LVM. (esta solução não usa LVM nem criptografada /boot
)
Não sou responsável por qualquer perda de dados ou outras possíveis consequências desagradáveis ao seguir este guia. Certifique-se de ter backups confiáveis antes de fazer qualquer coisa.
Não estou testando este guia enquanto digito. É baseado em um (testado)postagem no blog por mim mesmoem um caso um tanto semelhante e alguns detalhes que me lembro.
Este guia pressupõe que:
- Ubuntu já está instalado
- O sistema inicializa com (U)EFI, não BIOS/CSM
/boot
está em uma partição separada 1- Você pode inicializar uma mídia live do Ubuntu 16.04/18.04 ou Pop!_OS 18.04 (de USB, PXE, DVD, qualquer que seja) 2
Se você /boot
não estiver em uma partição separada, extraí-la é bastante simples: crie uma partição de 200-500 MB em qualquer lugar, formate-a para ext4, copie /boot
o conteúdo atual, adicione /etc/fstab
entrada, update-grub
reinicie.
1. Backup
Você precisa fazer backup das partições atuais do sistema. A maneira mais fácil de fazer isso é usar o Clonezilla. É à prova de usuário, não é necessário manual - basta seguir as instruções.
2. Reduzindo partições
Os cabeçalhos LUKS ocupam parte do espaço em uma partição. Clonezilla/partclone não pode restaurar imagens para dispositivos menores que os de origem, então você não seria capaz de restaurar a imagem da partição não criptografada para o contêiner criptografado, porque é um pouco menor.
Em seguida, temos que reduzir um pouco a(s) partição(ões) para serem criptografadas. Reduza-os em 10 MB ou mais, apenas por segurança. A maneira mais fácil de fazer isso é usar o GParted. Está disponível na mídia ao vivo do Ubuntu.
3. Fazendo imagens de partições reduzidas
Faça isso com o Clonezilla novamente ou já se familiarize comclone parcial, que o Clonezilla está usando por padrão. Estaremos restaurando manualmente as imagens com partclone mais tarde.
Clonando para uma imagem com partclone:
sudo partclone.ext4 -c -s /dev/sda2 | pigz -0 > /mnt/backup/sda2.ext4.ptcl.gz
partclone.ext4
é um dos binários do partclone dedicado a trabalhar com ext4. Cada sistema de arquivos suportado obtém seu próprio binário partclone./dev/sda2
é obviamente a partição que você deseja clonar. Eu prefiro me referir às partições pelo seu partlabel, por exemplo./dev/disk/by-partlabel/os
- IMO muito mais limpo./dev/sda2
é mais reconhecível, no entanto.porcozé gzip multicore.
-0
diz para favorecer a velocidade em vez da compressão eficaz./mnt/backup
aqui representa algum local externo onde você deseja armazenar a imagem. Se você acabou de usar o Clonezilla antes, ele ainda pode ser montado no/home/partimag
. Se você deseja montar um compartilhamento SMB:sudo mount -t cifs -o username=gronostaj //192.168.1.90/Backup /mnt/backup
(pede a senha de forma interativa)
4. Amplie a(s) partição(ões) para o tamanho original
Queremos ter de volta aquele espaço extra para cabeçalhos LUKS, não é? Redimensione as partições de volta aos seus tamanhos originais.
5. Formatando para LUKS
Este é o momento em que você perde seus dados originais. Certifique-se de que seus backups estejam corretos.
Formate as partições do sistema (exceto /boot
) para LUKS:
sudo cryptsetup luksFormat --type luks2 /dev/sda2
Abra o(s) contêiner(es) criado(s):
sudo cryptsetup open /dev/sda2 os
Certifique-se de que todo o contêiner criptografado pareça lixo aleatório e que seus dados antigos ainda não sejam legíveis:
sudo dd if=/dev/zero of=/dev/mapper/os bs=1M
(isso substituirá o conteúdo descriptografado do contêiner por zeros, mas o conteúdo criptografado parecerá lixo aleatório)
6. Restaurando imagens
Execute manualmente o partclone para restaurar imagens:
cat /mnt/backup/sda2.ext4.ptcl.gz | pigz -d | sudo partclone.ext4 -r -o /dev/mapper/os
Se você seguiu o caminho mais fácil e fez backups "reduzidos" com o Clonezilla, procure em seus arquivos de saída, você descobrirá facilmente quais são as fontes do partclone. A menos que você defina um tamanho de pedaço grande, eles serão fragmentados, você terá que cat
juntá-los antes de canalizar para pigz.
Você também deve ajustar a geometria do sistema de arquivos para caber na partição inteira:
sudo resize2fs /dev/mapper/os
7. Habilitando suporte à criptografia
Primeiro, faça chroot no sistema operacional recém-restaurado:
mkdir /mnt/os
sudo mount /dev/mapper/os /mnt/os
cd /mnt/os
mount --bind /etc/resolv.conf etc/resolv.conf
mount --bind /dev dev
mount -t tmpfs tmpfs tmp
mount -t sysfs sys sys
mount -t proc proc proc
sudo chroot .
mount -a
Este terminal agora está funcionando na sua instância instalada do Ubuntu, não na instância ativa.
Instalarconfiguração de criptografia:
apt update
apt install cryptsetup -y
Deveria criar um arquivo /etc/crypttab
. Caso contrário, não se preocupe, crie-o manualmente. Edite este arquivo e adicione entradas para partição(ões):
os /dev/sda2 none luks
Salve e saia do editor. Reconstrua o initramfs:
update-initramfs -u -k all
Atualize as entradas do GRUB:
update-grub
8. Removendo solicitações extras de senha
Se você tiver mais de uma partição criptografada, será necessário digitar a senha de cada uma delas na inicialização. No entanto, o LUKS permite adicionar arquivos-chave adicionais que podem ser usados para desbloquear partições em vez de senha. Você pode armazenar esses arquivos-chave em /
uma partição criptografada e usá-los para desbloquear os subsequentes.
Crie um arquivo-chave aleatório:
dd if=/dev/urandom of=/luks.key bs=4096 count=1
Adicione-o à(s) partição(ões) não-root:
cryptsetup luksAddKey /dev/sda3 /luks.key
Adicione crypttab
entradas:
home /dev/sda3 /luks.key luks
Reconstrua o initramfs:
update-initramfs -u -k all
1 Por que uso separado /boot
:
- É mais fácil assim ;)
- GRUB ainda não suporta LUKS2, portanto
/boot
não deve estar na partição criptografada LUKS2 - Se você deseja criptografar LUKS
/boot
e criptografar LUKS2/
, será necessário inserir a senha duas vezes ouincorporar arquivo-chave no initramfs- muito incômodo, IMO, porque ... - Criptografado
/boot
por si só não o torna menos vulnerável, porque mesmo que você/boot
esteja criptografado, sua partição do sistema EFI não pode ser, então o invasor pode adulterá-la e, por exemplo. use seu kernel/initramfs malicioso personalizado em vez do seu do/boot
. (para corrigir isso, você tem queconstrua um binário GRUB autocontêiner e assine-o com sua chave privadae use o UEFI Secure Boot para verificá-lo)
Defina seu próprio modelo de ameaça e decida qual nível de segurança (e contra qual) você precisa.
2 Você pode tentar a sorte com outras versões do Ubuntu ou CDs de resgate, comoGRML, mas sua milhagem pode variar. Eu experimentei esse procedimento falhando apenas porque a mídia ao vivo não correspondia ao sistema.
Responder2
Você pode criar uma imagem da partição raiz, formatá-la com LUKS, montá-la e substituí-la pela imagem. Então, seriam necessárias algumas alterações no GRUB para que ele fosse descriptografado na inicialização.Não testei os passos abaixo, eles são apenas uma pista.
Presumi que /boot
está ativado sdb1
, a partição raiz está ativada sdb2
e /media/hdd
é uma unidade externa. Estamos em um Live USB em um prompt do administrador.
Criptografe a partição raiz
dd if=/dev/sdb2 of=/media/hdd/diskimg bs=1M
cryptsetup luksFormat /dev/sdb2
cryptsetup luksOpen /dev/sdb2 enc_root
dd if=/media/hdd/diskimg of=/dev/mapper/enc_root
Monte as partições
mount /dev/sdb2 /mnt
mount /dev/sdb1 /mnt/boot
Configurar o GRUB
Observe o UUID da partição executando:
blkid /dev/sdb2
Edite /mnt/etc/default/grub
, encontre a linha que diz GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
. Altere-o para o seguinte, substituindo device-UUID
pelo UUID anotado na etapa anterior.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cryptdevice=UUID=device-UUID:enc_root root=/dev/mapper/enc_root"
Em seguida, atualize a configuração do GRUB:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
chroot /mnt
update-grub
exit
E desmonte tudo:
umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt/boot
umount /mnt
E reinicie. Algumas armadilhas:
- Não testei nada disso e não brinquei com partições Linux há algum tempo, então tenho quase certeza de que esqueci ou estraguei alguma coisa. Espere que as pessoas revisem e corrijam.
- Isso pressupõe que
/boot
esteja em uma partição separada; não funcionaria se tudo estivesse na mesma partição. - Em um sistema UEFI, não se esqueça de montar também a partição EFI onde ela pertence.
dd
irá copiartudoincluindo espaço livre, um método mais rápido seria copiar apenas os arquivos da partição.
Boa sorte!