¿Cómo configurar LVM y LUKS para descifrar automáticamente la partición?

21

Recientemente instalé ubuntu server 11.04 con el cifrado lvm completo (instalado desde la configuración). Ahora deseo usar un archivo de clave para hacer el desbloqueo automático. He intentado seguir esta guía http://ubuntuforums.org/showthread.php?t=837416

Genere una clave con este comando: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

Lo puse /boot/grubporque creo que no está encriptado. Cuando trato de agregar la clave con este comando sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile , me pide la frase de contraseña y cuando la pongo no pasa nada, ¡no se imprime nada en la pantalla! Lo ignoro y continúo con los otros pasos y reinicio, pero no pasó nada y pide la frase de contraseña.

Gracias por la ayuda .

isoman
fuente
¿Te refieres a descifrar sin ingresar una frase de contraseña? Si el proceso de arranque pudiera hacer eso, entonces las claves necesarias para descifrar el volumen tendrían que estar en el sistema en algún lugar accesible durante el arranque. ¿Cómo esperarías que eso te proteja del robo de datos?
James Henstridge
Sí, creo que pondré la clave en una partición oculta o en una unidad flash USB. Es eso posible ?
isoman
El problema es que si el gestor de arranque puede localizar la clave, entonces alguien que inspeccione el código de arranque (sin cifrar) también podrá localizarla. Si almacena la llave en una memoria USB, querrá estar seguro de que la computadora no la robará. Si solo va a enchufar el dispositivo durante el arranque, entonces no es más conveniente que ingresar una frase de contraseña.
James Henstridge
Cómo detener la descodificación automática
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

27

Acabo de pasar por esto en mi nuevo servidor doméstico, me tomó mucho tiempo buscar en Google y adivinar, pero lo tengo funcionando. Intentaré reproducir los pasos aquí. Estoy usando Ubuntu Server 11.10, y comencé con una instalación bastante estándar usando LVM encriptado, así que solo relataré los cambios que hice desde allí.

Preparar:

  • / dev / sda1 es mi partición / boot no cifrada
  • / dev / sda5 es mi partición lvm que contiene todo lo demás: root, swap y home
  • / dev / sdc1 es la partición en mi unidad flash USB donde almacenaré el archivo de claves

Primero, creé un archivo de claves, solo en mi directorio de inicio:

dd if=/dev/urandom of=keyfile bs=512 count=4

(puede usar un tamaño de bloque más grande o contar para una clave más grande)

Dígale a cryptsetup la nueva clave (lo importante son los contenidos, no el nombre de archivo):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

Luego, formateé mi unidad flash USB con ext2 y le di una etiqueta. Usé una etiqueta, para luego poder montarla por etiqueta y reemplazar la unidad flash USB en caso de que algo salga mal.

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(por supuesto, su dispositivo variará)

Ahora, copie el archivo de claves en la unidad flash USB, propiedad del modo raíz 400:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

Modifique / etc / crypttab. La mía contenía originalmente

sd5_crypt UUID=(...) none luks

que cambié a

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

Finalmente, actualice los initramfs:

sudo update-initramfs -uv

Ahora se inicia utilizando el archivo de claves en la unidad flash USB. Si quito la unidad flash (por ejemplo, cuando me voy de vacaciones) no se inicia y mis datos están seguros.

Si alguien sabe cómo hacer que pida la frase de contraseña si falta la unidad flash USB, sería útil como alternativa. Espero que esto ayude, cualquier adición o corrección sería más que bienvenida.

Randy Orrison
fuente
3
Si no está seguro de cómo obtener una solicitud de contraseña, puede usar una partición de arranque en la unidad flash para cargar a través de un initramfs alternativo que busca un archivo de claves y hacer que el arranque predeterminado en el disco duro cargue un initramfs regular que solicite una contraseña.
Restablece a Monica - ζ--
1
@ 3pic No estoy 100% seguro desde que hice esto hace varios meses. Pero Ubuntu arranca en un sistema de archivos virtual. keyscript=/lib/cryptsetup/scripts/passdevle agrega passdevscript. Y luego update-initramfs -uvreconstruye el archivo del sistema de archivos.
VarunAgw
1
@RandyOrrison, esto es realmente genial. Funciona. Pero ... después de pasar initram, se sienta durante un minuto o dos minutos con A start job is running for dev-sda8:-keyfile.device (1min 18s...)etc. Pasa, todo está montado, pero se cuelga por un tiempo. El registro dice "Se agotó el tiempo de espera para el dispositivo dev-sda8: -sda7keyfile.device; la dependencia falló en la configuración de Crypto para sda7crypt". Por supuesto, ya lo montó initram, pero ... ¿Qué estoy haciendo mal?
deitch
1
Por alguna razón, parece que no le gusta / funciona con systemd; simplemente ignorará el keyscriptcampo por completo.
Etienne Bruines
1
En Ubuntu 17.10+, la herramienta update-initramfs no generará una imagen initramfs capaz de iniciar un volumen luks si su sistema de archivos raíz está en un volumen luks y tiene un archivo clave. Puede hacerlo funcionar dejando "none" como el valor del archivo de claves y configurando las opciones para tener keyscript = / etc / my-keyscript, donde / etc / my-keyscript es un script de shell que imprime la clave.
Macil el
6

Estas instrucciones de howtoforge.com me pusieron en marcha con un volumen de descifrado automático.

Cómo: Desbloquear automáticamente unidades cifradas LUKS con un archivo clave

Paso 1: crear un archivo de claves aleatorio

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

Paso 2: haga que el archivo de claves sea de solo lectura para rootear

sudo chmod 0400 /root/keyfile

Eso hará que el archivo de claves sea legible solo por root. Si alguien tiene acceso a este archivo de claves, de todos modos tiene un problema mayor en su computadora.

Alternativamente, cree el archivo de claves deseado en root: root y muévalo a la carpeta / root

Paso 3: agregue el archivo de claves a LUKS

Los dispositivos habilitados con LUKS / dm_crypt pueden contener hasta 10 archivos de claves / contraseñas diferentes. Entonces, además de tener la contraseña ya configurada, agregaremos este archivo de claves como método de autorización adicional.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

SDX es, por supuesto, su dispositivo LUKS.

Primero se le pedirá que ingrese una contraseña (existente) para desbloquear la unidad. Si todo funciona bien, debería obtener una salida como esta:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

Paso 4: crea un mapeador

Los dispositivos LUKS necesitan crear un mapeador al que luego se pueda hacer referencia en el fstab. Abra / etc / crypttab

sudo nano /etc/crypttab

y luego agregue una línea como esta:

sdX_crypt      /dev/sdX  /root/keyfile  luks

o puede usar el UUID del dispositivo:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt es el nombre del mapeador que se está creando. Puede usar aquí cualquier nombre, por ejemplo, "música" o "películas" o "sfdsfawe" ...

Guarde y cierre el archivo emitiendo ctrl-x, enter, enter. Ctrl-x cierra nano pero primero pide guardar el archivo [yes = enter] y cuál será el nombre [mismo nombre = enter].

Lo que hemos hecho allí es decir que se usará / root / keyfile en lugar de la entrada de contraseña para desbloquear el disco.

Paso 5: monte el dispositivo en fstab

Ahora, tenemos un dispositivo desbloqueado (bueno, todavía no, pero cuando el sistema se está iniciando) y solo necesitamos montarlo ahora. Abra / etc / fstab:

sudo nano /etc/fstab

y agregue una nueva entrada como:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

Asegúrese de tener el nombre de mapeador correcto que agregó en el paso 4. También asegúrese de que exista el punto / carpeta de montaje. Después de haberlo agregado, guarde nuevamente el archivo y ciérrelo (ctrl-x, enter, enter).

Paso 6: reiniciar o volver a montar

Eso es. Ahora puede reiniciar y los dispositivos adicionales deben desbloquearse y montarse automáticamente. También puede probarlo al volver a montar todos los dispositivos:

sudo mount -a
El chico nuevo
fuente
1
te olvidas de actualizar initramfs, 100% necesario
3pic
6

Mejorando la respuesta de Randy Orrison , aquí hay un pequeño script que creé, que hará que el sistema recurra a pedirle una contraseña al usuario si no encuentra el archivo de claves.

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

Guardar y reemplazarlo keyscript=/lib/cryptsetup/scripts/passdeven /etc/crypttabla ruta a este archivo y correr sudo update-initramfs -uvy ya está.

VarunAgw
fuente
Supongo que su solución no funciona para la unidad usb para más de un archivo de claves. Quiero decir si tengo más de una partición encriptada (inicio, intercambio, raíz). Parece que no desmonta el controlador USB después del comando cat. ¿Tienes alguna idea de cómo solucionarlo?
Khamidulla
Esto funciona para mí (Xubuntu 17.10) pero tuve que editar grub y eliminar "splash". También tuve que guardar el archivo en una ubicación adecuada (/ lib / cryptsetup / scripts / unlock_custom) y modificarlo 755. No estoy seguro de si las salpicaduras o copias en el lugar específico lo hicieron funcionar para mí, pero no funcionó antes. De todos modos, funciona pero en el arranque, después de Startet AppArmor initialization.obtener: Se está ejecutando un trabajo de inicio para dev-disk keyfile.device (1m 30s). Después de los años 90 se inicia X y puedo usar mi sistema ... ni idea de cómo solucionar este problema petición de Stop ...
firepol
1

@deitch Tuve la misma configuración que @Randy Orrison y me encontré con el mismo problema que tú y resulta que es un error de systemd que intenta montar el sistema de archivos / nuevamente cuando encuentra la entrada correspondiente en / etc / crypttab.

Para resolver esto, simplemente eliminé la entrada para sda5_crypt de / etc / crypttab una vez que se ejecutó el comando update-initramfs -uv.

Reiniciar y todo funciona bien según lo previsto.

mukul kirtane
fuente