Segurança total é algo impossível, e mesmo tendo os melhores recursos de segurança na configuração de firewalls ou permissões de acesso, os usuários não estão livres do roubo físico dos seus dados. Criptografar o sistema de arquivos da máquina é uma forma efetiva de proteger-se de roubo de dados.
Facilmente pode-se criar um script que reúna todos os comandos necessários para montar ou desmontar os dispositivos criados e colocá-lo na inicialização do sistema. A distribuição Debian GNU/Linux tem a seguinte configuração de níveis de execução (run levels):
Shutdown ou halted
Mono-usuário
Multi-usuário sem rede
Multi-usuário
Não usado
Modo gráfico
Reboot
Os scripts (ou links para os scripts) que devem ser executados em cada nível de execução encontram-se no diretório /etc/rcx.d. Por exemplo, os links para os scripts que devem ser executados no nível de execução 2 estão em /etc/rc2.d, e assim sucessivamente. Deve-se colocar o script a ser executado em /etc/init.d e depois criar um link simbólico para o script no diretório do nível de execução que queremos atingir. Há um programa chamado update-rc.d que faz isso automaticamente. O script criado para montar uma partição será chamado hda6.sh e o criado para montar o arquivo arquivo.txt como dispositivo de bloco será chamado crypto.sh. Depois de ambos configurados e feitos executáveis, armazenados em /etc/init.d/, faz-se:
Imediatamente tem-se os scripts sendo executados a cada inicialização ou desligamento da máquina, em qualquer nível utilizado. Para remover os links simbólicos para algum script de /etc/init.d:
Este script irá reunir todos os comandos necessários para pedir a senha e montar a partição ao iniciar a máquina, bem como desmontá-la quando a máquina for desligada. A seguir tem-se o seu código comentado.
# PONTOMONTAGEM de montagem
PONTOMONTAGEM=/mnt/hda6
# algoritmo de encriptação usado
ALGORITMO=blowfish
# mensagens do programa
MSGPREPAR="Preparando-se para montar $PONTOMONTAGEM"
MSGNOROOTUSER="Você deve ser o super-usuário para executar essa ação."
MSGOK="Montado OK!"
MSGERROR="Não foi possível montar $PONTOMONTAGEM"
# testa para ver se o modulo foi carregado, se não foi então carrega
lsmod | grep $ALGORITMO 1>/dev/null 2>/dev/null
if [ $? != 0 ];then
modprobe $ALGORITMO
sleep 1
fi
# testa para ver se o cryptoloop esta carregado, se não esta então carrega
lsmod | grep cryptoloop 1>/dev/null 2>/dev/null
if [ $? != 0 ];then
modprobe cryptoloop
sleep 1
fi
# se não estiver sendo executado pelo root, então sai do script
if [ "$UID" != "0" ]
then
echo $MSGNOROOTUSER
exit 1
fi
# Função para montar dispositivos ou partições
montar()
{
echo $MSGPREPAR
losetup -e $ALGORITMO $DEVLOOP $PARTICAO
if [ $? == 0 ];then
mount -t auto $DEVLOOP $PONTOMONTAGEM && df -Th | grep $DEVLOOP && echo \\
$MSGOK && exit 0
fi
}
case "$1" in
start)
montar
;;
stop)
desmontar
;;
*)
echo "Uso: /etc/init.d/hda1 {start|stop}"
exit 1
esac
exit 0
O script agrupa todos os passos comentados antes, e faz alguns testes para carregar os módulos se estes ainda não foram carregados. O modo de uso é:
/etc/init.d/hda6.sh start|stop
O argumento "start" monta a partição e o argumento "stop" a desmonta. Com:
# update-rc.d hda6.sh defaults
o script montará, depois de pedir a senha, a partição a cada inicialização da máquina, e a desmontará no desligamento da máquina. A única coisa que o usuário deve fazer é colocar a senha quando pedido. No mais, nem notará que trata-se de uma partição criptografada. Porém, isso impede reboot remoto. É necessário estar fisicamente presente para ingressar a senha, e a cada boot o sistema vai parar nesse ponto de espera, até que uma senha seja fornecida. Se for uma senha incorreta, então a partição não será montada e o sistema continuará a inicialização normal.
[4] Comentário enviado por androle em 01/10/2004 - 20:00h
Levei um puxão de orelha do meu orientador por não comentar o motivo de ter escrito esse artigo.
Artigo desenvolvido para a disciplina de "Segurança Computacional", do curso ARL - Administração em Redes Linux. (http://ginux.comp.ufla.br/arl), cujo tutor foi o professor Joaquim Quinteiro Uchôa.
[6] Comentário enviado por engos em 05/10/2004 - 13:43h
Parabéns pelo artigo, nem sabia que isso é possível... é inacreditável o que se pode fazer com o Linux!
Só uma pergunta, não consegui entender direito como os dados ficam armazenados. Significa que se a partição ou o arquivo estiverem criptografados, mesmo que eu entre (boot) com um rescue disk e monte a partição como praxe, não conseguirei acesso aos dados?
[7] Comentário enviado por androle em 05/10/2004 - 23:41h
Olá. Obrigado.
Sim, é isso mesmo! Eu testei isso aqui. Se vc não tiver os módulos cryptoloop, loop e blowfish (ou o que vc tiver usado para criptografar), e também a senha correta, os dados ficam inacessíveis. Não tem jeito.
Basta colocar a senha errada e vc não monta a partição ou arquivo. No meu notebook eu coloquei no script uma mensagem dizendo: "Tecle ENTER agora" no momento de pedir a senha. Assim, o sistema inicializa com o /home desmontado :)
Para poder montar a partição criptografada vc precisa da senha, senão o losetup associa a partilção/arquivo ao /dev/loop(0-7), mas o mount não consegue ler a partição e não monta nada. Os teus arquivos estão lá, mas não podem ser lidos, nem pelo root nem por ninguém.
O interessante é que se vc quiser pode montar um arquivo de, digamos, 150KB, como dispositivo de bloco, gravar informações nele e enviá-lo a alguém. Ai, se a pessoa sabe a senha ela pode montá-lo normalmente. Desse modo vc pode ter pacotes criptografados enviados por email sem ter de usar gpg ou outra ferramenta do tipo. E não é muito difícil fazer um pequeno script para enviar junto com o arquivo para facilitar a montagem e extração dos dados. Claro, a senha vc tem de combinar antes com a pessoa através de algum meio seguro de comunicação.