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