O grande problema de transportar seus arquivos pessoais em um pendrive é a possibilidade de ele ser perdido ou roubado. Quem colocar as mãos no pendrive ganha automaticamente acesso a seus arquivos, o que é preocupante para muitos.
A solução é simples: ao invés de gravar os arquivos diretamente, passaremos a gravá-los em uma partição encriptada. Assim, mesmo que alguém conhecido roube seu pendrive, não terá como obter acesso aos arquivos, já que utilizaremos uma chave de 256 bits. A encriptação é praticamente impossível de ser quebrada, mesmo que submetida a um especialista, com acesso a um cluster de centenas de máquinas e muito tempo disponível.
Esta dica é uma continuação da primeira, onde vamos aprender a encriptar o pendrive e adaptar os scripts anteriores, para montar e desmontar o volume encriptado de forma automática, realizando o processo de atualização ou restauração dos arquivos com um único clique.
No final, você terá uma estrutura como esta no pendrive, com três atalhos:
Os arquivos ficarão armazenados em uma partição separada, que além de encriptada, fica escondida.
Esta dica começa exatamente no ponto onde parei na dica anterior. Por isso, se você ainda não leu, aproveite para lê-la agora, antes de continuar:
- Dica: Linux: Usando um pendrive para transportar suas configurações: Hoje em dia, é cada vez mais comum utilizarmos mais de um micro. Neste cenário, um dos desafios é transportar arquivos e configurações de um micro para o outro de forma prática. Que tal uma solução que lhe permitisse salvar automaticamente todas as suas configurações e arquivos em um pendrive e restaurá-las em outro micro, com apenas um clique? Por Carlos E. Morimoto
A idéia básica é dividir o pendrive em duas partições. Uma partição pequena (com 16, ou mesmo 8 MB) que servirá apenas para armazenar os scripts e pequenos arquivos em geral e uma partição maior, englobando o restante do espaço do pendrive, que armazenará a partição encriptada.
Os scripts criados na dica anterior serão adaptados para montar e desmontar a partição encriptada automaticamente (pedindo a passphrase de acesso) e adicionaremos um terceiro atalho, que permitirá simplesmente montar a partição encriptada e acessar os arquivos.
Para isso, utilizaremos o LUKE e o dm-crypt. O primeiro passo é instalá-los. No Debian Etch, Sid, Ubuntu 7.4 (ou mais recente), Kurumin 7 ou outra distribuição derivada do Debian ou Ubuntu, você pode instalá-los via apt-get:
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 https://luks.endorphin.org/dm-crypt.
Use o gparted ou outro particionador de sua preferência para dividir o pendrive em duas partições. A primeira partição pode ser bem pequena, com apenas 8 ou 16 MB, formatada em EXT3 ou FAT16, de acordo com o que preferir. O importante mesmo é a segunda partição, onde criaremos a unidade encriptada.
No meu caso, estou usando um pendrive de 4 GB, onde reservei 256 MB para a partição menor (pois pretendo usá-la para transportar pequenos arquivos, sem precisar montar a partição principal) e deixei os 3.52 GB restantes para a partição principal:
No meu caso, a partição menor é a /dev/sdb1 e a partição principal é a /dev/sdb2. O próximo passo é gerar a unidade encriptada, usando o cryptsetup. Para isso, use o comando:
(onde o /dev/sdb2 é a partição)
Como gerar a unidade encriptada implica na destruição de todos os dados anteriormente gravados, ele pede sua confirmação antes de continuar. 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 forma transparente.
Para acessar a unidade, use o comando abaixo, especificando a partição e o nome do dispositivo através do qual ela será acessada. Aqui estou usando “crypthome”, mas você pode usar outro nome que preferir:
Formate a unidade em EXT3, usando o comando abaixo. Não use ReiserFS, pois ele não é adequado para uso em pendrives:
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/crypthome” é 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, você usa os comandos:
# mkdir /mnt/crypthome
# mount /dev/mapper/crypthome /mnt/crypthome
Uma vez montada a partição, você pode copiar arquivos para a pasta “/mnt/crypthome” de forma transparente. Por padrão, ela é propriedade do root, de forma que você não consegue escrever dentro da pasta usando seu login de usuário, mas isso é fácil de resolver. Basta usar o comando comando “chown -R”, especificando o seu usuário, como em:
Para desmontar a partição, feche todas as janelas do Konqueror ou Nautilus onde os arquivos da pasta estejam sendo exibidos e use os comandos:
# umount /mnt/crypthome
# cryptsetup luksClose /dev/mapper/crypthome
O “cd ~” é apenas para garantir que os comandos de desmontagem sejam executados fora da pasta, já que você não consegue desmontá-la enquanto está acessando-a.
Com isto terminamos a parte teórica. Como você viu, é bem simples encriptar e acessar a partição usando o cryptsetup. Naturalmente, o desempenho fica um pouco mais baixo, já que o sistema precisa cuidar do processo de encriptação, mas em uma máquina atual a perda não é tão grande assim.
O passo seguinte é adaptar os scripts para salvar e restaurar os backups que criamos na dica anterior, para que eles incorporem os comandos de montagem e desmontagem do volume.
O script atualizar.sh anterior era:
pasta=`mount | grep sd | grep ext3 | tail -n 1 | cut -f 3 -d ” “`
cd $pasta
dialog –yesno “Tem certeza que deseja atualizar os arquivos no pendrive?” 0 0
resp=`echo $?`
if [ “$resp” = “1” ]; then
exit 0
else
mkdir joao
rsync -av –delete /home/joao/ ./joao
mkdir trabalho
rsync -av –delete /mnt/hdb2/trabalho/ ./trabalho
sync
fi
Com as novas funções ele ficará:
# Instala o cryptsetup caso necessário
if [ -e “/sbin/cryptsetup” ]; then
echo “cryptsetup encontrado.”
else
apt-get install cryptsetup hashalot
fi
# Monta o volume encriptado
part=”`mount | grep sd | tail -n 1 | cut -c 1-8`2″
cryptsetup luksOpen $part crypthome
mkdir /mnt/crypthome &>/dev/null
mount /dev/mapper/crypthome /mnt/crypthome
cd /mnt/crypthome
# Aborta caso algo dê errado durante a montagem:
verificador=`pwd`
verificador2=`mount | grep /mnt/crypthome`
if [ “$verificador” != “/mnt/crypthome” -o -z “$verificador2” ]; then exit 0; fi
# Atualiza os arquivos
dialog –yesno “Tem certeza que deseja atualizar os arquivos no pendrive?” 0 0
resp=`echo $?`
if [ “$resp” = “1” ]; then
exit 0
else
mkdir joao
rsync -av –delete /home/joao/ ./joao
chow -R joao.joao ./joao
mkdir trabalho
rsync -av –delete /mnt/hdb2/trabalho/ ./trabalho
sync
fi
# Desmonta
cd ~
umount /mnt/crypthome
cryptsetup luksClose /dev/mapper/crypthome
Com as alterações ele ficou bem mais complexo, mas parte das alterações são checagens opcionais, que você pode remover do seu script. A parte inicial (“instala o cryptsetup caso necessário”) executa os comandos de instalação caso não encontre o arquivo “/sbin/cryptsetup”, enquanto a terceira função (“aborta caso algo dê errado durante a montagem”), checa se a partição foi realmente montada e se foi possível acessar a pasta e aborta a operação caso algo tenha dado errado.
A função part=”`mount | grep sd | tail -n 1 | cut -c 1-8`2″ que usei, serve para descobrir qual é a partição do pendrive, caso o dispositivo mude ao plugar em outro micro. Note que o número “2” no final faz sempre com que seja usada a segunda partição (sda2, sdb2, sdc2, etc.). altere o número caso a partição encriptada seja outra.
Lembre-se também de substituir o “joao” pelo seu login de usuário no sistema.
A principal mudança é que este novo script precisa ser executado como root, já que apenas ele pode executar os comandos para montar e desmontar o volume. Para isso, use a opção “Executa como um usuário diferente”, “Nome do usuário: root” nas opções do atalho. No caso do Ubuntu ou Kurumin, você pode também adicionar o “sudo” no início do comando executado pelo atalho:
O script restaurar.sh fica quase igual ao primeiro. A única diferença entre os dois são os comandos do rsync que restauram o backup. Ele também precisa ser executado como root:
# Instala o cryptsetup caso necessário
if [ -e “/sbin/cryptsetup” ]; then
echo “cryptsetup encontrado.”
else
apt-get install cryptsetup hashalot
fi
# Monta o volume encriptado
part=”`mount | grep sd | tail -n 1 | cut -c 1-8`2″
cryptsetup luksOpen $part crypthome
mkdir /mnt/crypthome &>/dev/null
mount /dev/mapper/crypthome /mnt/crypthome
cd /mnt/crypthome
# Aborta caso algo dê errado durante a montagem:
verificador=`pwd`
verificador2=`mount | grep /mnt/crypthome`
if [ “$verificador” != “/mnt/crypthome” -o -z “$verificador2” ]; then exit 0; fi
# Atualiza os arquivos
dialog –yesno “Tem certeza que deseja atualizar os arquivos no pendrive?” 0 0
resp=`echo $?`
if [ “$resp” = “1” ]; then
exit 0
else
rsync -av –delete ./joao/ /home/joao
rsync -av –delete ./trabalho/ /mnt/hdb2/trabalho
sync
fi
# Desmonta
cd ~
umount /mnt/crypthome
cryptsetup luksClose /dev/mapper/crypthome
Finalmente, temos um novo script, o montar.sh, que apenas monta e exibe o conteúdo do volume encriptado. Nele, os comandos que criam e restauram o backup, são substituídos pelo comando que abre o gerenciador de arquivos, mostrando os arquivos depois da montagem. Depois que ele é fechado, o volume é desmontado automaticamente:
# Instala o cryptsetup caso necessário
if [ -e “/sbin/cryptsetup” ]; then
echo “cryptsetup encontrado.”
else
apt-get install cryptsetup hashalot
fi
# Monta o volume encriptado
part=”`mount | grep sd | tail -n 1 | cut -c 1-8`2″
cryptsetup luksOpen $part crypthome
mkdir /mnt/crypthome &>/dev/null
mount /dev/mapper/crypthome /mnt/crypthome
cd /mnt/crypthome
# Aborta caso algo dê errado durante a montagem:
verificador=`pwd`
verificador2=`mount | grep /mnt/crypthome`
if [ “$verificador” != “/mnt/crypthome” -o -z “$verificador2” ]; then exit 0; fi
konqueror /mnt/crypthome
# Desmonta
cd ~
umount /mnt/crypthome
cryptsetup luksClose /dev/mapper/crypthome
Ao usar o Gnome, você pode substituir o “konqueror /mnt/crypthome” pelo comando equivalente do Nautilus: “nautilus /mnt/crypthome”.
Depois de criar o atalho, idêntico aos dois anteriores, você tem o conjunto que vimos no screenshot inicial:
Veja que os arquivos não aparecem mais na partição com os atalhos, pois agora estão escondidos dentro da partição encriptada. Só mesmo você, que sabe a passphrase, consegue acessá-la, seja utilizando os scripts, seja manualmente.
Nesta dica, apenas incluí os scripts prontos, sem me preocupar muito em explicar o que faz cada função. Você pode se aprofundar no uso do terminal e na criação de shell scripts nestes dois guias que publiquei anteriormente. Eles lhe darão a base necessária para personalizar os scripts, adicionando novas funções e criar outros para automatizar as tarefas do dia a dia:
- Usando o terminal: No início, todos os sistemas operacionais usavam apenas interfaces de modo texto. Antes do Windows, existiu o DOS e, antes do KDE, Gnome e todas as outras interfaces que temos atualmente, o Linux tinha também apenas uma interface de modo texto. A diferença é que no Linux a interface de modo texto evoluiu junto com o restante do sistema e se integrou de uma forma bastante consistente com os aplicativos gráficos. Quanto mais você aprende, mais tempo você acaba passando no terminal; não por masoquismo, mas porque ele é realmente mais prático para fazer muitas coisas. Por Carlos E. Morimoto
- Guia: Programando em Shell Script: Praticamente tudo no Linux pode ser automatizado através de shell scripts. É possível criar desde utilitários simples, que baixam arquivos, fazem backup ou instalam programas, até aplicativos complexos em tempo recorde. Escrever programas em shell script é muito mais rápido do que escrever em qualquer outra linguagem, permitindo desenvolver aplicativos em minutos. Aprender shell script é um pré-requisito para qualquer usuário avançado ou bom administrador de redes, além de ser a porta de entrada para outras linguagens. O melhor de tudo é que você pode treinar em qualquer distribuição Linux, mesmo ao rodar o sistema a partir do CD.
Este é mais um guia longo e detalhado, que aborda em detalhes o desenvolvimento de scripts, do básico ao avançado, com destalhe para o desenvolvimento de scripts gráficos, usando o kdialog e o kommander; uma área pouco explorada em outros tutoriais. Por Carlos E. Morimoto


