Thursday Feb 03, 2022

How To Encrypt Root Filesystem on Linux

As a system administrator, you probably already know how how important it is to encrypt your disks.

If your laptop were to be stolen, even a novice hacker would be able to extract the information contained on the disks.

Basta uma simples pendrive com um LiveCD e tudo seria roubado.

Felizmente para você, há maneiras de evitar que isso aconteça : criptografando os dados armazenados em seus discos.

Neste tutorial, vamos ver os passos necessários para realizar uma criptografia completa do sistema. Você pode encontrar outros tutoriais online focados em criptografar apenas um arquivo ou partições home, por exemplo.

Neste caso, estamos criptografando todo o sistema, significando toda a partição raiz e a pasta de boot. Vamos encriptar uma parte do bootloader.

Pronto?

Tabela de Conteúdos

Prrequisitos

Para realizar todas as operações detalhadas neste guia, você obviamente precisa ter direitos de administrador do sistema.

Para verificar se este é o caso, certifique-se de que pertence ao grupo “sudo” (para distribuições baseadas em Debian) ou “wheel” (em distribuições baseadas em RedHat).

Se você vir o seguinte output, você deve estar pronto para ir.

Antes de continuar, é importante que você saiba que encriptar discos não vem sem nenhum risco.

O processo envolve formatar todo o seu disco, o que significa que você perderá dados se não fizer backup. Como consequência, pode ser uma boa ideia fazer o backup dos seus ficheiros, quer opte por fazê-lo num disco externo ou numa nuvem online.

Se não tiver a certeza sobre os passos necessários para fazer o backup de todo o seu sistema, recomendo que leia o seguinte tutorial que o explica em termos claros.

Agora que tudo esteja definido, podemos começar a encriptar todo o nosso sistema.

Identificar a sua situação actual

Este tutorial está dividido em três partes: uma para cada cenário que possa estar a enfrentar.

Após identificar sua situação atual, você pode navegar diretamente para o capítulo que você está interessado.

Se você quiser criptografar um sistema que já contém dados não criptografados, você tem duas opções :

  • Você pode adicionar um disco adicional ao seu computador ou servidor e configurá-lo para se tornar o disco de inicialização : você pode ir para a parte um.
  • Você não pode adicionar um disco adicional ao seu computador (um laptop sob garantia, por exemplo) : você encontrará as informações necessárias na parte dois.

Se você está instalando um sistema novo, o que significa que você instala a distribuição do zero, você pode criptografar todo o seu disco diretamente do instalador gráfico. Como consequência, pode ir à parte três.

Design Hard Disk Layout

Quando estiver a criar novas partições, encriptadas ou não, é bastante importante escolher o design do disco rígido antes do tempo.

Neste caso, vamos desenhar o nosso disco usando um layout MBR : os primeiros 512 bytes do disco de arranque serão reservados para a primeira fase do GRUB (assim como metadados para as nossas partições).

A primeira partição será uma partição vazia reservada para sistemas usando EFI (ou UEFI) como firmware de arranque. Se escolher instalar o Windows 10 no futuro, terá uma partição já disponível para isso.

A segunda partição do nosso disco será formatada como uma partição LUKS-LVM contendo um volume físico (a própria partição do disco) assim como um grupo de volumes contendo dois volumes lógicos : um para o sistema de ficheiros raiz e outro para uma pequena partição swap.

Como você pode ver, o segundo estágio do GRUB também será criptografado : isto é porque escolhemos ter a pasta de boot armazenada na mesma partição.

Obviamente, você não está limitado ao design fornecido aqui, você pode adicionar volumes lógicos adicionais para seus logs por exemplo.

Este design será nosso roteiro para este tutorial : vamos começar a partir de um disco novo e implementar todas as partes juntas.

Criptografia de dados no teste

Este tutorial foca na criptografia de dados no teste. Como seu nome indica, a criptografia de dados no teste significa que seu sistema está criptografado, ou seja, ninguém pode ler a partir dele, quando ele está descansando ou desligado.

Esta encriptação é bastante útil se o seu computador for roubado, os hackers não poderão ler os dados no disco, a menos que saibam da senha que você vai escolher nas próximas seções.

No entanto, ainda haveria o risco dos seus dados serem apagados para sempre: não ter acesso de leitura a um disco não significa que eles não possam simplesmente remover partições nele.

Como consequência, certifique-se de que mantém um backup dos seus arquivos importantes em algum lugar seguro.

Encrypting Root Filesystem on New Disk

Como detalhado durante a introdução, vamos encriptar o sistema de ficheiros raiz a partir de um novo disco que não contenha quaisquer dados. Isto é muito importante porque o disco encriptado será formatado no processo.

Cabeçar o sistema que você quer encriptar e ligar o novo disco. Primeiro de tudo, identifique seu disco atual, que provavelmente é chamado “/dev/sda” e o disco que você acabou de conectar (provavelmente chamado “/dev/sdb”).

Se você tiver alguma dúvida sobre a correspondência entre nomes e séries do disco, você pode anexar fornecedores e séries com a opção “-o” do lsblk.

$ lsblk -do +VENDOR,SERIAL

Neste caso, o disco com dados é chamado “/dev/sda” e o novo é chamado “/dev/sdb”.

Antes de mais nada, precisamos criar o layout que especificamos na introdução, ou seja, uma partição que será uma partição EFI e uma partição LUKS-LVM.

Criando o Layout do Disco Básico

O primeiro passo na nossa jornada para a encriptação completa do disco começa com duas partições simples : uma EFI (mesmo se usarmos MBR, caso queira mudar no futuro) e uma para o nosso LVM.

Para criar novas partições no seu disco, use o comando “fdisk” e especifique o disco a ser formatado.

$ sudo fdisk /dev/sdb

Como explicado na introdução, a primeira partição será uma de 512 Mb e a outra ocupará o espaço restante no disco.

No utilitário “fdisk”, você pode criar uma nova partição com a opção “n” e especificar um tamanho de 512 megabytes com “+512M”.

Certifique-se de mudar o tipo de partição para W95 FAT32 usando a opção “t” e especificando “b” como o tipo.

Fantástico, agora que tem a sua primeira partição, vamos criar a que nos interessa.

Criar a segunda partição é ainda mais simples.

No utilitário fdisk, use “n” para criar uma nova partição e fique com as configurações padrão, o que significa que você pode pressionar “Enter” em cada passo.

Quando terminar, você pode simplesmente pressionar “w” para escrever as alterações no disco.

Agora, executar o comando “fdisk” novamente lhe dará uma boa idéia das alterações que você executou no disco.

$ sudo fdisk -l /dev/sdb

Great!

A sua segunda partição está pronta para ser formatada, então vamos lá.

Criando LUKS &Partições LVM no disco

Para encriptar discos, vamos usar LUKS, abreviação para o projeto Linux Unified Key Setup.

LUKS é uma especificação para vários backends implementados em algumas versões do kernel Linux.

Neste caso, vamos usar o submódulo “dm-crypt” da pilha de armazenamento do Linux.

Como seus nomes indicam, “dm-crypt” é parte do módulo de mapeamento de dispositivos que visa criar uma camada de abstração entre seus discos físicos e a forma que você escolhe para projetar sua pilha de armazenamento.

Diagrama de thomas-krenn.com

Esta informação é bastante importante porque significa que você pode criptografar praticamente todos os dispositivos usando o backend “dm-crypt”.

Neste caso, vamos encriptar um disco, contendo um conjunto de partições LVM, mas você pode escolher encriptar um stick de memória USB ou um disquete.

A fim de interagir com o módulo “dm-crypt”, vamos usar o comando “cryptsetup”.

Obviamente, pode ser necessário instalá-lo no seu servidor se ainda não o tiver.

$ sudo apt-get instal cryptsetup$ which cryptsetup

Agora que o cryptsetup esteja disponível no seu computador, você irá criar a sua primeira partição formatada em LUKS.

Para criar uma partição LUKS, você vai usar o comando “cryptsetup” seguido do comando “luksFormat” que formata a partição (ou disco) especificada.

 $ sudo cryptsetup luksFormat --type luks1 /dev/sdb2

Nota : então porque estamos a especificar o tipo de formatação LUKS1 ? Desde janeiro de 2021, o GRUB (nosso bootloader) não suporta a criptografia LUKS2. Certifique-se de deixar um comentário se você notar que o LUKS2 está agora lançado para o bootlader do GRUB.

Como você pode ver, você é notificado que esta operação irá apagar todos os dados armazenados no disco. Verifique o disco que você está formatando uma última vez, e digite “SIM” quando estiver pronto.

Direito depois, você será avisado com uma senha. O LUKS usa dois métodos de autenticação : uma senha baseada em uma senha que é essencialmente uma senha que você digita na decodificação.

LUKS também pode usar chaves. Utilizando chaves, pode por exemplo armazená-la numa parte do seu disco e o seu sistema será capaz de cuidar dela automaticamente.

Escolha uma frase-chave forte, introduza-a novamente e aguarde que a encriptação do disco esteja completa.

Quando terminar, pode verificar com o comando “lsblk” que a sua partição está agora encriptada como um LUKS.

>

Fantástico! Você agora tem uma partição encriptada.

$ lsblk -f

Para verificar se a sua partição está correctamente formatada, pode usar o comando “cryptsetup” seguido da opção “luksDump” e especificar o nome do dispositivo encriptado.

$ sudo cryptsetup luksDump /dev/sdb2

Sua versão deve ser definida como “1” para o formato “LUKS1” e você deve ver abaixo a senha criptografada em um dos keyslots.

Criando LVM criptografado em disco

Agora sua partição LUKS criptografada esteja pronta, você pode “abri-la”. “Abrir” uma partição criptografada significa simplesmente que você vai acessar dados no disco.

Para abrir seu dispositivo criptografado, use o comando “cryptsetup” seguido por “luksOpen”, o nome do dispositivo criptografado e um nome.

$ sudo cryptsetup luksOpen <encrypted_device> <name>

Neste caso, escolhemos o nome do dispositivo “cryptlvm”.

Como consequência, usando o comando “lsblk” novamente, você pode ver que um novo dispositivo foi adicionado à lista de dispositivos existentes. A segunda partição agora contém um dispositivo chamado “cryptlvm” que é a sua partição desencriptada.

Agora que tudo esteja pronto, podemos começar a criar os nossos dois LVM : um para a nossa partição raiz e outro para a swap.

Primeiro de tudo, vamos criar um volume físico para o nosso novo disco usando o comando “pvcreate”.

# Optional, if you don't have LVM commands : sudo apt-get install lvm2$ sudo pvcreate /dev/mapper/cryptlvm

Agora o seu volume físico está pronto, você pode usá-lo para criar um grupo de volume chamado “cryptvg”.

$ sudo vgcreate cryptvg /dev/mapper/cryptlvm

Agora seu grupo de volume está pronto, você pode criar seus dois volumes lógicos.

Neste caso, a primeira partição é uma de 13Gb e a partição swap ocupará o espaço restante. Certifique-se de modificar esses números para o seu caso específico.

A fim de hospedar nosso sistema de arquivos raiz, vamos criar um sistema de arquivos EXT4 no volume lógico.

$ sudo lvcreate -n lvroot -L 13G cryptvg$ sudo mkfs.ext4 /dev/mapper/cryptvg-lvroot

Criar a partição swap pode ser conseguido usando os mesmos passos, usando o “lvcreate” e o “mkswap”.

$ sudo lvcreate -n lvswap -l 100%FREE cryptvg$ sudo mkswap /dev/mapper/cryptvg-lvswap

Fantástico! Agora que suas partições estão criadas, é hora de você transferir seu sistema de arquivos raiz existente no recém-criado.

Transferir Todo o Sistema de Arquivos para Disco Encriptado

Antes de transferir todo o seu sistema de arquivos, pode ser uma boa idéia verificar se você tem espaço suficiente na unidade de destino.

$ df -h 

A fim de transferir todo o seu sistema de arquivos para a sua partição recém-criada, você vai usar o comando “rsync”.

Montagem do seu volume lógico recém-criado e começar a copiar seus arquivos e pastas recursivamente para a unidade de destino.

$ sudo mount /dev/mapper/cryptvg-lvroot /mnt$ sudo rsync -aAXv / --exclude="mnt" /mnt --progress

Este processo pode levar algum tempo dependendo da quantidade de dados que você tem que transferir.

Após algum tempo, todo o seu sistema de ficheiros deve ser copiado para o seu disco encriptado. Agora que o “/boot” está criptografado, você precisará reinstalar o estágio 1 do GRUB de acordo.

Install and Configure GRUB Bootloader

Então, por que você precisaria reinstalar e reconfigurar seu GRUB de acordo?

Para responder a esta pergunta, você precisa ter uma idéia básica da maneira como seu sistema inicia quando usando um processo de inicialização convencional BIOS/MBR.

Como explicado na introdução, o GRUB é dividido em duas (às vezes três) partes : GRUB estágio 1 e GRUB estágio 2. O estágio 1 irá procurar apenas a localização do estágio 2, frequentemente localizado na pasta “/boot” do seu sistema de arquivos.

O estágio 2 é responsável por muitas tarefas : carregar os módulos necessários, carregar o kernel na memória e iniciar o processo initramfs.

Como você entendeu, o estágio 2 é criptografado aqui, então precisamos dizer ao estágio 1 (localizado nos primeiros 512 bytes do seu disco) que ele precisa ser decifrado primeiro.

Re-instalar o GRUB Estágio 1 & 2

Para reinstalar o primeiro estágio do GRUB, você precisa primeiro habilitar o “cryptomount” que permite o acesso a dispositivos criptografados no ambiente GRUB.

Para conseguir isso, você precisa editar o arquivo “/etc/default/grub” e adicionar a opção “GRUB_ENABLE_CRYPTODISK=y”.

No entanto, você está atualmente sentado no sistema que você está tentando criptografar. Como consequência, terá de fazer chroot no seu novo disco para executar correctamente os comandos.

Chroot in Encrypted Drive

Para fazer chroot no seu disco encriptado, terá de executar os seguintes comandos.

Agora que tenha executado esses comandos, deverá agora estar no contexto do seu disco encriptado.

$ vi /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y

Como indicado na documentação do GRUB, esta opção irá configurar o GRUB para procurar dispositivos encriptados e adicionar comandos adicionais de forma a descodificá-los.

Agora o estágio 1 está configurado, você pode instalá-lo no seu MBR usando o comando grub-install.

$ grub-install --boot-directory=/boot /dev/sdb

Nota : tenha cuidado, você precisa especificar “/dev/sdb” e não “/dev/sdb1”.

Como provavelmente notou, quando não fornece opções para a instalação do GRUB, tem por defeito uma instalação “i386-pc” (que é desenhada para um firmware baseado em BIOS).

Re-instalar o GRUB Estágio 2

Usando os passos detalhados acima, o estágio 1 foi atualizado, mas também precisamos dizer ao estágio 2 que ele está lidando com um disco criptografado.

Para conseguir isso, vá para o “/etc/default/grub” e adicione outra linha para o estágio 2 do seu GRUB.

GRUB_CMDLINE_LINUX="cryptdevice=UUID=<encrypted_device_uuid> root=UUID=<root_fs_uuid>"

Esta é uma linha importante porque diz o segundo estágio do GRUB onde está o drive criptografado e onde a partição raiz está localizada.

Para identificar os UUIDs necessários, você pode usar o comando “lsblk” com a opção “-f”.

$ lsblk -f 

Usando esses UUIDs, adicionaríamos a seguinte linha ao ficheiro de configuração do GRUB.

Para actualizar a sua instalação actual do GRUB, pode usar o comando “update-grub2” no seu ambiente chrooted.

$ sudo update-grub2

Agora de actualizar a sua instalação GRUB, o seu menu GRUB (ou seja, a fase 2) deve ser modificado e deve ver o seguinte conteúdo ao inspeccionar o “/boot/grub/grub”.cfg” file.

Como você pode ver, o arquivo de configuração do GRUB foi modificado e seu sistema agora está usando “cryptomount” para localizar a unidade criptografada.

Para o seu sistema arrancar correctamente, precisa de verificar se :

  • Está a carregar os módulos correctos tais como cryptodisk, luks, lvm e outros;
  • A instrução “cryptomount” está correctamente definida;
  • O kernel é carregado utilizando a instrução “cryptdevice” que acabámos de definir na secção anterior.
  • O UUID especificado está correcto : o “cryptdevice” está a apontar para a partição encriptada LUKS2 e o “root” para o sistema de ficheiros raiz ext4.

Modificar os ficheiros crypttab e fstab

Um dos primeiros passos do initramfs será montar os seus volumes usando os ficheiros “/etc/crypttab” e “/etc/fstab” no sistema de ficheiros.

Como consequência, e porque você está criando novos volumes, você pode ter que modificar esses arquivos para colocar o UUID correto neles.

Primeiro de tudo, vá para o ficheiro “/etc/crypttab” (pode criá-lo se ainda não existir) e adicione o seguinte conteúdo

$ nano /etc/crypttab# <target name> <source device> <key file> <options> cryptlvm UUID=<luks_uuid> none luks

Se não tiver a certeza sobre o UUID do seu dispositivo encriptado, pode usar o “blkid” para obter a informação.

$ blkid | grep -i LUKS 

Agora o arquivo de criptografia é modificado, você só precisa modificar a fstab de acordo.

$ nano /etc/fstab# <file system> <mount point> <type> <options> <dump> <pass>UUID=<ext4 uuid> / ext4 errors=remount-ro 0 1

Again, se você não tem certeza sobre o UUID do seu sistema de arquivos ext4, você pode usar o comando “blkid” novamente.

$ blkid | grep -i ext4

Almost done!

Agora seus arquivos GRUB e de configuração estejam corretamente configurados, só precisamos configurar a imagem initramfs.

Reconfigurar imagem initramfs

Dentre todos os scripts de inicialização, o initramfs irá procurar pelo sistema de arquivos raiz que você especificou no capítulo anterior.

No entanto, para decifrar o sistema de ficheiros raiz, terá de invocar os módulos initramfs correctos, nomeadamente o módulo “cryptsetup-initramfs”. No seu ambiente chrooted, pode executar o seguinte comando :

$ apt-get install cryptsetup-initramfs 

Para incluir os módulos cryptsetup-initramfs na sua imagem initramfs, certifique-se de executar o comando “update-initramfs”.

$ update-initramfs -u -k all

É isso!

Você montou com sucesso todas as peças necessárias para criar um disco totalmente criptografado no seu sistema. Agora você pode reiniciar seu computador e dar uma olhada no seu novo processo de boot.

Boot on Encrypted Device

Quando inicializar, a primeira tela que você verá é o primeiro estágio do GRUB tentando decodificar o segundo estágio do GRUB.

Se você vir este prompt de senha, significa que você não tem nenhum erro na sua configuração do estágio 1.

Note : esteja ciente de que esta tela pode não seguir o seu layout usual de teclado. Como consequência, se você tiver um prompt de senha incorreto, você deve tentar fingir que tem um teclado US ou um AZERTY por exemplo.

Ao fornecer a senha correta, você será apresentado com o menu GRUB.

Se você vir esta tela, significa que o seu estágio 1 foi capaz de abrir o estágio 2. Você pode selecionar a opção “Ubuntu” e inicializar em seu sistema.

Na próxima tela, você será solicitado a fornecer a senha novamente.

Isto é bastante normal porque sua partição de inicialização é criptografada. Como consequência, você precisa de uma frase-chave para desbloquear o estágio 2 e uma para desbloquear todo o sistema de arquivos raiz.

Felizmente, há uma maneira de evitar isso : tendo um arquivo chave embutido na imagem do initramfs. Para isso, os colaboradores do ArchLinux escreveram um excelente tutorial sobre o assunto.

Neste caso, vamos apenas fornecer a senha e pressionar Enter.

Após algum tempo, quando o processo de inicialização estiver concluído, você deverá ser apresentado com a tela de bloqueio da sua interface de usuário!

Congratulações, você encriptou com sucesso um sistema inteiro no Linux!

Criptografar sistema de arquivos raiz em disco existente

Em alguns casos, você pode ter que encriptar um disco existente sem a capacidade de remover um dos discos no seu computador. Este caso pode acontecer se você tiver um disco sob garantia, por exemplo.

Neste caso, o processo é bastante simples:

  • Faça um USB inicializável (ou dispositivo removível) contendo uma ISO da distribuição de sua escolha;
  • Utilize o dispositivo para inicializar e logar em um LiveCD de sua distribuição;
  • Do LiveCD, identifique o disco rígido contendo sua distribuição raiz e faça um backup dele;
  • Montagem da partição primária na pasta da sua escolha e siga as instruções do capítulo anterior;

Então porque precisa de usar um LiveCD se quer encriptar um disco não removível?

Se você quisesse criptografar seu disco principal principal, você teria que desmontá-lo. Entretanto, como é a partição raiz do seu sistema, você não seria capaz de desmontá-lo, como consequência você teria que usar um LiveCD.

Encrypting Root Filesystem From Installation Wizard

Em alguns casos, alguns distribuidores incorporam o processo de criptografia diretamente no assistente de instalação.

Se você não estiver procurando transferir um sistema de arquivos existente de um sistema para outro, você pode ser tentado a usar esta opção.

Taking Ubuntu 20.04 como exemplo, o processo de instalação sugere criptografia de disco no assistente de configuração de disco.

Se você selecionar esta opção, você terá uma configuração similar à feita nas seções anteriores. No entanto, a maioria das distribuições escolhe não criptografar a pasta “/boot”.

Se você quiser criptografar a pasta “/boot”, recomendamos que você leia a primeira seção deste tutorial.

Solução de problemas

Como o código aberto muda constantemente, há uma chance de você não ser capaz de inicializar seu sistema, mesmo que você tenha seguido os passos deste tutorial cuidadosamente.

No entanto, como as fontes de erro são provavelmente infinitas e específicas para cada usuário, não haveria sentido enumerar todos os problemas que você pode encriptar.

No entanto, na maioria das vezes, é bastante importante saber em qual etapa do processo de boot você está falhando.

Se você vir uma tela com um prompt de “grub rescue”, isso provavelmente significa que você está preso no estágio 1, portanto o bootloader não foi capaz de localizar o disco contendo o segundo estágio.

Se você estiver em um prompt initramfs, isso provavelmente significa que algo errado aconteceu durante o processo de inicialização :

  • Você tem certeza de que especificou os sistemas de arquivos para montar nos arquivos crypttab e fstab?
  • Tem a certeza de que todos os módulos foram actualmente carregados na sua imagem initramfs? Você não está sentindo falta dos módulos cryptsetup ou lvm, por exemplo?

Below são alguns recursos que achamos interessantes durante a escrita deste tutorial, eles podem ter algumas respostas para seus problemas :

  • Criptografando um sistema inteiro : um tutorial similar para o ArchLinux;
  • Criptografia Manual do Sistema no Ubuntu : passos usados para fazer chroot em um sistema de arquivos raiz.

Conclusion

Neste tutorial, você aprendeu como criptografar um sistema de arquivos raiz inteiro, com a pasta “/boot”, usando a especificação LUKS.

Você também aprendeu sobre o processo de inicialização do Linux e os diferentes passos pelos quais seu sistema passa para iniciar seu sistema operacional.

Deixe uma resposta

O seu endereço de email não será publicado.

Back to Top