HOWTO Cifrar sistema con luks

De Gentoo Linux Wiki

Este articulo es parte de las series de HOWTO.
Kernel & Hardware Red y Servicios Portage Relacionado con el Sistema Servidor X Juegos Misceláneos

[editar] Cifrar el sistema con luks

[editar] IMPORTANTE: CON LA SALIDA DE GENKERNEL 3.4.9 YA NO ES NECESARIO EL PARCHEO LO DEMAS SIGUE SIENDO VÁLIDO

En este howto vamos a ver como cifrar nuestros discos al instalar gentoo, la partición raíz del sistema, la swap y las otras particiones que tengamos. Es bastante sencillo y útil sobretodo en portátiles. Usaremos una versión modificada de genkernel para poder depositar las keys en un pendrive usb y no tener que introducir una password en cada arranque del sistema al montar la partición raíz. Este howto es para nuevas instalaciones pero podéis crearos un stage4 de vuestro sistema actual y usarlo en la instalación por ejemplo. Necesitamos:

  1. livecd 2007.0
  2. la revisión 524 del repositorio subversión de genkernel.
  3. parche para genkernel que está en el bug: 162962 de gentoo bugzilla.
  4. pendrive o floppy

Bien arrancamos el sistema con el livecd, conectamos el pendrive que queremos usar y lo montamos(tb valdría un floppy) y ejecutamos:

# head -c1024 /dev/urandom > /mnt/puntomontaje/.key

con esto creamos una llave aleatoria de 1024 bits y la guardamos en el dispositivo removible. Imaginemos que nuestro disco está dividido así:

/dev/hda1 >> /boot
/dev/hda2 >> swap
/dev/hda3 >> /
/dev/hda4 >> /home
/dev/hda5 >> /tmp

Algo recomendable pero opcional seria ejecutar shred en todas las particiones para asegurarnos que todos los datos anteriores son destruidos, esto puede tardar mucho, mucho tiempo:

# shred -v -n 2 /dev/hda3
# shred -v -n 2 /dev/hda1
# shred -v -n 2 /dev/hda2
# shred -v -n 2 /dev/hda4
# shred -v -n 2 /dev/hda5

Una vez echo esto o si os habeis saltado este paso vamos a crear los volúmenes cifrados:

# cryptsetup luksFormat -s 256 /dev/hda3

nos pedirá una clave que luego usaremos para añadir la key que creamos antes. Aunque este pass se puede eliminar una vez añadida la key, es recomendable que sea una pass segura y la conservemos por si el archivo key fuera comprometido y tubiéramos que revocarlo (O sí tú perro se come el floppy/pendrive :P ). Hacemos los mismo con el resto de particiones menos con la particion donde tengamos el /boot:

# cryptsetup luksFormat -s 256 /dev/hda4

etc... Añadimos el archivo key que tenemos en el usb o floppy:

# cryptsetup luksAddKey /dev/hda3 /mnt/puntomontaje/.key

Nos pedirá la clave que usamos al formatear la partición. Hacemos lo mismo con el resto, si queremos podemos crear una key para cada partición y tenerlas en dispositivos removibles diferentes, eso ya es decisión de cada uno y de su nivel de paranoia.

Lo siguiente es hacer la particiones cifradas accesibles al sistema y formatearlas:

# cryptsetup luksOpen /dev/hda3 root
# cryptsetup luksOpen /dev/hda4 home

la swap y la que usemos como tmp no hace falta abrirlas ahora. si hacemos ahora un:

# ls /dev/mapper

tendríamos que ver algo parecido a esto:

# ls /dev/mapper/
control root home

Formateamos las particiones cifradas con nuestro sistema de archivos preferido(creo que hay problemas con reiser4), yo usaré reiserfs 3:

# mkreiserfs /dev/mapper/root
# mkreiserfs /dev/mapper/home

Ahora seguimos el manual de instalación de gentoo desde después prepare sus discos hasta llegar al punto de configurar el kernel. En el chroot instalamos genkernel, subversion y cryptsetup-luks.

# emerge -av genkernel subversion cryptsetup-luks

y usamos este "script" para descargar la version de subversion que nos interesa y aplicarle el parche:

# cd ~
# svn co -r524 http://anonsvn.gentoo.org/repositories/genkernel genkernel
# wget http://bugs.gentoo.org/attachment.cgi?id=128927
# patch -p0 < attachment.cgi?id=128927
# rm -rf /usr/share/genkernel 
# svn export genkernel/trunk /usr/share/genkernel
# genkernel --menuconfig --luks --dmraid all

Deberemos entrar en la sección 'Device Drivers' -> 'Multi-device support (RAID and LVM)' y activar soporte para las opciones 'device-mapper' y 'dm-crypt'. Importante compilarlas estáticamente en el kernel. Ahora seguimos con el manual de instalación hasta el punto donde tenemos de configurar grub. El grub.conf quedaria así:

title GNU/Linux Gentoo
root (hd0,0)
kernel /kernel-genkernel-x86_64-2.6.22-gentoo-r8 root=/dev/ram0 crypt_root=/dev/hda3 root_key=/.key root_keydev=/dev/sdX real_root=/dev/mapper/root init=/linuxrc ramdisk=8192 vga=795 quiet nodevfs udev
initrd /initramfs-genkernel-x86_64-2.6.22-gentoo-r8

Ahora explicaré un poco las opciones de luks:

  1. crypt_root=/dev/hda3 >> particion raiz cifrada.
  2. real_root=/dev/mapper/root >> partición raiz una vez "descrifada".
  3. root_key=/.hey >> nombre del archivo key.
  4. keydev=/dev/sdX >> unidad removible, si no la encuentra aki buscará en el resto de dispositivos el archivo key.

Bien ahora retocaremos el archivo /etc/fstab para dejarlo en algo así:

/dev/hda1 /boot ext2 noauto,noatime 1 2
/dev/mapper/root / reiserfs noatime 0 1
/dev/mapper/home /home reiserfs noatime 1 2
/dev/mapper/tmp /tmp reiserfs defaults,noexec,noatime,nosuid,nodev 1 2
/dev/mapper/crypt-swap none swap sw 0 0
/dev/cdrom /mnt/cdrom auto noauto,ro,users 0 0
/dev/fd0 /mnt/floppy auto noauto 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
proc /proc proc nodev,nosuid,noexec 0 0

Ajustamos también el archivo de cryptsetup-luks: /etc/conf.d/cryptfs para dejarlo conforme nuestra configuración:

swap=crypt-swap
options='-s 256 -d /dev/urandom -c aes-cbc-essiv:sha256 -h sha256'
source='/dev/hda2

target=tmp
source='/dev/hda5'
key='/.key'
remdev='/dev/sdX' # unidad removible AJUSTAR
options='-s 256 -d /dev/urandom -c aes-cbc-essiv:sha256 -h sha256'
pre_mount='/sbin/mkreiserfs -f -f ${dev}'
post_mount='chown root:root ${mount_point}; chmod 1777 ${mount_point}'

target=home
source='/dev/hda4'
key='/.key'
options="-c blowfish-cbc-essiv:sha256"
remdev='/dev/sdX' # unidad removible AJUSTAR
post_mount='chown root:root ${mount_point};


Seguimos con el manual de gentoo pero cuando llegue al punto de desmontar las particiones también deberemos ejecutar esto para cerrarlas completamente:

# cryptsetup luksClose root
# cryptsetup luksClose home

etc... Reiniciamos, ahora tendreis un sistema cifrado y deberia preguntar por el pendrive/floppy al montar la particion /.

Herramientas personales