Si bien para todos los que usan una pc la seguridad de los datos debería ser un preocupación en caso de robo físico del dispositivo en el caso de los que trabajamos en IT ya seamos Administradores de Sistemas o Desarrolladores la seguridad de los datos es un asunto critico, en mi caso siempre uso cifrado completo de disco en las pc incluso en la de escritorio en casa.

Escribir las contraseñas es un riesgo de que nos estén mirando o nos este filmando alguna cámara de seguridad, sobre todo si lo hacemos seguido en el mismo lugar, por ejemplo en nuestro lugar de trabajo o lugar de estudio o algún sitio publico, por eso buscando alternativas se me ocurrió desbloquear la pc automáticamente con una  “llave usb”.

Si bien lo ideal en una pc es que este totalmente cifrada incluso la partición de sistema y swap, dejando únicamente la partición /boot sin cifrar, para hacerlo bien se necesita un disco sdd para el sistema porque en un disco convencional es muy lento cuando la partición esta cifrada y cuando la Laptop es nueva no me gusta perder la garantía por remplazar la lectora por un sdd, aclaro que tengo un case que permite ponerle un disco mecánico o sdd de 2.5 pulgadas y que entra en el lugar de la lectora.

Este script esta orientado a un sistema en que la partición  de sistema no esta cifrada dado que la pc es nueva y no le he agregado un sdd por lo tanto tengo una sola partición secundaria de datos cifrada, mas adelante cuando haga el cambio actualizare el articulo.

 

“La idea es sencilla, cuando el sistema operativo este arrancando busca un pendrive con la llave para desbloquear la partición de datos, si la encuentra la desbloquea, sino la encuentra continua con el arranque normal pero sin descifrar la partición, dejando la opción al usuario de hacerlo manualmente mas adelante.”

 

Primero debemos identificar la partición que queremos descifrar automáticamente, una manera es por ejemplo con el comando blkid


sudo blkid | grep LUKS
/dev/sda6: UUID="b887d8c2-ebc7-4e9f-8a08-a16f97e2f1df" TYPE="crypto_LUKS" PARTUUID="190c6cf3-01"

En este caso muestra solo una partición, podría mostrar mas de una, este script solo sirve para una sola partición, bien se puede repetir este tutorial para cada una de las particiones que tengamos cifradas, creando diferentes servicios, pero ese es otro tema.

Ahora que sabemos el nombre de nuestra partición podemos continuar, en este caso se llama sda6 pero por supuesto esto cambiara en su pc, no me cansare de repetir esto a lo largo del documento, ya que depende de como hayan configurado el disco.

Como segundo paso debemos conectar un PenDrive, en mi caso, la partición de mi memoria USB se llama PCKey, ustedes deben usar el nombre del pendrive que ustedes tengan.

Abrimos una consola y ejecutamos:

ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/alvaro/.ssh/id_rsa):

Aquí cambiamos la ruta de donde guardar, en mi caso /media/alvaro/PCKEY entonces escribimos por ejemplo /media/alvaro/PCKEY/PCKey.key ustedes usen la ruta de su pendrive y el nombre que quieran para la llave, le damos 2 veces al Enter para dejar en blanco el tema de la contraseña.

Esto nos habrá generado 2 archivos, borramos el .pub ya que no lo necesitamos

rm -r /media/alvaro/PCKEY/PCKey.key.pub

Ahora un paso importante y es agregar el archivo PCKey.key a la partición cifrada, la ruta del archivo pckey.key dependerá de donde hayan guardado la llave que creamos anteriormente.

sudo cryptsetup luksAddKey /dev/sdb1 /media/alvaro/PCKEY/pckey.key
Introduzca cualquier contraseña:

Lo siguiente que debemos hacer es guardar el contenido que esta a continuación en un archivos en /etc/init.d/unlock, por ejemplo haciendo sudo nano /etc/init.d/unlock luego copiamos y pegamos esto:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          Unlock
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Unlock daemon
# Description:       Start/stop Unlock
### END INIT INFO

NAME="Unlock"
DESC="Demonio de Unlock"
 
set -e
 
case "$1" in
    start)
        echo -n "Starting ${DESC}: "

        KEYDISK=""
        USBKEY=""
        KEYPATH=""
        KEY=""
        LABEL=""
        DEVICE=""
        MOUNTEDON=""


        if [ -e $USBKEY ];
        then
          { 
            /bin/mount $KEYPATH 
          } || {
            echo "$KEYPATH not mounted."
          }
           
          /bin/mount -o ro /dev/disk/by-uuid/$KEYDISK $KEYPATH
          if [ -f $KEY ];
          then
            /sbin/cryptsetup --key-file $KEY luksOpen $DEVICE $LABEL  
            /bin/mount /dev/mapper/$LABEL $MOUNTEDON
            /bin/mount $KEYPATH
            eject /dev/disk/by-uuid/$KEYDISK
            echo "Listo."
          else
            echo "pckey.key not found"
          fi
        else
        echo "USB drive not found"
        fi
        ;;
   stop)
        echo -n "Stopping $DESC: "
        /bin/umount $MOUNTEDON
        /sbin/cryptsetup luksClose $LABEL
        ;;
    restart|force-reload)
        echo -n "Restarting $DESC: "
        stop
        start
        ;;
    *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
 
exit 0

Ahora debemos cambiar un par de cosas en este script para adaptarlo al pendrive llenando los siguientes valores:

  
        KEYDISK=""
        USBKEY=""
        KEYPATH=""
        KEY=""
        LABEL=""
        DEVICE=""
        MOUNTEDON=""

 

KEYDISK

Ahora debemos aberiguar el UUID de nuestro pendrive mediante el comando blkid, debemos hacerlo con sudo porque si bien como usuario normal también muestra, a veces no muestra todos los datos, en lugar de PCKEY debemos usar el nombre de nuestro pendrive, reitero que en mi caso es PCKEY.

sudo blkid | grep PCKEY
/dev/sde1: LABEL="PCKEY" UUID="94A3-AEC8" TYPE="vfat" PARTUUID="14a91a65-01"

De ahi extraemos el UUID que esta entre comillas y colocamos eso en al script del principio en la variable KEYDISK, el UUID cambia de disco a disco, en su caso sera diferente y por eso debemos buscarlo.

  
        KEYDISK="94A3-AEC8"
        USBKEY=""
        KEYPATH=""
        KEY=""
        LABEL=""
        DEVICE=""
        MOUNTEDON=""

 

USBKEY

Aqui escribimos /dev/disk/by-uuid/94A3-AEC8 cambiando el 94A3-AEC8 por el que obtuvimos en el paso anterior

  
        KEYDISK="94A3-AEC8"
        USBKEY="/dev/disk/by-uuid/94A3-AEC8 "
        KEYPATH=""
        KEY=""
        LABEL=""
        DEVICE=""
        MOUNTEDON=""

 

KEYPATH y KEY

Aqui creamos un directorio donde queremos montar el pendrive de forma automática, por ejemplo ya que en mi caso el pendrive se llama PCKey

sudo mkdir /mnt/PCKey

Por lo tanto en KEYPATH ponemos la ruta de este directorio y en KEY ponemos el nombre de la llave que creamos al principio que fue PCKey.key

  
        KEYDISK="94A3-AEC8"
        USBKEY="/dev/disk/by-uuid/94A3-AEC8 "
        KEYPATH="/mnt/PCKey"
        KEY="pckey.key"
        LABEL=""
        DEVICE=""
        MOUNTEDON=""

 

LABEL, DEVICE y MOUNTEDON

Estos 3 parámetros están relacionados, LABEL es un tema de gusto, aquí podemos poner cualquier cosa realmente ya que sera el nombre que se le dara a la partición descifrada en /dev/mapper y que el script usara parámetros montar, en mi caso lo llame FICHEROS, pero podrían llamarlo como quieran.

El parámetro DEVICE dependerá de su configuración de disco, pero esta debe ser la partición cifrada con luks, que habíamos identificado mas arriba con blkid, ojo que pueden mostrar mas de registro si tienes mas de una partición cifrada con luks.


sudo blkid | grep LUKS
/dev/sda6: UUID="b887d8c2-ebc7-4e9f-8a08-a16f97e2f1df" TYPE="crypto_LUKS" PARTUUID="190c6cf3-01"

 MOUNTEDON es el directorio donde se montara la unidad cifrada una vez que se haya descifrado, puede ser en cualquier ubicación y llamarla como quieran, solo que deben crearla con mkdir.

mkdir /home/alvaro/FICHEROS/  

luego completamos los parámetros y debería quedar algo así:

KEYDISK="94A3-AEC8"
USBKEY="/dev/disk/by-uuid/94A3-AEC8"
KEYPATH="/mnt/PCKey"
KEY="/mnt/PCKey/pckey.key"
LABEL="FICHEROS"
DEVICE="/dev/disk/by-uuid/b887d8c2-ebc7-4e9f-8a08-a16f97e2f1df"
MOUNTEDON="/home/alvaro/FICHEROS/"

Por ultimo solo deberiamos guardar los cambios y ejecutar:

chmod 755 /etc/init.d/unlock
update-rc.d unlock defaults

Si reiniciamos la pc con el pendrive conectado ya debería desbloquear la partición automáticamente, en caso de que no estuviera conectado debería arrancar la pc igualmente pero sin desbloquear la partición obviamente.

4 comments

  1. alvaro gracias por la info ….es aplicable para hacerlo sobre la particion / – lo digo por el tema de que en dos puntos estableces lugares de montaje.

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Alvaro De León

Subscribe now to keep reading and get access to the full archive.

Continue reading