Criando um diretório encriptado

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. Vamos então a uma rápida explicação sobre as opções de encriptação:

A solução clássica: A solução clássica para o problema 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 nohttp://luks.endorphin.org/dm-crypt.

Em seguida, use o Gparted para redimensionar uma das partições existentes e criar uma nova partição, que será encriptada. O tamanho varia de acordo com o volume de arquivos que pretender armazenar dentro dela: se forem 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 o 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 diretório 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 impede que os dados sejam acessados pelas pessoas erradas, mas não impede que seu notebook seja roubado ou perdido.

A solução do Ubuntu: Como pôde ver, 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.

A encriptação é feita através do eCryptFS, um sistema de arquivos criptográfico incluído diretamente no kernel (a partir do 2.6.26), que permite criar imagens encriptadas dentro de uma partição de dados. Diferente do que temos ao utilizar o cryptsetup (onde é necessário usar uma partição, ou um arquivo de loopback de tamanho fixo), no eCryptFS a imagem é redimensionada automaticamente conforme você coloca arquivos dentro dela.

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:

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.

Montando manualmente: 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 fazer 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 usou para fazer 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.

Criando pastas manualmente: Concluindo, você pode também usar o eCryptFS para criar outras pastas encriptadas manualmente, o que pode ser feito em qualquer distribuição com um kernel recente, sem depender do script de configuração.

Nesse caso, instale o pacote “ecryptfs-utils”, crie o diretório e use o “mount -t ecryptfs” para ativar o uso da encriptação, como em:

$ mkdir cofre
$ chmod 700 cofre
$ sudo mount -t ecryptfs cofre cofre

Ele executará o assistente de montagem, perguntando o tipo de chave que será usado, o algoritmo de encriptação e o comprimento da chave. A configuração mais comum é usar uma passphrase, com o aes e chaves de 16 bytes (512 bits), mas você fica livre para testar outras configurações.

A partir daí, você pode desmontar a pasta usando o comando “umount”, como em:

$ sudo umount cofre

E montá-lo novamente repetindo o comando de montagem, como em:

$ cd ~
$ sudo mount -t ecryptfs cofre cofre

O problema com o comando manual é que ele repete o assistente a cada montagem, fazendo com que, além de digitar a passphrase, você precise indicar as mesmas opções a cada montagem.

Você pode evitar isso criando um pequeno script de montagem, incluindo todas as opções diretamente no comando, de forma que você precise digitar apenas a passphrase, como em:

#!/bin/sh
cd ~
sudo mount -t ecryptfs cofre cofre -o \
key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n

Veja que a linha especifica as mesmas opções que você precisa responder ao usar o comando manual (“passphrase”, “aes”, “16”, etc.), deixando de fora apenas a passphrase propriamente dita. Você pode ajustar os parâmetros na linha de acordo com as configurações que utilizar.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X