Cifrar la carpeta personal del usuario con eCryptfs

Este foro es para todo lo relacionado con la documentación, artículos de ayuda, Wikis, tips & hints y las traducciones de Arch (tanto en progreso como las finalizadas).
Responder
Avatar de Usuario
Roizheim
Novato
Mensajes: 11
Registrado: 25 Dic 2013, 17:53

Cifrar la carpeta personal del usuario con eCryptfs

Mensaje por Roizheim » 17 Ene 2014, 08:27

Quisiera tomar la idea del amigo davidet y actualizar este tema de seguridad que me parece relevante; advertir, además, que estos son los pasos que yo he seguido y me han funcionado perfectamente (para que se tome el presente tutorial con las reservas adecuadas y cualquiera se sienta libre de hacerle las correcciones oportunas).

En el presente documento describimos cómo encriptar la carpeta personal de un usuario en home con eCryptfs y montar/desmontar automáticamente el módulo eCryptfs a través de PAM (método flexible de autenticación del usuario) al iniciar/cerrar sesión:

El método es muy sencillo y nos permite configurar automáticamente la carpeta personal del usuario con el algoritmo de cifrado AES y una clave de 16 byte.

Comenzamos...

1. Instalar paquetes:

Código: Seleccionar todo

# pacman -S ecryptfs-utils keyutils rsync lsof
2. Crear grupo y añadir usuario:
  • 2.1. Creamos un grupo «ecryptfs»:

    Código: Seleccionar todo

    # groupadd ecryptfs
    2.2. Agregamos nuestro usuario a dicho grupo:

    Código: Seleccionar todo

    # usermod -aG ecryptfs nombredeusuario
3. Cargar módulo eCryptfs:

Código: Seleccionar todo

# modprobe ecryptfs
4. Modificar PAM (para que PAM descifre automáticamente el módulo eCryptfs al iniciar sesión y se pueda montar la carpeta personal del usuario):
  • 4.1. Archivo del sistema «/etc/pam.d/system-auth», añadiendole:

    Código: Seleccionar todo

    auth      required  pam_ecryptfs.so unwrap
    password  required  pam_ecryptfs.so
    session   required  pam_ecryptfs.so unwrap
    4.2. Archivo del gestor de inicio de sesión que utilicemos:
    «/etc/pam.d/gdm-password» (para gnome);
    «/etc/pam.d/kde» (para kde);
    «/etc/pam.d/lxdm» (para lxdm); o
    «/etc/pam.d/lightdm» ( para lightdm),

    añadiéndole:

    Código: Seleccionar todo

    auth             optional        pam_ecryptfs.so unwrap
    password         optional        pam_ecryptfs.so
    session          optional        pam_ecryptfs.so unwrap
    Ambos archivos deben quedar así aproximadamente (obviamente, omitimos: « ← Poner aquí »):

    (Para el archivo del sistema):

    Código: Seleccionar todo

    # nano /etc/pam.d/system-auth:
    
    #%PAM-1.0
    auth      required  pam_env.so
    auth      required  pam_unix.so     try_first_pass nullok
    auth      required  pam_ecryptfs.so unwrap       ← Poner aquí
    auth      optional  pam_permit.so
    
    account   required  pam_unix.so
    account   optional  pam_permit.so
    account   required  pam_time.so
    
    password  required  pam_ecryptfs.so              ← Poner aquí
    password  required  pam_unix.so     try_first_pass nullok sha512 shadow
    password  optional  pam_permit.so
    
    session   required  pam_ecryptfs.so unwrap       ← Poner aquí
    session   required  pam_limits.so
    session   required  pam_env.so
    session   required  pam_unix.so
    session   optional  pam_permit.so
    (A modo de ejemplo, para el archivo gdm de Gnome -el resto de ejemplos podemos verlos en https://wiki.archlinux.org/index.php/EC ... tfs_module -):

    Código: Seleccionar todo

    # nano /etc/pam.d/gdm-password:
    
    #%PAM-1.0
    auth            requisite       pam_nologin.so
    auth            required        pam_env.so
    auth            requisite       pam_unix.so nullok
    auth            optional        pam_ecryptfs.so unwrap   ← Poner aquí
    auth            optional        pam_gnome_keyring.so
    auth            sufficient      pam_succeed_if.so uid >= 1000 quiet
    auth            required        pam_deny.so
    account         required        pam_unix.so
    password        required        pam_unix.so
    password        optional        pam_ecryptfs.so          ← Poner aquí
    session         required        pam_loginuid.so
    -session        optional        pam_systemd.so
    session         optional        pam_keyinit.so force revoke
    session         required        pam_limits.so
    session         required        pam_unix.so
    session         optional        pam_ecryptfs.so unwrap   ← Poner aquí
    session         optional        pam_gnome_keyring.so auto_start
5. Reiniciar el equipo. (Este paso lo he hecho para matar cualquier proceso que esté usando a «/home», lo que frustraría la migración)

6. Una vez reiniciado, cuando aparezca la pantalla de inicio de sesión y antes de ingresar en el entorno gráfico, accedemos a tty2 (Ctrl+Alt+F2), iniciaremos una sesión como root y ejecutaremos la orden de abajo (esto lo he hecho así, antes de ingresar en el escritorio, como medida de precaución, porque si ingresamos en el escritorio podría ejecutarse algún programa en segundo plano, como por ejemplo dropbox, que utiliza /home, lo que impediría completar la migración y, consiguientemente, el proceso de encriptado):

Código: Seleccionar todo

# ecryptfs-migrate-home -u nombredeusuario
y seguimos las instrucciones (que básicamente consisten en introducir la contraseña -la de nuestro usuario- y esperar a que complete la migración, que puede tardar un tiempo, en función del tamaño de nuestra carpeta personal).

(Advertencia: al pedirnos la passphrase, introduciremos la contraseña de usuario utilizada para iniciar nuestra sesión de usuario, ambas, contraseña de usuario y passphrase de eCryptfs, deben coincidir)

(Nota: si no se inicia la migración advirtiéndonos que no tenemos iniciado el módulo eCryptfs, ejecutamos: modprobe ecryptfs, y volvemos a intentarlo. También puede darnos error al iniciar la migración si no tenemos suficiente espacio en disco para hacer el backup del directorio personal, con lo cual tendríamos que hacer un poco de limpieza de nuestra carpeta personal para dejar el espacio requerido -2.5x-).

7. Una vez terminada la migración, hay que generar la passphrase para eCryptfs, lo cual hay que hacerlo como usuario sin privilegios. Para ello, en la misma tty2, saldremos de la sesión de root (con la orden exit) e iniciaremos una sesión como usuario normal (con el nombre de usuario cuya carpeta personal queremos encriptar). Una vez abierta la sesión de usuario normal escribimos:

Código: Seleccionar todo

$ ecryptfs-unwrap-passphrase
(nos pedirá la passphrase, donde debemos poner la misma contraseña que la de nuestro usuario)

8. Para finalizar el proceso, realizaremos tres acciones consecutivas: (1) salir de la sesión de usuario normal iniciada en la tty2 escribiendo «exit», (2) volver a la pantalla gráfica de inicio de sessión (pulsando Ctrl+Alt+F1) e ingresar en el escritorio para completar el proceso, y, (3) para comprobar que todo ha salido bien, reiniciar el equipo.

Hemos terminado. Ya tenemos nuestra carpeta personal encriptada.

Nota: si todo ha salido bien, habrá un archivo de respaldo de nuestro directorio personal, llamado «nombredeusuario.XXXXX», en /home/nombredeusuario.XXXXX, que podemos eliminar (en caso contrario, nos servirá para restaurar dicho directorio).

Sugerencias:
  • i. La encriptación afecta solamente a la carpeta personal del usuario especificado, sin que suponga ninguna alteración en las carpetas personales de otros usuarios, si es que existen en el sistema. Si en el futuro queremos encriptar otras carpetas personales de otros usuarios existentes en el sistema, bastará tan solo seguir los puntos 2.2, 6, 7 y 8 anteriores.

    ii. Si cambiamos la contraseña de usuario (# passwd nombredeusuario), no debemos olvidarnos de cambiar también la passphrase de eCryptfs, de lo contrario, no podremos iniciar sesión (creándose una especie de bucle que nos devolverá siempre a la pantalla de inicio de sesión) ya que no se podrá montar nuestro directorio personal.
    • ii.a. Para cambiar la passphrase de eCryptfs, cuando se cambia la contraseña de usuario (recordar que ambas deben coincidir), escribimos en consola (como usuario normal):

      Código: Seleccionar todo

      $ ecryptfs-rewrap-passphrase /home/$USER/.ecryptfs/wrapped-passphrase
      (seguimos las instrucciones, que son: introducir contraseña actual, introducir contraseña nueva, repetir contraseña nueva)

      Y luego:

      Código: Seleccionar todo

      $ ecryptfs-unwrap-passphrase
      (para generar la passphrase de eCryptfs)

      ii.b. Si por error hemos ejecutado estas órdenes como root, tampoco podremos iniciar sesión porque PAM no tendrá permisos para acceder al archivo «wrapped-passphrase». Para subsanar este error debemos darle permisos de lectura y escritura a dicho archivo (como root, desde una tty -por ejemplo, Ctrl+Alt+F2-):

      Código: Seleccionar todo

      # chmod 777 /home/nombredeusuario/.ecryptfs/wrapped-passphrase
Fuente: https://wiki.archlinux.org/index.php/eCryptfs

Responder