Vamos a encriptar un sistema de ficheros de un disco secundario sobre un sistema RHEL 6 (CentOS). Para encriptar particiones de sistema (filesystem / o /home por ejemplo) es preferible hacerlo en el momento de la instalación, ya que resulta más sencillo y evitamos la pérdida de datos posterior.
Preparación del sistema
Para la encriptación con LUKS necesitamos tener cargado el módulo de kernel dm_crypt así como el paquete cryptsetup-luks:
# lsmod | grep dm_cry dm_crypt 10848 0 dm_mod 63859 5 dm_crypt,dm_mirror,dm_log
Si no está cargado en vuestro sistema hacedlo con modprobe:
# modprobe dm_crypt
Acordaos de configurarlo (por defecto es probable que con modprobe sea suficiente) para que sea persistente a reinicios.
Instalamos cryptsetup-luks en caso de que no esté instalado:
# yum install cryptsetup-luks
# rpm -qa | grep cryptse cryptsetup-luks-libs-1.1.2-2.el6.i686 cryptsetup-luks-1.1.2-2.el6.i686
Preparación del sistema de ficheros/partición
Vamos a asumir que tenemos ya el sistema de ficheros creado. Podéis revisar los siguientes artículos si tenéis dudas, tanto de crear una partición estándar como un LVM:
Algo recomendable pero que suele llevar bastante tiempo es, lo primero de todo, llenar de datos aleatorios la partición a encriptar. Repito que puede llevar bastante tiempo dependiendo del tamaño de la partición. Si sólo estáis haciendo pruebas no es necesario que lo hagáis (sustituid /dev/volgroup1/logvol1 por vuestra partición o volumen):
# dd if=/dev/urandom of=/dev/volgroup1/logvol1
Encriptación del filesystem
Llegados a este punto ya tenemos el sistema de ficheros preparado para su encriptación. Haremos uso del comando cryptsetup. Lo primero que haremos es asignar la passphrase. Cuanto más compleja sea mejor, igual que cualquier password:
Nota: se eliminará cualquier dato del filesystem
# cryptsetup luksFormat /dev/volgroup1/logvol1 WARNING! ======== This will overwrite data on /dev/volgroup1/logvol1 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: ********* Verify passphrase: *********
Al tratarse de un filesystem encriptado debemos mapearlo ya que no se puede leer directamente. Esa unidad mapeada será la que montaremos y utilicemos como un filesystem estándar. Vamos a sacar el UUID del sistema de ficheros encriptado para utilizarlo si queremos en lugar de la etiqueta (LABEL):
# cryptsetup luksUUID /dev/volgroup1/logvol1 79da86ea-70f2-4a80-82cb-6c614a885a37
Mapeamos el sistema de ficheros contra encrypted-fs:
# cryptsetup luksOpen /dev/volgroup1/logvol1 encrypted-fs Enter passphrase for /dev/volgroup1/logvol1:
Y ya tenemos el volumen listo para particionar en /dev/mapper/encrypted-fs. Le damos formato y lo montamos:
# mkfs.ext4 /dev/mapper/encrypted-fs
Finalmente, lo añadimos a fstab para el arranque al inicio del sistema. Podemos hacerlo con el UUID o con la etiqueta (LABEL) del fs:
# tune2fs -l /dev/mapper/encrypted-fs | grep UUID Filesystem UUID: 9578a03e-949b-4fe8-a16c-57024b01fe89
Lo añadimos a /etc/fstab:
UUID=9578a03e-949b-4fe8-a16c-57024b01fe89 /encrypted-fs ext4 defaults 0 0
Y añadimos también la siguiente entrada a /etc/crypttab para que solicite la passphrase en el arranque del sistema:
encrypted-fs /dev/volgroup1/logvol1 none
Si reiniciáis, durante el arranque se os solicitará la passphrase del volumen:
logvol1 is password protected: *************