Índice das dicas

Criando um diretório encriptado para seus arquivos

Por Carlos E. Morimoto em 13 de abril de 2009 às 18h24

13

Um problema trazido pela popularização dos notebooks e netbooks é o roubo de dados. Se você simplesmente deixa todos os seus arquivos e senhas salvos no notebook, corre um sério risco de todas estas informações virem a cair em mãos erradas caso ele seja roubado, um risco que acaba sendo, em muitos casos, muito maior do que o valor do equipamento propriamente dito.

A solução clássica para o problema no Linux seria criar uma partição encriptada usando o cryptsetup e passar a usá-la para armazenar os arquivos confidenciais. É possível também utilizá-la para armazenar as pastas do Firefox, do leitor de e-mails e outros aplicativos; basta mover as pastas para dentro do diretório onde ela for montada e substituir as pastas ocultas dentro do home por links.

O primeiro passo nesse caso é instalar os dois pacotes, o que no Ubuntu e em outras distribuições derivadas do Debian pode ser feito via apt-get:

# apt-get install cryptsetup hashalot

Em outras distribuições, procure pelo pacote "cryptsetup", que hoje em dia é muito comum. Se tudo mais falhar, você pode baixar um pacote genérico ou o pacote com o código-fonte no http://luks.endorphin.org/dm-crypt.

Em seguida, use o Gparted para redimensionar uma das partições existentes e em seguida criar uma nova partição, que será encriptada. O tamanho varia de acordo com o volume de arquivos que pretender armazenar dentro dela: se pretender armazenar apenas alguns arquivos soltos, pode criar uma partição de 1 ou 2 GB, por exemplo.

O próximo passo é gerar a unidade encriptada, usando o cryptsetup. Para isso, usamos o comando "cryptsetup --verbose --verify-passphrase luksFormat", seguido do device da partição que será usada, como em:

# cryptsetup --verbose --verify-passphrase luksFormat /dev/sda7

Como gerar a unidade encriptada implica na destruição de todos os dados anteriormente gravados, ele pede sua confirmação. Você precisa responder "YES", em letras maiúsculas para continuar.

Ele pede em seguida uma passphrase, que será usada para proteger a partição. Ela pode ser tanto uma senha longa, quanto uma frase, que misture palavras e alguns caracteres aleatórios. Quanto mais longa a passphrase, maior a segurança, mas como você precisará digitá-la cada vez que for acessar a partição, ela também não pode ser grande demais :). Uma senha com 12 a 16 caracteres, ou uma frase com 3 palavras e mais alguns caracteres adicionais já garantem uma segurança muito boa.

O acesso à unidade encriptada é feito através do próprio cryptsetup. Ele cria um dispositivo virtual, através do qual os dados da unidade podem ser acessados. O dispositivo pode ser formatado e usado normalmente, como se fosse uma partição de disco e a encriptação/desencriptação dos dados é feita de maneira transparente.

Para acessar a unidade, use o comando "cryptsetup luksOpen", especificando a partição e o nome do dispositivo através do qual ela será acessada (ele será criado dentro do diretório "/dev/mapper"). No exemplo, estou usando "cofre", mas você pode usar outro nome que preferir:

# cryptsetup luksOpen /dev/sda7 cofre

Formate a unidade em EXT3, usando o comando "mkfs.ext3 -m 1". Você pode utilizar outros sistemas de arquivos, mas o EXT3 é uma opção segura nesse caso:

# mkfs.ext3 -m 1 /dev/mapper/cofre

O parâmetro "-m 1" que incluí, faz com que o sistema reserve apenas 1% do espaço da partição para uso do root, ao invés de 5%. Isso faz com que você fique com mais espaço disponível para os arquivos. O "/dev/mapper/cofre" é o device através do qual a unidade encriptada é acessada. Ele é criado depois do comando anterior.

Com isso, a partição está pronta. Para montá-la, usamos o comando "cryptsetup luksOpen" (para abrir o acesso à partição) e em seguida o "mount" para montá-la, como em:

# cryptsetup luksOpen /dev/sda7 cofre
# mkdir /mnt/cofre
# mount /dev/mapper/cofre /mnt/cofre

Uma vez montada a partição, você pode copiar arquivos para a pasta "/mnt/cofre" de forma transparente. A partir daí, fica faltando apenas ajustar as permissões da pasta e criar um link dentro do seu diretório home, para que você possa copiar os arquivos com praticidade:

# chown -R gdh:gdh /mnt/cofre
# ln -sf /mnt/cofre /home/gdh/cofre

Com isso, seu diretório encriptado está pronto. Você pode começar a mover os arquivos confidenciais para a pasta "cofre" e deixar que o cryptsetup cuide da encriptação. Como comentei, você pode também mover as pastas do Firefox, do leitor de e-mails e de outros aplicativos que armazenem senhas e outras informações para dentro do diretório encriptado (é necessário que o aplicativo correspondente esteja fechado no momento em que mover a pasta), deixando um link apontando para a nova localização, como em:

$ cd /home/gdh/
$ mv .mozilla cofre/
$ ln -s cofre/.mozilla .mozilla

Graças ao link, o Firefox continua encontrando a pasta de preferências e continua abrindo normalmente. A grande observação é que você passa a precisar montar o diretório encriptado a cada boot antes de poder abrir o Firefox, mas isso pode ser automatizado escrevendo um pequeno script com os comandos de montagem. Basta salvá-lo no seu home executá-lo (ou configurar o GNOME/KDE para executá-lo automaticamente) depois de fazer login:

#!/bin/sh
sudo cryptsetup luksOpen /dev/sda7 cofre
sudo mkdir /mnt/cofre
sudo mount /dev/mapper/cofre /mnt/cofre

Ao executar os comandos de montagem, a partição fica montada até que você desligue o micro, deixando os arquivos expostos. É possível desmontá-la manualmente usando o "umount" e, em seguida, o "cryptsetup luksClose", como em:

# umount /mnt/cofre
# cryptsetup luksClose /dev/mapper/cofre

A principal observação é que a partição encriptada pode ser acessada unicamente utilizando a passphrase. Como o cryptsetup utiliza encriptação AES de 512 bits, é virtualmente impossível recuperar os dados caso você a esqueça.

Partições encriptadas são também, de uma maneira geral, mais sensíveis a desligamentos incorretos e a problemas diversos, o que, novamente, pode colocar os dados em risco. Devido a isso, é especialmente importante manter um backup completo de todos os dados em outro local, até por que, o uso da encriptação apenas impede que os dados sejam acessados pelas pessoas erradas, não impede que seu notebook seja roubado ou perdido.

A configuração da partição encriptada usando o cryptsetup não é particularmente complicada, mas ainda não é simples o suficiente para ser utilizada por usuários sem conhecimentos técnicos. Pensando nisso, a equipe do Ubuntu desenvolveu uma solução mais simples para o problema, usando o ecryptfs e um script de configuração, que está disponível a partir do Ubuntu 8.10.

O script cria o diretório "Private" dentro do seu home, assumindo a mesma função do diretório "cofre" do exemplo anterior. Como vimos, a possibilidade de criar partições e pastas encriptadas no Linux existe faz tempo, mas o script se destaca no sentido de tornar o processo de configuração bastante rápido e simples. O primeiro passo é instalar o pacote:

$ sudo apt-get install ecryptfs-utils

Em seguida, execute o script, usando seu login de usuário:

$ ecryptfs-setup-private

O script se limita a confirmar sua senha de usuário e solicitar a passphrase que será usada para encriptar o diretório. Você não precisará digitá-la cada vez que montar a pasta (por isso ela pode ser bem longa e complexa), mas é importante anotá-la em algum lugar, pois você precisará dela caso precise montar o diretório manualmente para recuperar os dados em caso de problemas.

Todos os demais passos são executados automaticamente:

Enter your login passphrase:
Enter your mount passphrase [leave blank to generate one]:
Enter your mount passphrase (again):

Unable to read salt value from user's .ecryptfsrc file; using default
Done configuring.
Testing mount/write/umount/read...
Testing succeeded.

Por baixo dos panos, o script cria a imagem de loopback para salvar os arquivos (acessível através do diretório oculto ".Private", dentro do home, salva a passphrase no arquivo ".ecryptfs/wrapped-passphrase", que é encriptado usando sua senha de login (é por isso que você precisa digitar apenas a senha e não a passphrase ao montar) e cria a pasta "Private", para acesso ao diretório encriptado.

Ao acessar a pasta Private, você verá o link para fazer a montagem. Basta clicar sobre ele (e, em seguida, clicar no botão de reload do gerenciador de arquivos) para ativar a montagem:

img_html_m24e5f0951

Se você estiver utilizando o login manual, o diretório será montado automaticamente na inicialização. Caso tenha ativado o login automático, então a montagem automática é desativada e você precisará clicar no "Access Your Private Data" e confirmar sua senha de usuário antes de ter acesso à partição (uma restrição proposital, já que não faria sentido combinar o login automático com a montagem automática do diretório).

Por default, a pasta encriptada fica montada até que você faça logout, mas você pode desmontá-la manualmente quando quiser usando o comando:

$ ecryptfs-umount-private

Da mesma maneira, você pode também montá-lo diretamente, sem precisar clicar no ícone, usando o:

$ ecryptfs-mount-private

Assim como no exemplo do cryptsetup, você pode mover os diretórios do Firefox, Evolution e outros aplicativos que armazenem senhas ou e-mails para dentro do diretório encriptado, como em:

$ cd /home/gdh
$ mv .evolution .mozilla Private/
$ ln -s Private/.evolution .evolution; ln -sf Private/.mozilla .mozilla

Isso também funciona usando a montagem manual, desde que você se lembre de montar o diretório antes de começar a abrir os aplicativos.

Em caso de problemas com o sistema, você pode recuperar os dados dando boot com um live-CD do Ubuntu (ou outra distribuição baseada no kernel 2.6.26 ou mais recente) e fazendo a montagem manualmente.

Nesse caso, comece montando a partição onde o diretório home está armazenado, como em:

$ sudo su
# mount /dev/sda1 /media/sda1

Em seguida, acesse a pasta home e use o "mount -t ecryptfs" para montar a pasta encriptada, como em:

# cd /media/sda1/home/gdh/
# mount -t ecryptfs .Private Private

Isso abrirá um assistente em texto que confirmará uma série de opções antes de fazer a montagem. Responda "passphrase" na primeira pergunta ("Select key type to use for newly created files") e forneça a passphrase especificada durante a configuração inicial. Continuando, responda "aes" na segunda pergunta ("Select cipher"), "16" na terceira ("Select key bytes") e "n" na quarta ("Enable plaintext passthrough").

Como você está montando a partir do live-CD, ele exibirá um alerta, avisando:

WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],
it looks like you have never mounted with this key before.
This could mean that you have typed your passphrase wrong.
Would you like to proceed with the mount (yes/no)?

Responda "yes" para que ele continue com a montagem. Essa mensagem é exibida sempre que você tenta montar o diretório usando um login diferente do que fez a configuração inicial.

Concluída a montagem, os arquivos ficarão disponíveis no diretório "Private", para que você possa copiá-los para algum local seguro antes de reinstalar ou tentar reparar a instalação do sistema.

Como comentei, a passphrase é salva no arquivo ".ecryptfs/wrapped-passphrase", que é encriptado usando a senha de login. Se você esqueceu a passphrase, é possível recuperá-la a partir do arquivo, desde que você ainda se lembre da senha. Nesse caso, é usado (ainda dentro do home) o comando "ecryptfs-unwrap-passphrase", como em:

# ecryptfs-unwrap-passphrase .ecryptfs/wrapped-passphrase "minhasenha"

Em situações normais, você deveria limpar o histórico (usando o comando "history -c") depois de usar o comando, para evitar que a senha ficasse dando sopa no arquivo .bash_history, que armazena uma cópia de todos os comandos executados no terminal. Entretanto, ao usar os comandos a partir do live-CD, você não precisa se preocupar, já que tudo é armazenado no ramdisk e perdido ao reiniciar o micro.

13 comentáriosPor Carlos E. Morimoto. Revisado 21 de março de 2011 às 16h47

Comentários

 
por Mago (anônimo) em 15 de abril de 2010 às 12h51
parabéns pela publicação,
Consegui criar uma partição encriptada baseado em suas instruções. Acredito que houve um enganno quando disse "o cryptsetup utiliza encriptação AES de 512 bits". Vi em outros sites explicando que o sistema AES trabalha com 128 bis.
 
por robm (anônimo) em 26 de fevereiro de 2010 às 11h01
Olá.
Tenho um problema aqui e talvez vc possa me ajudar. Encriptografei meu home na instalação. Bem, só que fiz uma bobagem e todo o conteúdo do meu User está em /home/.ecryptfs/User/.Private e não diretamente em /home/User/.Private. Tenho a passphrase, sou o root e usuário, como decrypt isso?
Obrigado.
 
por Lex Aleksandre (anônimo) em 6 de janeiro de 2010 às 21h16
Ótimo post!
Já que o ecryptfs vem por padrão no Ubuntu 9.10, acabei optando por ele na instalação. Mas agora me preocupa o fato de que terei um trabalho a mais quando for instalar a próxima versão do Ubuntu, já que minha partição home agora é criptografada.
 
por Gyrlano (anônimo) em 26 de outubro de 2009 às 17h15
Alguém pode me ajudar:

root@gyrlano:/media/f68bb475-a829-4aac-b3e6-a08cf01fcb0a/.ecryptfs/gyrlano# mount -t ecryptfs .Private Private
Passphrase:
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
2) blowfish: blocksize = 16; min keysize = 16; max keysize = 56 (not loaded)
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 (not loaded)
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 (not loaded)
Selection [aes]: 1
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]: 1
Enable plaintext passthrough (y/n) [n]: n
Enable filename encryption (y/n) [n]: n
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=ff4aae46a4d814b4
Error mounting eCryptfs: [-2] No such file or directory
Check your system logs; visit
root@gyrlano:/media/f68bb475-a829-4aac-b3e6-a08cf01fcb0a/.ecryptfs/gyrlano#

Não estou conseguindo resgatar meus arquivos criptografados, acesso a pasta mas ainda estão criptografados. Agradeço.
 
por alexandre (anônimo) em 16 de abril de 2009 às 22h07
não testei o cryptsetup, mas não achei o ecriptfs tão seguro assim...

primeiro, não consegui desmontar a pasta com meu usuário comum:
$ ecryptfs-umount-private
Sessions still open, not unmounting

só consegui desmontar como root com o comando:
# umount -t ecryptfs -l /home/eu/Private

mas o pior vem agora. Depois de desmontar a pasta, montei novamente com o link "Access your private data" e... ele montou sem pedir senha!!!

se eu perder meu notebook, mesmo tendo desmontado a pasta, alguém conseguiria monta-lá sem senha clicando no link. enquanto o computador não fosse reiniciado meus dados ficariam expostos.

:?(
 
por Ubiracy_Mafra (anônimo) em 16 de abril de 2009 às 11h39
Excelente artigo... mais uma vez o linux dando um banho de possibilidades no windows...
 
por Alexandre (anônimo) em 14 de abril de 2009 às 15h06
ops quiz dizer cuidado ao invez de cautela :S
hehehe
flw
 
por Alexandre (anônimo) em 14 de abril de 2009 às 15h05
Ótimo tutorial.
Questões sobre segurança tem que se tomar muita cautela.
^^
 
por BSD (anônimo) em 14 de abril de 2009 às 09h29
Uma opção mais simples é o TrueCrypt http://www.truecrypt.org/
 
por Escol (anônimo) em 14 de abril de 2009 às 09h11
Bom tutorial, mais uma vez de grande valia...
Só tenho uma duvida:
No primeiro exemplo se esquecer a senha, seria possível recuperar os dados com algum programa de recuperação de dados ou retirar o hd e colocar em outro micro para recuperar??? ou seja, é possível pegar os dados se vc tiver acesso físico???