Tengo un sistema Linux que se ejecuta en un proveedor en la nube donde creé un contenedor cifrado utilizando LUKS para almacenar datos personales.
El contenedor cifrado se monta manualmente en /srv
; el resto del sistema no está encriptado para que el servidor y especialmente el demonio ssh se inicien automáticamente al iniciar el sistema.
En este momento, si el servidor se reinicia (debido a una actualización que requiere un reinicio o porque el sistema host donde se ejecuta el droplet requirió un reinicio) necesito abrir manualmente el contenedor LUKS e iniciar los servicios que almacenan datos en el partición encriptada (dovecot, mysql etc.). Por supuesto, esta es la consecuencia lógica de tener una partición encriptada. Pero me preguntaba si puedo automatizar esto de manera segura.
No quiero almacenar la frase de contraseña en el servidor por razones obvias. Así que escribí un pequeño script que se ejecuta en una Raspberry Pi en casa: Entra cada 5 minutos en el servidor y comprueba si el dispositivo Loopback está montado. Si no, monta el contenedor (líneas relevantes del script, esto solo se ejecuta si no se monta /srv
):
# Mount Srv Container
ssh root@<ip> "echo -n '*** my passphrase ***' | cryptsetup luksOpen /root/srv_container_file container -"
ssh root@<ip> "mount -t ext4 /dev/mapper/container /srv"
# Start Services that store data on /srv
# ...
El enfoque funciona pero se siente super hacky. No estoy seguro de si las conexiones constantes, también conocidas como comprobación activa, son una buena idea y tampoco estoy seguro de si me estoy abriendo a las vulnerabilidades haciendo eco de mi frase de contraseña en cryptsetup
.
Por lo tanto, mi pregunta:
¿Cuál es una manera buena / estándar de abrir automáticamente el contenedor LUKS sin almacenar mi frase de contraseña en el servidor y sin abrir mi sistema a vulnerabilidades (en comparación con abrir el contenedor manualmente)? Las referencias a la documentación oficial son muy bienvenidas.
¿De qué estoy tratando de protegerme?
- No sé cómo el proveedor de la nube maneja los discos viejos y / o defectuosos. No quiero que nadie lea mis datos de los discos físicos o las copias de seguridad realizadas por mi proveedor de la nube.
-
No sé si la imagen de mi disco se transfiere al almacenamiento físico (según los documentos de mi proveedor, se almacena de forma redundante), por lo que no quiero que nadie que tenga acceso a esos bloques después de mí Ser capaz de restaurar los datos.
-
Sé que una vez que un atacante tiene acceso de shell a mi sistema en ejecución, se termina el juego porque la partición está abierta y no se necesita una frase de contraseña.