Home criptografado no Slack 10.2 e Slamd64

Tratarei aqui de como deixar seu diretório home num arquivo criptografado que é montado/desmontado quando você loga ou desloga. Existe o módulo pam_mount do PAM que faz algo semelhante, mas por questão de segurança o Slack não suporta o PAM. Usaremos o dm-crypt, substituto do cryptoloop incluído na série 2.6 do kernel.

1 Introdução

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.

2 Compile seu kernel com dm-crypt e Crypto API

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

3 Crie um dispositivo de loop

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.

4 Crie um arquivo com o tamanho igual ou maior que o seu home

dd if=/dev/urandom of=usuario.img bs=100M count=5

5 Agora vamos criar um sistema criptografado nesse arquivo

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.

6 Mova seu home pra home.old, monte o novo sistema e copie seus arquivos

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

7 Homecrypt

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

8 Login/logout gráfico

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.

9 Logout via shell

Adicionar no seu .profile as linhas

alias logout="/usr/bin/homecrypt off $(whoami) console ; logout"
alias exit="/usr/bin/homecrypt off $(whoami) console ; exit"

10 Adicione a seguinte linha no /etc/fstab

/dev/mapper/usuario /home/usuario ext2 user,noauto,exec 0 0

11 Sudoers

É 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.

12 Pronto

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.

13 Conclusões

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!

14 Sobre

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.

About this document ...

Home criptografado no Slack 10.2 e Slamd64

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


2007-08-22

AnexoTamanho
home.pdf73.47 KB
home.tex10.7 KB