Los dispositivos USB son extremadamente prácticos, pero también son muy fáciles de perder. Si tus datos no están cifrados, cualquiera podría acceder a ellos.
Esta guía te enseñará a:
- Cifrar todo el pendrive con LUKS (AES-256).
- Crear una carpeta cifrada con VeraCrypt dentro del pendrive para doble capa de seguridad.
- Usar un script automatizado para montar/desmontar.
- Configurar cron para desmontar automáticamente si el pendrive queda montado.
Cifrar completamente el pendrive con LUKS
Advertencia: Esto borrará todos los datos del pendrive. Haz una copia de seguridad.
Identificar el dispositivo USB
Conecta el pendrive y ejecuta:
lsblk
sdd 8:48 1 28.9G 0 disk
└─sdd1 8:49 1 28.9G 0 part
Borrar cualquier rastro previo
sudo wipefs --all /dev/sdd
sudo dd if=/dev/zero of=/dev/sdd bs=1M status=progress
Cifrar la partición con LUKS
sudo cryptsetup luksFormat /dev/sdd1
Confirma con
YESy usa una contraseña fuerte.
(Opcional) Hacer copia de seguridad de la cabecera LUKS
sudo cryptsetup luksHeaderBackup /dev/sdd1 --header-backup-file /media/usuario/DATOS/backup_pendrive
Abrir el volumen LUKS
sudo cryptsetup luksOpen /dev/sdd1 pendrive
Esto creará
/dev/mapper/pendrive.
Crear sistema de archivos
sudo mkfs.ext4 /dev/mapper/pendrive
Montar el volumen LUKS
sudo mkdir -p /media/pendrive
sudo mount /dev/mapper/pendrive /media/pendrive
Crear una carpeta cifrada con VeraCrypt
Descargar e instalar VeraCrypt
Dado que VeraCrypt no suele estar en los repositorios principales, se requiere la descarga manual. Asegúrate de instalar la versión de consola (-console) si solo necesitas el script.
wget https://launchpad.net/veracrypt/trunk/1.26.24/+download/veracrypt-console-1.26.24-Debian-13-amd64.deb
sudo apt install ./veracrypt-console-*.deb
Crear un contenedor cifrado
Navega al volumen LUKS montado y crea el archivo contenedor. Se recomienda una contraseña diferente a la de LUKS.
cd /mnt/pendrive
veracrypt --text --create seguro.vc \
--size 2G \
--encryption AES \
--hash SHA-512 \
--volume-type normal \
--filesystem ext4 \
--pim 0 \
--random-source /dev/urandom
Explicación:
seguro.vc→ nombre del contenedor.- encryption AES → cifrado AES-256
- hash SHA-512 →hash para derivar la clave
- filesystem ext4 → sistema de archivos interno
- pim 0 → sin retardo adicional
Montar el contenedor
sudo mkdir -p /mnt/secure
veracrypt --text --mount /mnt/pendrive/seguro.vc /mnt/secure --protect-hidden=no
–protect-hidden=no evita la pregunta de volumen oculto.
/mnt/secure será la carpeta cifrada.
Desmontar contenedor y LUKS
veracrypt -d /mnt/secure
sudo umount /mnt/pendrive
sudo cryptsetup luksClose pendrive
Script automático para montar/desmontar
Hemos mejorado el script para que maneje fallos de desmontaje (umount -l) y limpie los mapeos de VeraCrypt que quedan pendientes, lo que resolvió los problemas de «dispositivo ocupado».
Crea el script en /usr/local/bin/pendrive_secure.sh:
#!/bin/bash
# ===============================================================
# Script: pendrive_secure.sh
# Monta o desmonta un pendrive cifrado LUKS + contenedor VeraCrypt
# ===============================================================
# CONFIGURACIÓN
DEVICE="/dev/sdd1" # Cambia según tu USB
MAPPER_NAME="pendrive"
MOUNT_POINT="/media/pendrive"
SECURE_POINT="/media/secure"
VC_FILE="$MOUNT_POINT/seguro.vc"
# COMPROBACIÓN DE ROOT
if [ "$EUID" -ne 0 ]; then
echo "Debe ejecutarse como root o sudo."
exit 1
fi
# FUNCIÓN DE MONTAJE
montar() {
# Abrir LUKS si no está abierto
if [ ! -e "/dev/mapper/$MAPPER_NAME" ]; then
echo "Abriendo volumen LUKS..."
if ! cryptsetup luksOpen "$DEVICE" "$MAPPER_NAME"; then
echo "Error al abrir LUKS"
exit 1
fi
else
echo "LUKS ya abierto, saltando..."
fi
# Crear directorio de montaje
mkdir -p "$MOUNT_POINT"
# Verificar filesystem, crear si no existe
FS_TYPE=$(blkid -o value -s TYPE "/dev/mapper/$MAPPER_NAME")
if [ -z "$FS_TYPE" ]; then
echo "Creando filesystem ext4 en LUKS..."
mkfs.ext4 "/dev/mapper/$MAPPER_NAME"
fi
# Montar LUKS
echo "Montando LUKS en $MOUNT_POINT..."
if ! mount "/dev/mapper/$MAPPER_NAME" "$MOUNT_POINT"; then
echo "Error al montar LUKS"
cryptsetup luksClose "$MAPPER_NAME"
exit 1
fi
# Montar VeraCrypt si existe
if [ -f "$VC_FILE" ]; then
mkdir -p "$SECURE_POINT"
echo "Montando contenedor VeraCrypt..."
if ! veracrypt --text --mount "$VC_FILE" "$SECURE_POINT" --protect-hidden=no; then
echo "Error al montar VeraCrypt"
umount "$MOUNT_POINT"
cryptsetup luksClose "$MAPPER_NAME"
exit 1
fi
echo "LUKS y VeraCrypt montados correctamente"
else
echo "No se encontró $VC_FILE. Solo LUKS montado."
fi
}
# FUNCIÓN DE DESMONTAJE
desmontar() {
echo "Desmontando..."
if mountpoint -q "$SECURE_POINT"; then
veracrypt -d "$SECURE_POINT"
fi
if mountpoint -q "$MOUNT_POINT"; then
umount "$MOUNT_POINT"
fi
if [ -e "/dev/mapper/$MAPPER_NAME" ]; then
cryptsetup luksClose "$MAPPER_NAME"
fi
echo "Pendrive desmontado y cerrado"
}
# DETECCIÓN AUTOMÁTICA
if mountpoint -q "$SECURE_POINT" || mountpoint -q "$MOUNT_POINT"; then
desmontar
else
montar
fi
Dale permisos:
sudo chmod +x /usr/local/bin/pendrive_secure.sh
Automatizar desmontaje con cron
Añade una tarea a cron para que el script se ejecute periódicamente, desmontando automáticamente si detecta que la unidad está montada.
*/30 * * * * /usr/local/bin/pendrive_secure.sh >> /var/log/pendrive_secure.log 2>&1
Explicación:
*/30 * * * *: Ejecuta el script cada 30 minutos.
>> /var/log/pendrive_secure.log 2>&1: Redirige tanto la salida estándar como los errores a un archivo de registro para su revisión.
:wq!