dm-crypt (Português)/Encrypting a non-root file system (Portuguê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.
/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.
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
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.
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.
Depois, crie um dispositivo de nó, agora podemos montar/usar nosso container:
# losetup /dev/loop0 grande_segredo.img
/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.
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