Criptografar diretório no Linux

A criptografia permite guardar a informação de uma forma totalmente desconfigurada para quem não possua a chave correta de sua visualização. Já foram feitos posts de como criptografar um disco inteiro usando TrueCrypt e também uma opção usando eCryptFS e interface gráfica. Neste, será apresentado como criptografar um diretório usando o sistema de arquivos do tipo eCryptFS (no nível do sistema de arquivos) no Linux.

Teste de criptografia criado no post.
Teste de criptografia criado no post.

O pacote poder ser instalado a partir do repositório usando o comando “sudo apt install ecryptfs-utils”. Considerando um diretório no mesmo nível de execução do comando, ele pode ser criptografado usando “ecryptfs” montando-o sobre si mesmo. No entanto, fica mais claro trabalhar usando dois diretórios da seguinte forma:

  • dir_origem – diretório que contém os arquivos criptogrfados;
  • dir_destino – diretório de trabalho que exibe os arquivos descriptografados ao montar e fica vazio ao desmontar – também deve ficar vazio sempre antes de montar.

Para montar esse sistema acima descrito, siga os passos:

1) Crie os diretórios vazios (somente para o primeiro uso):

mkdir dir_origem dir_destino

2) Montar o diretório de origem no diretório de destino usando criptografia (a primeira linha exige especificar algumas opções, já a segunda contém todos os parâmetros padrão, especificados mais adiante no texto):

sudo mount -t ecryptfs dir_origem dir_destino
sudo mount -t ecryptfs -o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=yes,ecryptfs_fnek_sig=54ee4c829da3e354 dir_origem dir_destino

Atente-se para que o diretório de destino esteja vazio antes de executar o comando!

3) Copiar (ou criar) os arquivos a serem criptografados para a pasta de destino, por exemplo:

echo "Monolito Nimbus!" > dir_destino/teste.txt

Você consegue visualizar o conteúdo do arquivo “dir_destino/teste.txt” mas não do arquivo “dir_origem/teste.txt”. Se tiver escolhido a opção por criptografar o nome do arquivo, ele deve estar invisível ou com um nome indicando que está criptografado.

4) Desmontar o diretório de destino:

sudo umount dir_destino

Ao realizar a montagem (passo 2), algumas perguntas serão feitas no terminal interativo:

  • Select key type to use for newly created files” – selecionar tipo de chave, geralmente opta-se por “passphrase” (senha tradicional).
  • Select cipher” – escolher o tipo de encriptação. A opção padrão é mostrada entre colchetes, então se você não tiver certeza do que selecionar, basta pressionar Enter para selecionar o padrão (a AES é uma boa escolha).
  • Select key bytes” – selecionar o tamanho da chave, em bytes.
  • Enable plaintext passthrough” – selecionar “yes” se quiser usar um arquivo não criptografado dentro de sua pasta.
  • Enable filename encryption” – ativar criptografia de nome de arquivo (isso é importante para reduzir risco de ataques dirigidos a arquivos específicos).
  • Filename Encryption Key (FNEK) Signature” – caso opte por ativar criptografia de nome de arquivo, você deverá escolher uma das opções (pode usar a padrão apenas dando ENTER).
  • Would you like to proceed with the mount” – confirmar o prosseguimento da montagem (aviso aparece quando detecta que você nunca montou com essa chave antes, o que pode significar que você digitou sua senha errada).
  • Would you like to append sig (…) in order to avoid this warning in the future” – responder se deseja adicionar a assinatura ao arquivo sig-cache.txt, para evitar o warning de montagem no futuro.

Caso opte pela segunda linha do passo 2 (comando recebendo opções via argumentos) para trabalhar com os arquivos, só precisa digitar a senha para descriptografar. Somente trabalhe com o diretório estando descriptografado/montado, e não quando estiver criptografado/montado.

Caso digite a frase senha ERRADA, o sistema mostrará um alerta e você deve escolher “no”. Se prosseguir com “yes”, não conseguirá visualizar ou abrir os arquivos – mesmo caso de montar com parâmetros diferentes dos originalmente usados. O sistema de criptografia garante privacidade nos arquivos, mas eles podem ser removidos por qualquer usuário do sistema permissões apropriadas. Você pode subir diretório criptografado para a nuvem, e quando baixá-lo, basta executar o mesmo procedimento descrito para trabalhar com os arquivos e então subir novamente para atualizar no servidor remoto.

Para facilitar a execução dos comandos, você pode usar o script a seguir. Salvando o código como um arquivo de nome “mount_umount.sh”, basta executá-lo com os parâmetros “mount” ou “umount”, por exemplo: bash mount_umount.sh mount. Salve o arquivo na mesma pasta dos diretórios e não esqueça de atualizar os nomes utilizados por você como “dir_origem” e “dir_destino”.

#!/bin/bash
# Script para montar/desmontar diretório criptografado

option=$1
dir_origem='cripto_files'
dir_destino='cripto_work'

if [[ $option == 'mount' ]]; then
  echo 'Montando diretório:' $dir_origem 'em' $dir_destino
  sudo mount -t ecryptfs -o key=passphrase,\
ecryptfs_cipher=aes,\
ecryptfs_key_bytes=16,\
ecryptfs_passthrough=no,\
ecryptfs_enable_filename_crypto=yes,\
ecryptfs_fnek_sig=54ee4c829da3e354 $dir_origem $dir_destino
  caja $dir_destino
elif [[ $option == 'umount' ]]; then
  echo 'Desmontando diretório:' $dir_destino
  sudo umount $dir_destino
else
  echo 'Digite o parâmetro mount ou umount ao executar o script'
fi

Note que existe uma linha para chamar o gerenciador de arquivos e abri-lo no diretório destino automaticamente, sem travar o terminal nele – altere o comando ou comente-o caso não queira essa opção. Quando for desmontar o diretório, feche o gerenciador de arquivos e desmonte via terminal, já que precisa ser super usuário para isso.

Fontes

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.