¿Cómo hacer que la suspensión a RAM sea segura en Ubuntu con cifrado de disco completo (LVM sobre LUKS)?

20

Estoy en Ubuntu 13.04 usando cifrado de disco completo (LVM sobre LUKS).

Me gustaría incorporarlo luksSuspendal procedimiento de suspensión (y luego usarlo luksResume) para poder suspenderlo en la RAM sin dejar material clave en la memoria y la raíz desbloqueada.

He intentado durante las últimas 7 horas portar un script para Arch Linux , hasta ahora sin éxito: honestamente, no tengo idea de lo que estoy haciendo ...

¿Alguien puede ayudarme a portar esto (o crear algo como esto desde cero)? O, al menos, ¿alguien puede indicarme documentación sobre cómo conectar cosas a los procedimientos de suspensión y cómo mantener los binarios y scripts necesarios (como cryptsetup) disponibles incluso después de que todo el IO a root haya sido bloqueado (por luksSuspend)?

En cuanto a cómo mantener los binarios y scripts necesarios disponibles para reanudar, esta otra publicación de blog (también para Arch) los copió /boot; Sin embargo, me gustaría usar algo más en las líneas que Vianney usó en el guión que mencioné antes, porque ese enfoque parece ser un poco más elegante en este aspecto.

Jonas Malaco
fuente
Paso algunas horas más en esto ...
Jonas Malaco
Edité los guiones que componen pm-suspendy parecía que estaba casi allí. Sin embargo, descubrí que no puedo simplemente suspender el sistema ( echo -n "mem" > /sys/power/state) después de congelar la raíz fs ( cryptsetup luksSuspend ...), porque eso requiere algo de E / S todavía ...
Jonas Malaco
1
Leí algunas discusiones sobre las listas de Debian (y algunas otras listas que enlazaban o estaban vinculadas a estas) y, hasta ahora, parece que una solución requeriría algo así como un "deinitramfs": el núcleo manejaría el control sobre los deinitramfs justo antes de suspender realmente el sistema, para que este tmpfs pueda realizar las acciones de limpieza final (como borrar la clave de cifrado para los rootfs).
Jonas Malaco
Realmente me gustaría ver respondida esta pregunta también.
BenAlabaster

Respuestas:

3

Me he encontrado con el mismo problema, así que tomé otra oportunidad de portar el mismo script, que puedes ver aquí . No toca ningún almacenamiento no volátil después luksSuspend, por lo que funciona incluso con cifrado de disco completo real con un cifrado / arranque. Sin embargo, deberá tener cuidado: ¡puede que no funcione como se espera ocasionalmente!

El script portado hace lo siguiente:

  • Crea una montura ramfs en alguna parte
  • Extraiga el contenido de initramfs allí (incluido el script de suspensión initramfs)
  • Enlace los directorios relevantes de montaje (p /sys. Ej /proc. /dev, /run) Al montaje ramfs
  • Detenga cualquier servicio que pueda interferir (systemd-udevd, systemd-journald)
  • Vuelva a montar el sistema de archivos raíz (ext4 o btrfs) con nobarrier para que Linux no se bloquee al intentar entrar en S3, luego sincronice
  • Conéctate al soporte initramfs, que se sincroniza nuevamente, se ejecuta luksSuspendy pone la computadora en suspensión
  • Después de la luksResumeactivación, vuelva a montar los sistemas de archivos, reinicie los servicios, desmonte los montajes de enlace en el montaje initramfs
  • Finalmente, desmonte el montaje initramfs para liberar la RAM utilizada para los archivos initramfs

Todavía tengo que hacer pruebas exhaustivas en mi script, pero parece funcionar de manera confiable para mí. Si usa otro sistema de archivos (es decir, no ext4 o btrfs), puede experimentar problemas con la barrera, por lo que también deberá modificar el script.

De cualquier manera, es bueno probar y verificar que los scripts funcionen primero. Si experimenta bloqueos al intentar poner Linux en S3 (es decir, en echo mem > /sys/power/state), entonces debería poder recuperar:

  • Antes de suspender, abra un tty u otro terminal (que será accesible, idealmente un tty)
  • Cargue cryptsetup y las bibliotecas relevantes en la RAM: sudo cryptsetup luksResume anything_here
  • Suspender usando el script
  • Si se cuelga después del chroot (por ejemplo, después starting version xxxse muestra en el nuevo vt), cambie al tty que abrió anteriormente y ejecutesudo cryptsetup luksResume your_luks_device_name_here
  • Si eso también se bloquea, abra otro vt y haga un chroot en /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Intenta correr luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Su computadora debería suspenderse. Luego puede activarlo, eliminar los scripts si aún se están ejecutando, desmontar los montajes de enlace /run/initramfsy volver a montar su sistema de archivos raíz con barrera si corresponde.
Zhongfu
fuente
1

No tengo experiencia con esta configuración, pero muchas personas afirman tener éxito en esto. Aquí hay un par de ellos.

dm-crypt con LUKS - Cifrado de la partición de intercambio
Cómo: Disco duro completamente encriptado, incluida la partición de suspensión en disco con Ubuntu 6.10 Edgy Eft
ubuntu-full-disk-encryption-lvm-luks

Sin embargo, ninguno de ellos usa luksSuspend (que podría ser la razón por la que funcionan).

harrymc
fuente
Gracias por los enlaces ... Estoy usando una configuración similar al último enlace (generado automáticamente por el instalador 13.04).
Jonas Malaco
Sin luksSuspend hasta ahora, debe apagarse para borrar las claves de la memoria ... Sin embargo, ¡gracias por los enlaces! Tal vez al comprender cómo configurar esto manualmente puedo obtener una idea de cómo usar luksSuspend para suspender a ram.
Jonas Malaco
1
luksSuspend parece extremadamente difícil de usar. Como congela todas las E / S, se necesita un script de suspensión muy acrobático. Solo pude encontrar una historia de éxito en alemán que se puede (mal) traducir al inglés . Intenta usarlo como plantilla.
harrymc
2
Es posible que también necesite usar un disco ram y una criptografía estática.
harrymc
1

Pasé algún tiempo haciendo esto completamente funcional en Ubuntu 15.10. Si intenta hacer que esto funcione en ext2, ext3 o ext4, deberá actualizar / etc / fstab para montar el volumen con la opción 'nobarrier'. De lo contrario, sugiero usar BTRFS.

Una vez que su sistema de archivos esté preparado, use el script aquí: https://github.com/Microcentillion/ubuntu-lukssuspend

usuario569427
fuente