dm-crypt (Português)/Encrypting a non-root file system (Português)

From ArchWiki

Status de tradução: Esse artigo é uma tradução de Dm-crypt/Encrypting a non-root file system. Data da última tradução: 2020-05-25. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Os seguintes exemplos são para criptografar um sistema de arquivos secundário, não raiz, com dm-crypt.

Visão geral

Criptografar um sistema de arquivos secundário normalmente protege somente dados sensíveis, enquanto deixa o sistema operacional e programas sem encriptação. Isto é somente útil para dispositivos removíveis, como um USB, para então este ser usado em outros computadores com segurança. Também, é possível criptografar conjuntos separados de dados de acordo com quem possui acesso.

Devido ao dm-crypt ser uma camada de encriptação a nível de blocos, ele somente criptografa os dispositivos, partições e dispositivos de loop. Para criptografar arquivos indíviduais é necessário uma camada de encriptação a nível de sistema de arquivos, como eCryptfs or EncFS. Veja Criptografia de dados em repouso para informações gerais sobre como proteger dados privados.

Partição

Este exemplo detalha a encriptação da partição /home, mas pode ser aplicado para qualquer outra partição similar, não raiz, que contém dados do usuário.

Dica: Você pode ter o diretório /home, em uma partição, único para um usuário, ou criar uma partição /home compartilhada para todos os diretórios dos usuários.

Primeiro tenha certeza que a partição está vazia (sem sistema de arquivos). Delete a partição e crie uma nova se ela possui um sistema de arquivos. Então apague com segurança, veja apagando o disco com segurança.

Crie a partição que vai conter o container criptografado.

Então configure o cabeçalho LUKS com:

# cryptsetup opções luksFormat dispositivo

Mude dispositivo para a nova partição. Veja Opções de encriptação para o modo LUKS para detalhes tais como as opções disponíveis.

Para acessar a partição criptografada, desbloqueie ela com o mapeador de dispositivos, usando:

# cryptsetup open dispositivo nome

Depois de desbloquear a partição, ela estará disponível em /dev/mapper/nome. Agora crie um sistema de arquivos de sua escolha com:

# mkfs.tipo_do_sistema_de_arquivos /dev/mapper/nome

Monte o sistema de arquivos em /home, ou se deve ser somente acessível a um usuário em /home/nome do usuário, veja #Montando e desmontando manualmente.

Dica: Desmonte e monte uma vez para verificar se o mapeamento está funcionando como desejado.

Montando e desmontando manualmente

Para montar a partição:

# cryptsetup open dispositivo nome
# mount -t tipo_do_sistema_de_arquivos /dev/mapper/nome /mnt/home

Para desmontar:

# umount /mnt/home
# cryptsetup close nome
Dica: GVFS tambem pode montar partições criptografadas. Você pode usar um gerenciador de arquivos com suporte ao gvfs (exemplo Thunar) para montar a partição, e a caixa de diálogo pedindo a senha aparecerá. Para outros desktops, zulucryptAUR também oferece uma GUI.

Desbloqueio e montagem automatizados

Existem três diferentes soluções para automaticamente desbloquear a partição e montar seu sistema de arquivos.

Na inicialização do sistema

Usando o arquivo de configuração /etc/crypttab, o desbloqueio ocorre no momento de inicialização fazendo uso do parsing automático do systemd. Esta é a solução recomendada se você deseja usar uma partição home comum para os diretórios de todos os usuários ou automaticamente montar outro dispositivo de bloco encriptado.

Veja Dm-crypt/Configuração do sistema#crypttab para referências e Montando na inicialização do sistema para um exemplo prático.

No login do usuário

Usando pam_exec é possível desbloquear (cryptsetup open) a partição no login do usuário: esta é a solução recomendada se deseja um diretório home de somente um usuário em uma partição. Veja dm-crypt/Montagem no login.

O desbloqueio no login do usuário também é possível com pam_mount.

Dispositivo de loop

Existem dois métodos para usar um dispositivo de loop como um container criptografado, um usando losetup diretamente e outro não.

Sem losetup

Usar diretamente o losetup pode ser evitado completamente ao fazer o seguinte[1]:

$ dd if=/dev/urandom of=grande_segredo.img bs=100M count=1 iflag=fullblock
$ cryptsetup luksFormat grande_segredo.img

Neste caso cryptsetup vai encontrar um dispositivo de loop livre, adicionar o arquivo para ele, e também desanexá-lo quando cryptsetup close for invocado.

Tenha certeza de não omitir a opção iflag=fullblock, de outro modo dd pode retornar uma leitura parcial. Veja dd#Leitura parcial para detalhes.

Antes de executar cryptsetup, veja Opções de encriptação para o modo LUKS e cifras criptográficas e modos de operação primeiro para selecionar configurações adicionais do seu interesse.

As instruções para abrir o dispositivo e criar o sistema de arquivos são do mesmo jeito que em #Partição.

Nota: Se criar um arquivo menor que o cabeçalho do LUKS (16 MiB) vai receber um erro Requested offset is beyond real size of device grande_segredo.img quando tentar abrir o dispositivo.

O procedimento de montagem e desmontagem manual é igual a #Montando e desmontando manualmente.

Com losetup

Um dispositivo de loop permite mapear um dispositivo de bloco para um arquivo com a ferramenta padrão do util-linux losetup. O arquivo pode então conter um sistema de arquivos, que pode ser usado como qualquer outro. Vários usuários conhecem TrueCrypt como uma ferramenta para criar containers criptografados. É possível conseguir essa mesma funcionalidade com um sistema de arquivos de looback criptografado com LUKS, como é mostrado no exemplo a seguir.

Primeiro, crie um container criptografado com dd, usando um gerador de números aleatórios apropriado:

# dd if=/dev/urandom of=grande_segredo.img bs=100M count=1 iflag=fullblock

O arquivo grande_segredo.img vai ser criado com o tamanho de 100 mebibytes.

Nota: Evite redimensionar o container, crie ele maior do que a soma do tamanho de todos os arquivos que serão criptografados, de modo que consiga hospedar a metadata associada utilizada pelo sistema de arquivos interno. Se pretende usar o modo LUKS, o cabeçalho de metadata dele sozinho vai ocupar mais de 16 mebibytes.

Depois, crie um dispositivo de nó, agora podemos montar/usar nosso container:

# losetup /dev/loop0 grande_segredo.img
Nota: Se você receber um erro /dev/loop0: No such file or directory, você precisa carregar o módulo do kernel modprobe loop comoo superusuário. Nestes dias (kernel 3.2) dispositivos de loop são criados em demanda. Solicite um novo com losetup -f como superusuário.

A partir de agora, o procedimento é o mesmo que o especificado em #Partição, exceto pelo fato que o container já está com dados aleatórios e não será necessário apagar com segurança.

Dica: Containers com dm-crypt podem ser muito flexíveis. Veja as funcionalidades e documentação de Tomb. Ele oferece um script para um manuseio rápido e flexível do dm-crypt.

Montando e desmontando manualmente

Para desmontar o container:

# umount /mnt/segredo
# cryptsetup close segredo
# losetup -d /dev/loop0

Para montar o container novamente:

# losetup /dev/loop0 grande_segredo.img
# cryptsetup open /dev/loop0 segredo
# mount -t ext4 /dev/mapper/segredo /mnt/segredo