Você está na página 1de 12

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

Criptografar sua atual partio root usando dm-crypt com luks


Autor: Aline de Freitas <aline_aaline at riseup.net> Data: 11/01/2008 Introduo H muita discusso pela rede sobre o por qu da necessidade de se criptografar discos. O mais importante a se pensar ao criptografar os discos no se comprometer com os dados que voc possa ter em seu sistema. No vou entrar no mrito poltico dos porqus. Acredito que quem procura por documentao sobre criptografia j est decidida/o a fazer uso da mesma. Atualmente h vrios mtodos de criptografia disponveis dos quais por exemplo loop-aes. Minha escolha por cryptsetup-luks com dm-crypt se deu por ser considerado o mtodo adequado para grande volume de dados (criptografei meu quase que meu disco todo), por no ter uma perda muito grande na performance (o ganho com a segurana me parece compensar esta eventual perda) e por ser considerado o mais seguro. H muito tutoriais na rede sobre o assunto, o principal, pelo qual me baseei Security System Encryption DM-Crypt with Luks Alguns mtodos de criptografia da partio root incluem o uso de um pendrive com uma senha criptografada no qual nem mesmo voc poder saber qual a senha. O problema em relao a este tipo de mtodo que se voc perder o pendrive ou ele parar de funcionar, voc no poder NUNCA MAIS descriptografar seu sistema. Assim eu optei por uma alternativa menos severa mas nem por isso insegura, que utilizar um cdrom para bootar o sistema e manter uma partio de boot no-encriptada para o caso de perda ou danificao do cdrom. Este mtodo baseado neste antigo e ultrapassado howto: Encrypted Root Filesystem HOWTO.

Preparativos iniciais

1 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

Requerimentos
Kernel: >= 2.6.20 Suporte para udev Partio de boot separada. Algum mecanismo para backup. No meu caso utilizei um velho disco rgido de 20GB Pacincia e persistncia.

Preparando o kernel
O seu kernel deve estar configurado com as opes a seguir: # make menuconfig General setup ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support () Initramfs source file(s) (Deixe este campo em branco!) Device Drivers ---> [*] Multiple devices driver support (RAID and LVM) ---> <*> Device mapper support <*> Crypt target support --- Cryptographic API ---> <*> SHA256 digest algorithm <*> SHA384 and SHA512 digest algorithms <*> Blowfish cipher algorithm <*> Serpent cipher algorithm <*> AES cipher algorithms se estiver usando um sistema amd64 troque a opo acima por <*> AES cipher algorithms (x86_64) Ento, # make && make modules modules_install # mount /boot # make install

2 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

Para quem usa Debian: # make-kpkg kernel-image # dpkg -i <o novo kernel>

Obtenha as ferramentas
Verifique se voc possui cryptsetup-luks instalado. # emerge -avn cryptsetup-luks ou # apt-get install cryptsetup

Fazendo backup dos dados (obrigatrio)


Primeiro precisamos fazer o backup da partio root. Digamos que seu disco principal seja /dev/sda e sua partio root seja /dev/sda3 e que o disco para backup seja /dev/sdb. Esta ser a referncia no decorrer do tutorial. No se esquea de trocar estes valores para a sua situao. Criamos uma partio nica para armazenar os dados que futuramente sero encriptados: # fdisk /dev/sdb O nmero de cilindros para este disco est configurado para 2491. No existe nada de errado, mas isto maior que 1024, e pode em certas configuraes causar problemas com: 1) programas que executam em tempo de inicializao (verses velhas do LILO) 2) inicializao e programas de particionamento de outros OSs (p.ex., DOS FDISK, OS/2 FDISK) Comando (m para ajuda): n Comando - ao

3 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

l lgica (5 ou superior) p partio primria (1-4) p Nmero da partio (1-4): 1 Depois enter + enter para utilizar todo o disco e ento para salvar: Comando (m para ajuda): w # mkfs.ext3 /dev/sdb1 Agora vamos fazer o backup dos dados: # # # # mkdir /mnt/crypt mount /dev/sdb1 /mnt/crypt cd / cp -avx / /mnt

Aproveite para comer algo enquanto os dados so transferidos... Vamos preparar a nova partio: # vi /mnt/crypt/etc/fstab Troque a partio de root atual por /dev/sdb1. /dev/sdb1 / ext3 noatime 01

Edite tambm seu gerenciador de inicializao, no caso do grub, edite /boot/grub/menu.lst. kernel /vmlinuz root=/dev/sda3 Troque pelos valores da sua nova partio (lembre-se estes so exemplos. Substitua pelas SUAS parties). kernel /vmlinuz root=/dev/sdb1 # reboot Depois da inicializao, verifique se realmente est na nova partio: # mount | grep 'on / type'

4 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

Deve apresentar a partio de backup, no meu caso /dev/sdb1.

Preparando as parties root e swap a criptografar Agora vamos preparar a "antiga" root. O primeiro passo encher toda a partio com 'lixo' de forma que um possvel atacante no tenha como saber o quanto de dados foram escritos partio: # shred -vn 1 /dev/sda3 Agora aproveite para dar uma cochilada, caminhar, ler ou espere bastante dependendo dos recursos da sua mquina.

Encriptar a partio swap


Digamos que sua partio swap seja /dev/sda2. # cryptsetup -c blowfish -h sha256 -d /dev/urandom create swap /dev/sda2 # mkswap /dev/mapper/swap # swapon /dev/mapper/swap Agora vamos criar a nova partio root.

Criando a nova partio root


Voc precisa de uma senha. Segura. Bem Segura. Voc pode gerar alguma senha aleatria a partir de algum gerador de senhas aleatrio. (veja apg, gpw ou visite http://www.diceware.com/). Voc pode escolher uma senha complexa e anotar em um papel secretamente em seu poder. Quando memorizar queime este papel. # cryptsetup -y --cipher serpent-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sda3 WARNING! ========

5 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

This will overwrite data on /dev/sda3 irrevocably. Enter LUKS passphrase: (insira a senha) Verify passphrase: (repita a senha) Agora voc pode abrir sua partio LUKS: # cryptsetup luksOpen /dev/sda3 root Enter LUKS passphrase: key slot 0 unlocked. A partir de agora sua partio de root passa a ser denominada /dev/mapper /root. Vamos criar um sistema de arquivos na mesma: # /sbin/mkfs.ext3 -j -m 1 -O dir_index,filetype,sparse_super /dev/mapper/root (espere vrios minutos...) mke2fs 1.35 (28-Feb-2004) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 36634624 inodes, 73258400 blocks 732584 blocks (1.00%) reserved for the super user First data block=0 2236 block groups 32768 blocks per group, 32768 fragments per group 16384 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616 Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 39 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. Monte a agora a partio:

6 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

# mount -t ext3 /dev/mapper/root /mnt/crypt Agora vamos transferir os dados da sua partio root temporria para a nova partio criptografada: # cd / # cp -avx / /mnt/crypt (espere novamente bastante...) E quando terminar: # cd /mnt/crypt/dev # MAKEDEV generic

Criando a imagem initramfs A initramfs um ramfs no qual um arquivo initramfs desempacotado antes que o kernel efetue tarefas tais como montar a partio root. Este arquivo pode ser inserido junto com a imagem do kernel, no momento da confeco do mesmo ou como um arquivo separado. Para nossa initramfs precisamos do busybox. Busybox um conjunto de utilitrios comuns em sistemas UNIX em um nico e minsculo executvel. Para usurios de Gentoo: # mkdir /usr/local/src/build_initramfs # ROOT="/usr/local/src/build_initramfs/" USE="-pam make-symlinks static" emerge -av busybox Edite /etc/portage/savedconfig/sys-apps/busybox-<version> e tenha certeza de que a linha CONFIG_BUSYBOX_EXEC_PATH est como abaixo: CONFIG_BUSYBOX_EXEC_PATH="/bin/busybox" Seno altere e construa o busybox novamente com a USE savedconfig. # ROOT="/usr/local/src/build_initramfs/" USE="-pam savedconfig make-symlinks static" emerge -av busybox # cd /usr/local/src/build_initramfs # rm -r {etc,usr,lib,lib64,var}
7 de 12 11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

Usurios Debian ou outra distribuio devem baixar as fontes diretamente de http://www.busybox.net/. # tar -xjvf busybox-<verso> # cd busybox-<verso> # make menuconfig E selecione as opes conforme: http://gentoo-wiki.com/...-Crypt_with_LUKS#Building_BusyBox make Vamos gerar um kmap (mapa do teclado): # dumpkeys > default_keymap # loadkeys br-abnt2 # /usr/local/src/build_initramfs/bin/busybox dumpkmap > br-abnt2-<ARCH>.bin Ou, se voc compilou as fontes do pacote oficial do busybox: <caminho para as fontes do busybox>/busybox dumpkmap > br-abnt2-<ARCH>.bin Como eu uso amd64 no lugar de ARCH inseri amd64 ficando br-abnt2amd64.bin Se for i386, idem. # loadkeys default_keymap

O arquivo init do initramfs


Quando voc boota seu sistema, o kernel ir extrair o initramfs para o rootfs e verificar se um arquivo chamado "init" existe, e se encontrado o executar. O arquivo init no nosso caso ser responsvel por decriptar e montar a partio root quando ento o resto do processo de boot ser assumido pelo init da partio root. O init constante em http://gentoo-wiki.com/...Initramfs.27s_init no funciona em verses recentes do busybox. Assim voc deve usar meu arquivo atualizado e disponibilizado em:

8 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

http://baderna.birosca.org/~aline/share/init

Preparando a initramfs
Baixe tambm o arquivo applets: http://baderna.birosca.org/~aline/share/applets Se voc compilou o busybox com o pacote do site oficial faa o seguinte: Crie o diretrio temporrio para a initramfs: # mkdir /usr/local/src/build_initramfs E crie os links para o busybox: # cd /path/to/busybox-<version> # ./applets/install.sh /usr/local/src/build_initramfs --symlinks Agora, independente de qual busybox esteja usando faa o seguinte: Crie os diretrios necessrios: # cd /usr/local/src/build_initramfs # mkdir {proc,sys,new-root,etc,dev} Copie o script init: # cp /path/to/init . # chmod 755 init Crie os dispositivos necessrios: # mknod --mode=0660 /usr/local/src/build_initramfs/dev/null c 1 3 # mknod --mode=0600 /usr/local/src/build_initramfs/dev/console c 5 1 Voc precisa de um executvel esttico executvel cryptsetup. Pode baix-lo de: http://luks.endorphin.org/dm-crypt

9 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

# cp cryptsetup-<verso>-<arch>-pc-linux-gnu-static /usr/local /src/build_initramfs/sbin/cryptsetup # chmod u+x /usr/local/src/build_initramfs/sbin/cryptsetup Voc pode incluir um arquivo com uma art ascii para ser apresentado no momento do login, para um visual mais bonito. Salve em /usr/local /src/build_initramfs/etc copie tambm o kmap que voc criou anteriormente e o applets em /usr/local/src/build_initramfs/etc.

Recompilando o kernel
Agora finalmente vamos criar a imagem initramfs diretamente nas fontes do kernel. Tenha certeza de que a fonte do seu kernel esteja em /usr/src/linux. # rm -iv /usr/src/linux/usr/initramfs_data.cpio.gz # cd /usr/local/src/build_initramfs # find . | cpio --quiet -o -H newc | gzip -9 >/usr/src/linux /usr/initramfs_data.cpio.gz # touch /usr/src/linux/usr/initramfs_data.cpio.gz Tenha certeza que seu kernel est configurado conforme as opes apresentadas no incio. Agora compile mais uma vez: # mount /boot # make && make modules modules_install install Ou para Debian: # make-kpkg --revision=crypt.1.0 kernel-image # dpkg -i <novo-pacote-do-kernel>

ltimos passos Edite o fstab da sua partio root encriptada para usar /dev/mapper/root. # vi /mnt/crypt/etc/fstab /dev/mapper/root / ext3 noatime 01

10 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

E finalmente edite o bootloader (grub): title=Gentoo Linux 2.6.23 root (hd0,0) kernel /vmlinuz root=/dev/sda3 ikmap=br-abnt2-amd64.bin root o dispositivo ordinrio da sua partio encriptada e ikmap o mapa do teclado. Reinicie seu sistema e reze para que o prompt com a senha aparea... Se deu tudo certo, hora de cuidar das outras parties.

Encriptando as demais parties


Voc pode efetuar o mesmo procedimento de backup para a partio home ou outras, atravs do comando cp -avx. Claro, a mdia de backup deve ser grande o suficiente para que caibam as parties que deseja. preciso criar o mapper das demais parties tal qual fizemos na partio root substituindo apenas o dispositivo da partio que deseja criptografar. # cryptsetup -y --cipher serpent-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sda4 Para garantir mais segurana voc pode usar uma senha diferente que a da partio root. Edite o arquivo /etc/conf.d/cryptfs. Ele bem simples e auto-explicativo. Ele cuida da decriptao e encriptao das parties na inicializao, exceto a partio root, que cuidada pela initramfs. swap=swap source='/dev/sda2' target=home source='/dev/sda6' Depois insira os novos dispositivos mapper na sua fstab tal qual a partio root.

11 de 12

11-04-2011 10:26

Criptografar sua atual partio root usando dm-crypt...

http://www.vivaolinux.com.br/artigos/impressora.p...

/dev/mapper/root /dev/mapper/swap /dev/mapper/home

ext3 noatime 01 none swap sw 00 /home ext3 noatime 02

Criando um cdrom bootvel


Baixe a ltima verso do syslinux de: http://ftp.kernel.org/pub/linux/utils/boot/syslinux/ # tar -xvjf syslinux-<verso>.tar.bz2 Crie um diretrio para confeccionar seu cdrom: # # # # mkdir crypt-cd cp /boot/vmlinuz-<blablabla> crypt-cd cp /caminho/para/syslinux-<versao>/isolinux.bin crypt-cd/vmlinuz echo "DEFAULT /vmlinuz ro root=/dev/sda3" > crypt-cd/isolinux.cfg

Agora crie a imagem e queime seu cdrom: # mkisofs -o crypt-cd.iso -b isolinux.bin -c boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -J -hide-rr-moved -R crypt-cd/ # cdrecord cryptcd.iso No seu dia-a-dia voc deve sempre bootar pelo cdrom. A partio boot apenas para casos de emergncia.

http://www.vivaolinux.com.br/artigo/Criptografar-sua-atual-particaoroot-usando-dmcrypt-com-luks Voltar para o site

12 de 12

11-04-2011 10:26

Você também pode gostar