Skip to content

Topic 331: Cryptography

331.3 Encrypted File Systems (weight: 3)

Description Candidates should be able to set up and configure encrypted file systems.

Key Knowledge Areas:

Understand block device and file system encryption
Use dm-crypt with LUKS1 to encrypt block devices
Use eCryptfs to encrypt file systems, including home directories and PAM integration
Awareness of plain dm-crypt
Awareness of LUKS2 features
Conceptual understanding of Clevis for LUKS devices and Clevis PINs for TMP2 and Network Bound Disk Encryption (NBDE)/Tang

The following is a partial list of the used files, terms and utilities:

cryptsetup (including relevant subcommands)
cryptmount
/etc/crypttab
ecryptfsd
ecryptfs-* commands
mount.ecryptfs, umount.ecryptfs
pam_ecryptfs

Encriptación de datos

Resumen de ordenes:

# ficheros
cencrypt file -K pass   # encriptar fichero
cdecrypt file -K pass   # desencriptar fichero

# particiones
cryptsetup luksFormat /dev/vdb1         # formatear particion como encrypt_luks
cryptsetup luksOpen /dev/vdb1 cryptpart # crear volumen y generar pasword
mkfs.ext4 /dev/mapper/cryptpart         # formatear volumen
mount /dev/mapper/cryptpart /mnt/secret     # montar volumen en el sistema
cryptsetup luksClose /dev/mapper/encvolume  # cerrar volumen de nuevo
cryptsetup luksAddKey /dev/sda /root/lukskey    # añadir passfrase como file
cryptsetup luksAddKey /dev/sda      # añadir passfrase

# ver estrado
cryptsetup luksDump /dev/vd1    # ver informacion
cryptsetup -v status cryptpart

# directorios
mkdir -t ecryptfs .datos datos
sudo ecryptfs-migrate-home –u tu-nombre-de-usuario # cifrar home de user
ecryptfs-setup-private      # crear dir private
ecryptfs-unwrap-passphrase  # recuperar passfrase
ecryptfs-umount-private     # desmontar dir Private
ecryptfs-add-passphrase     # añadir passfrase

Una manera simple de protejer los datos es cifrando y descifrando manualmente el contenido con datos sensibles.

ccencrypt file -K pass
ccat file
ccdecrypt file -K pass

Particiones

Otra forma de protejer los datos es cifrar directamente una partición, siempre teniendo cuidado de no cifrar la partición que contenga el kernel.

cryptsetup luksFormat /dev/vdb1     # formatear particion como encrypt_luks
cryptsetup luksOpen /dev/vdb1 cryptpart # crear volumen y generar pasword
mkfs.ext4 /dev/mapper/cryptpart     # formatear volumen
mount /dev/mapper/cryptpart /mnt/secret # montar volumen en el sistema

cryptsetup luksDump /dev/vd1    # ver informacion
cryptsetup -v status cryptpart

cryptsetup luksClose /dev/mapper/encvolume # cerrar volumen de nuevo

Lo antrior esta muy bien, pero lo ideal es automatizarlo.

El proceso es parecido:

cryptsetup luksFormat /dev/sda 
cryptsetup luksOpen /dev/sda encvolume
mkfs.ext4 /dev/mapper/encvolume
cryptsetup luksDump /dev/sda

Crear un archivo que haga de passfrase ( no es necesario, aunque si recomendable)

dd if=/dev/urandom of=/root/lukskey bs=4096 count=1
chmod 600 /root/lukskey

Añadir passfrase en slot disponible

cryptsetup luksAddKey /dev/sda /root/lukskey

El archivo /etc/crypttab utiliza una sintaxis muy similar a /etc/fstab donde añadiremos las particiones a montar encriptadas

/etc/crypttab

# <target name> <source device> <key file>  <options> 
# en neste caso en el arranque se detendra para que pongas el passfrase manualmente
#encvolume       /dev/sda       none    l   uks,timeout=180

# aqui recoje el passfrase del archivo y arrranca
encvolume       UUID=c9b55f84-a1f8-4f20-8c34-25031ad5abb0   /root/lukskey   luks,timeout=180

Podemos sacar el UUID de la particion o disco cryptsetup luksUUID /dev/sda3

Por ultimo montamos la partición con /etc/fstab

/etc/fstap

/dev/mapper/encvolume /mnt  ext4  defaults 0  0

--

Directorios

El mejor compromiso entre la flexibilidad y la eficiencia lo aporta el cifrado a nivel de sistema de archivos.

En el siguente ejemplo se creasn dos directorios y se montan uno encima del otro. los archivos creados en datos se trabaja como siempre, pero al desmontar todos esos archivos estan encriptados en .datos

mkdir .datos datos  
mkdir -t ecryptfs .datos datos # pregunta passfrase, como quieres encriptar, etc.
umount datos

# para volver a montar
mkdir -t ecryptfs .datos datos

Otra forma es cifrar todo el home de un usuario, aunque no es muy optimo en recursos. El usuario al hacer login se desencryptara automaticamente gracias a que se añaden opciones en PAM.

sudo ecryptfs-migrate-home –u tu-nombre-de-usuario # cifrar home de user

Los pasos anteriores estan muy bien pero solo pueden encriptar usuarios con plivilegios.

ecryptfs-setup-private ofrece al usuario crear un directorio "Private" encriptado en su home.

ecryptfs-setup-private

Se guarda una copia del passfrase en ~/.ecryptfs/wrapped-passphrase que para conseguir la clave de recuperación y guardarlo en caso que sea necesario se puede utilizar el siguiente orden.

ecryptfs-unwrap-passphrase

Cuando el usuario quiere dejar de usar o eliminar este diorectorio podemos usar.

ecryptfs-umount-private 
rm -r ~/Private ~/.Private ~/.ecryptfs

pam_ecryptfs es un módulo PAM que puede usar la contraseña de inicio de sesión para desenvolver una frase de contraseña de montaje de ecryptfs almacenada en ~/.ecryptfs/wrapped-passphrase, y montar automáticamente un directorio criptográfico privado.

root@debian1:/home/vagrant# grep ecryptfs /etc/pam.d/*
/etc/pam.d/common-auth:auth required    pam_ecryptfs.so unwrap
/etc/pam.d/common-password:password optional    pam_ecryptfs.so 
/etc/pam.d/common-session:session   optional    pam_ecryptfs.so unwrap
/etc/pam.d/common-session-noninteractive:session    optional    pam_ecryptfs.so unwrap