GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo cifrar directorios/particiones con eCryptfs en Debian 8 (Jessie)

eCryptfs es un sistema de archivos criptográficos apilados de clase empresarial compatible con POSIX para Linux. Puede usarlo para encriptar particiones y también directorios que no usan una partición propia, sin importar el sistema de archivos subyacente, el tipo de partición, etc. Este tutorial muestra cómo usar eCryptfs para encriptar un directorio en Debian Jessie.

1 nota preliminar

En este tutorial, cifraré mi directorio de inicio, /home/falko/, que se encuentra en la partición / (es decir, /home/falko/ es un directorio normal y no utiliza una partición propia).

2 Instalación de eCryptfs

eCryptfs se puede instalar fácilmente de la siguiente manera:

apt-get -y install ecryptfs-utils

3 Cifrar un directorio

Ahora cifraré mi directorio de inicio /home/falko/. Como ya hay archivos (no encriptados) en ese directorio, debo hacer una copia de seguridad de ellos para poder restaurarlos en el directorio /home/falko/ luego encriptado (de lo contrario, no se puede acceder/leer estos archivos mientras el directorio está cifrado):

cp -pfr /home/falko/ /tmp/

Ahora puedo cifrar el directorio /home/falko/ montándolo con el tipo de sistema de archivos ecryptfs:

mount -t ecryptfs /home/falko /home/falko

Cuando hagas esto por primera vez, tendrás que responder algunas preguntas:

[email protected]:/tmp# mount -t ecryptfs /home/falko /home/falko
Select key type to use for newly created files:
1) tspi
2) passphrase
Selection: <-- 2
Passphrase: <-- Enter a secure password
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32
2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]: <-- Press ENTER
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]: <-- Press ENTER
Enable plaintext passthrough (y/n) [n]: <-- Press ENTER
Enable filename encryption (y/n) [n]: <-- Press ENTER
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=bd28c38da9fc938b
WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],
it looks like you have never mounted with this key
before. This could mean that you have typed your
passphrase wrong.
Would you like to proceed with the mount (yes/no)? : <-- yes
Would you like to append sig [bd28c38da9fc938b] to
[/root/.ecryptfs/sig-cache.txt]
in order to avoid this warning in the future (yes/no)? : <-- yes
Successfully appended new sig to user sig cache file
Mounted eCryptfs
[email protected]:/home/administrator#

Echa un vistazo a la salida de

mount

y debería ver que /home/falko/ ahora está encriptado:

Restauremos nuestra copia de seguridad en el directorio ahora encriptado /home/falko/ y eliminemos la copia de seguridad después:

cp -pfr /tmp/falko/ /home/
rm -fr /tmp/falko/

Para fines de prueba, copiemos algún otro archivo, p. /etc/hosts, a /home/falko/ para comprobar si realmente se cifra:

cp /etc/hosts /home/falko

Mientras que /home/falko/ está montado con el tipo de sistema de archivos ecryptfs, debería ser posible leer el contenido de /home/falko/hosts:

cat /home/falko/hosts

Ahora desmonte /home/falko/...

umount /home/falko

... y vuelve a intentar leer /home/falko/hosts, y deberías obtener algunas cosas crípticas:

cat /home/falko/hosts

 

4 Cómo montar automáticamente una partición cifrada en el momento del arranque

Por supuesto, no queremos montar /home/falko/ manualmente cada vez; sería mejor si pudiera montarse automáticamente en el momento del arranque. Para hacer esto, necesitamos un archivo de frase de contraseña y, por razones de seguridad, quiero que este archivo de frase de contraseña se encuentre en una llave USB.

Conecte una llave USB y ejecute

fdisk -l

para averiguar el nombre del dispositivo y el tipo de sistema de archivos:

[email protected]:~# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00035e35

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        3793    30461952   83  Linux
/dev/sda2            3793        3917      992257    5  Extended
/dev/sda5            3793        3917      992256   82  Linux swap / Solaris

Disk /dev/sdb: 8086 MB, 8086617600 bytes
255 heads, 63 sectors/track, 983 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e439f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         983     7895916    b  W95 FAT32
[email protected]:~#

En mi caso, el nombre del dispositivo es /dev/sdb1 y utiliza un sistema de archivos FAT32.

Montemos la llave USB en /mnt/usb:

mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb

Echa un vistazo a la salida de

mount

... y debería ver que se montó con el tipo de sistema de archivos vfat (FAT32); necesitaremos esta información más adelante para nuestro archivo /etc/fstab:

[email protected]:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=124251,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=202132k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
/dev/sdb1 on /mnt/usb type vfat (rw)
[email protected]:~#

Ahora eche un vistazo al contenido de /root/.ecryptfs/sig-cache.txt:

cat /root/.ecryptfs/sig-cache.txt
bd28c38da9fc938b

Necesitamos esta firma para el archivo /root/.ecryptfsrc que creamos de la siguiente manera:

nano /root/.ecryptfsrc

Asegúrese de utilizar la firma del archivo /root/.ecryptfs/sig-cache.txt en la línea ecryptfs_sig:

key=passphrase:passphrase_passwd_file=/mnt/usb/passwd_file.txt
ecryptfs_sig=bd28c38da9fc938b
ecryptfs_cipher=aes
ecryptfs_key_bytes=16
ecryptfs_passthrough=n
ecryptfs_enable_filename_crypto=n

Ahora creamos el archivo de frase de contraseña en nuestra llave USB:

nano /mnt/usb/passwd_file.txt
passphrase_passwd=some_passphrase

Asegúrese de usar la frase de contraseña correcta, es decir, la frase de contraseña que usaría si montara el directorio manualmente.

A continuación, abra /etc/fstab...

nano /etc/fstab

... y agregue las siguientes dos líneas (asegúrese de usar el tipo de sistema de archivos correcto para su llave USB, vfat en mi caso):

[...]
/dev/sdb1       /mnt/usb        vfat    ro      0 0
/home/falko /home/falko ecryptfs defaults 0 0

(¡Es importante que la línea de la llave USB esté antes de la línea de la partición cifrada porque la llave USB debe montarse antes de poder montar la partición cifrada!)

Luego reinicie el sistema:

reboot

Si todo va bien, su partición cifrada debería montarse automáticamente después del reinicio. Sin embargo, es posible que su sistema no pueda montar su llave USB durante el arranque, lo que significa que su partición cifrada tampoco se puede montar. Si esto sucede, edite /etc/rc.local (este script se ejecuta al final del proceso de arranque)...

nano /etc/rc.local

... y agregue la línea /bin/mount -a antes de la línea de salida 0:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/bin/mount -a
exit 0

Esto (re)montará todas las particiones (incluida su llave USB y la partición cifrada) al final del proceso de arranque.

5 Enlaces

  • eCryptfs:https://launchpad.net/ecryptfs
  • Debian:http://www.debian.org/

Debian
  1. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  2. Bash =~ Regex y Https://regex101.com/?

  3. Debian – ¿Mover /var, /home a una partición separada?

  4. “No se puede crear el directorio de caché /home//.composer/cache/repo/https—packagist.org/, o el directorio no se puede escribir. Procediendo sin caché”?

  5. Cómo systemd-tmpfiles limpia /tmp/ o /var/tmp (reemplazo de tmpwatch) en CentOS/RHEL 7

Cómo cifrar directorios con eCryptfs en Ubuntu 16.04

Cómo cifrar sus datos con EncFS en Debian 8 (Jessie)

Cómo buscar sus archivos o directorios con el comando Buscar en Linux

Cómo cifrar particiones de Linux con VeraCrypt en Debian 10

Comprender los archivos /proc/mounts, /etc/mtab y /proc/partitions

Cómo cambiar el valor predeterminado /tmp a /home/user/tmp