O procedimento a seguir foi efetuado numa máquina rodando Slackware 10.2 e também numa outra rodando slamd64, em ambos os casos com kernel da série 2.6. Nesse processo assumo que sua shell é bash e que você também usa login gráfico via KDM ou GDM, caso contrário você terá que mudar algumas coisas nos scripts. Efetue todos os passos a seguir como root e certifique-se que seu usuário normal esteja deslogado. Antes de começar, dê uma lida no site do dm-crypt e faça um backup das suas coisas.
Se você usa Debian ou outro sistema que suporte o PAM, experimente primeiro usar o pam_mount, conforme descrito no Debian Grimoire.
A primeira versão deste texto contém o procedimento passo a passo, que inclui a criação de dois scripts. A versão atual passa a tarefa de criação dos scripts para um pacote, que pode ser obtido em http://slack.sarava.org/packages/noarch. Pacotes dos aplicativos utilizados podem ser obtidos em http://slack.sarava.org/packages.
Compile o kernel com as seguintes opções:
CONFIG_BLK_DEV_DM=m CONFIG_DM_CRYPT=m
Certifique-se também que a opção CONFIG_BLK_DEV_LOOP (loop device) esteja como módulo ou built-in.
Instale os pacotes device-mapper e cryptsetup
O device-mapper já vem no /testing desde o slack 10.1.0. Os outros pacotes você terá de compilar ou então usar os que deixei em http://slack.sarava.org/packages.
installpkg device-mapper-*-tgz installpkg libgpg-error-*.tgz installpkg libgcrypt-*.tgz installpkg cryptsetup-*.tgz installpkg hashalot-*.tgz
Dê suid para os programas:
chmod 4711 $(which losetup) chmod 4711 $(which cryptsetup) chmod 4711 $(which dmsetup)
Se você não está usando udev, coloque o script devmap_mknod.sh (que está no diretório scripts/ da fonte do device-mapper, ou então baixe-o de http://slack.sarava.org/crypto) no /etc/rc.d, com a permissão 755 e sequência adicione no seu /etc/modprobe.conf:
install dm-mod /sbin/modprobe --ignore-install dm-mod ; /etc/rc.d/devmap_mknod.sh ??
Ignore o procedimento anterior caso você use udev. Para que o módulo seja carregado ao iniciar o sistem, adicione em seu /etc/rc.d/rc.modules a linha
/sbin/modprobe dm_crypt
O kernel 2.6 suporta até 256 loop devices. Para prevenir muitos problemas e simplificar nossos scripts, criaremos um loop device específico para cada usuário que usar home criptografado.
ls -l /dev/loop* brw-rw---- 1 root disk 7, 0 1996-06-03 22:47 loop0 brw-rw---- 1 root disk 7, 1 1996-06-03 22:47 loop1 brw-rw---- 1 root disk 7, 10 2002-03-19 22:13 loop10 brw-rw---- 1 root disk 7, 11 2002-03-19 22:13 loop11 brw-rw---- 1 root disk 7, 12 2002-03-19 22:13 loop12 brw-rw---- 1 root disk 7, 13 2002-03-19 22:13 loop13 brw-rw---- 1 root disk 7, 14 2002-03-19 22:13 loop14 brw-rw---- 1 root disk 7, 15 2002-03-19 22:13 loop15 brw-rw---- 1 root disk 7, 2 1996-06-03 22:47 loop2 brw-rw---- 1 root disk 7, 3 1996-06-03 22:47 loop3 brw-rw---- 1 root disk 7, 4 1996-06-03 22:47 loop4 brw-rw---- 1 root disk 7, 5 1996-06-03 22:47 loop5 brw-rw---- 1 root disk 7, 6 1996-06-03 22:47 loop6 brw-rw---- 1 root disk 7, 7 1996-06-03 22:47 loop7 brw-rw---- 1 root disk 7, 8 1996-06-03 22:48 loop8 brw-rw---- 1 root disk 7, 9 2002-03-19 22:13 loop9
O próximo dispositivo de loop usaria o minor number 16, então vamos criar o 17o loop-device:
mknod /dev/loop-usuario b 7 16 chown root.disk /dev/loop-usuario chmod 660 /dev/loop-usuario
Se você estiver usando udev, talvez seja uma boa idéia colocar esses dispositivos nas suas regras ou então adicionar sua criação no rc.local.
Substitua usuario pelo nome do seu usuário. Se você usa o losetup como módulo, adicione no seu /etc/modprobe.conf
options loop max_loop=17
Caso ele seja built-in no kernel, passe o max_loop=17 como opção de boot. Adicione também no seu /etc/rc.d/rc.6:
losetup -d /dev/loop-usuario &> /dev/null
Beleza. Reinicie seu sistema pra ver se está tudo ok. É importante que exista o dispositivo /dev/mapper/control depois da reinicialização.
dd if=/dev/urandom of=usuario.img bs=100M count=5
losetup /dev/loop0 usuario.img cryptsetup -c aes -y create usuario /dev/loop0
Nesse ponto você deve escolher qual será a senha para acessar sua "partição". Agora crie um sistema de arquivos:
mkfs.ext2 /dev/mapper/usuario
Não crie sistemas com journaling no topo de um loopfile, vide este comentário.
mv /home/usuario /home/usuario.old mkdir /home/usuario chown usuario.users /home/usuario chmod 700 /home/usuario mount /dev/mapper/usuario /home/usuario rsync -Cav /home/usuario.old/ /home/usuario/ umount /home/usuario
A montagem/desmontagem do volume criptografado no home do usuário quando esse se loga/desloga é feita através de dois scripts, cryptcreate e homecrypt. Eles estão no pacote homecrypt, disponível em http://slack.sarava.org/packages/noarch:
installpkg homecrypt*tgz
Se você usa KDM como login gráfico, adicione no arquivo /opt/kde/share/config/kdm/Xstartup a linha
/usr/bin/cryptcreate $USER
Se você usa GDM, adicione a linha anterior em /etc/X11/gdm/PreSession/Default. Também adicione no arquivo /opt/kde/share/config/kdm/Xreset (se você usa KDM) a linha
/usr/bin/homecrypt off $USER
No caso do GDM, você deve adicionar a linha anterior no arquivo /etc/X11/gdm/PostSession/Default.
Adicionar no seu .profile as linhas
alias logout="/usr/bin/homecrypt off $(whoami) console ; logout" alias exit="/usr/bin/homecrypt off $(whoami) console ; exit"
/dev/mapper/usuario /home/usuario ext2 user,noauto,exec 0 0
É necessário ainda que o usuário possa rodar o fsck para seu dispositivo com permissão de root e sem a necessidade de senha. Pra isso, adicione o seguinte no seu sudoers:
usuario ALL=NOPASSWD: /sbin/fsck -v -y /dev/mapper/usuario
onde usuario é o nome do seu usuário.
Agora experimente logar com seu usuário. Após digitar a senha do arquivo criptografado, seu home será automaticamente montado. Quando você se deslogar pela última vez, seu home será desmontado. Funciona inclusive com logins via ssh.
Confesso que esses scripts não são a melhor coisa do mundo, mas comigo estão funcionando muito bem. Eles tendem a não dar certo quando você pede pra deslogar mas ainda tem um monte de processos usando arquivos da sua pasta pessoal. Sair do X usando Ctrl+Alt+Backspace também não desmonta seu home.
Você pode criar um script para matar todos os aplicativos que rodam como seu usuário, dando um
killall $(pidof programa)
ou usando outras gambiarras, como este exemplo:
#!/bin/bash
#
# matador de coisas
me=$(whoami)
kill=$(cat /home/$me/.matador)
for target in $kill; do
pid=$(ps aux | grep $me | grep $target | awk '{ print $2 }')
for bullet in $pid; do
if (( $(ps --pid $bullet | wc -l) >= 2 )); then
kill -9 $bullet
fi
done
done
Crie o arquivo /home/usuario/.matador e adicione, separados por espaços, os nomes dos aplicativos que você deseja matar, por exemplo:
esd artsd gpg-agent
Se esse script estiver acessível com o nome de matador, então o homecrypt o executará automaticamente toda vez que seu usuário de deslogar.
Esse esquema garante apenas que quando você não estiver logado ninguém conseguirá acessar seu home. Quando ele estiver montado, o superusuário pode tranquilamente acessá-lo (experimente).
Ao invés de usar um arquivo, você pode utilizar uma partição inteira, algo que aumenta muito a performance e elimina o uso do losetup (que às vezes é uma dor de cabeça). A grande vantagem de usar um arquivo é a facilidade para gravar backups ou manter seu home em dispositivos como canivetes usb ou cd-rw para backups.
A desvantagem de usar o dm_crypt dessa forma em relação ao PAM é que você precisará de duas senhas para se logar. Isso também pode ser encarado como uma vantagem, já que um ataque no shadow do seu sistema possibilitaria o acesso irrestrito aos seus dados.
Além disso, é interessante criptografar também sua swap. Existe um ótimo tutorial a respeito aqui.
Avante paranóicos!
Este mini-howto foi escrito por Rhatto (rhatto at riseup.net) na esperança de que seja útil. Ele pode ser distribuído livremente desde que o autor seja citado e esta nota seja incluída.
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html chroot.tex -nonavigation -notop_navigation -show_section_numbers -split 0
The translation was initiated by on 2007-08-22
| Anexo | Tamanho |
|---|---|
| home.pdf | 73.47 KB |
| home.tex | 10.7 KB |