Solicitar contraseña durante el arranque con el servicio systemd

16

Esto es relevante para Arch Linux (y quizás otras distribuciones usando systemd). Quiero montar una partición TrueCrypt en el arranque. Con el viejo sysvinit, esto era bastante sencillo con un guión llamado por rc.local.

Llegué a mi corriente secuestrando un hilo del foro de Arch . Hay otro hilo en el que se habla de este hilo de desarrollo del sistema como "tener la solución", sin embargo, no es evidente para mí lo que realmente es, y el OP tiene el último mensaje que indica que no pudo lograr su objetivo.

Por lo que parece, esta persona lo está haciendo, pero estaba buscando una manera de desactivar los mensajes de arranque continuos mientras escribe la contraseña. Publiqué allí también pidiéndole que publique su .servicearchivo real .

Al buscar un poco, las personas mencionan que han tenido éxito o que es posible, pero no explican exactamente cuál fue la solución.

Estoy tan lejos como para poder desbloquear la partición desde la línea de comandos a través de un systemdservicio (que a su vez me da la capacidad de desmontarla automáticamente al apagar / reiniciar), pero tengo que hacerlo manualmente una vez que inicie sesión. Realmente me gusta que el proceso de arranque se detenga y me pida la contraseña.

Aquí está mi script actual:

[Unit]
Description=Truecrypt Setup for vault
#DefaultDependencies=no
#Conflicts=umount.target
#Before=umount.target
#After=systemd-readahead-collect.service systemd-readahead-replay.service
#After=cryptsetup.target

[Service]
Type=oneshot
RemainAfterExit=yes
#StandardInput=tty-force
ExecStart=/bin/sh -c '/usr/bin/truecrypt -t --protect-hidden=no -k "" --filesystem=none --slot=1 -p `systemd-ask-password "Enter password for truecrypt volume: "` /dev/sda4'
ExecStop=/usr/bin/truecrypt --filesystem=none -d /dev/sda4

[Install]
WantedBy=multi-user.target

Dejé las cosas comentadas [Unit], ya que en algún momento me encontré con sugerencias de que debería estar allí, pero tuve problemas con eso. Lo anterior parece funcionar bien después de arrancar / iniciar sesión ... pero no durante.

Hendy
fuente
Según tengo entendido, si no desea ser interrumpido por los mensajes de registro, debe crear una barrera en el archivo de la unidad, lo que significa que requerirá que todos los servicios se inicien antes de que finalice (inicialización) y se bloqueará cualquier servicio que se ejecute después. ¿Es eso lo que estás tratando de lograr?
Peter
@peterph No creo que importe siempre que lo que TrueCrypt requiera se esté ejecutando para cuando reciba el mensaje. Otras cosas no dependen de esto, ya que es solo un volumen para almacenar archivos; por lo tanto, otras cosas podrían cargarse en segundo plano mientras ingreso la contraseña. En este momento, espero iniciar sesión, luego comienzo manualmente con sudo systemctl start truecrypt-vault, ingrese la sucontraseña, ingrese la contraseña de TC Volume, luego startx. ¿Seguramente podría recibir el mensaje de contraseña durante el arranque para evitar los pasos adicionales después de iniciar sesión?
Hendy
Ese era mi punto y el suyo también (incluso en el tema de la pregunta): obtener la solicitud de contraseña durante el arranque. Si no está utilizando un arranque gráfico como plymouth, es probable que cualquier solicitud de contraseña en la consola se pierda en los servicios que comienzan en paralelo.
Peter
Oh. Pensé que me estaba preguntando si necesito suspender los servicios después o asegurarme de que todos los servicios anteriores hayan comenzado ... No estoy seguro e intenté responder lo mejor que pude. Solo inicio al nivel de ejecución 3 con un inicio de sesión de texto y startxmanualmente. Sin administrador de inicio de sesión. Pero sí, lo hago necesidad de detener los mensajes de arranque, mientras que entro en el texto, de lo contrario sólo va a desaparecer de la pantalla.
Hendy
8
Bueno, systemdtiene un agente que puede solicitar una contraseña, por lo que puede mirar en esa dirección.
Peter

Respuestas:

2
  • Escriba un script de envoltura y póngalo en ExecStart=
  • Desde el script de envoltura, use systemd-ask-password <PROMPT>, lea la contraseña de su stdout y aliméntela a truecrypt de la manera que sea necesaria
  • No te olvides de execencriptar desde el final de tu script para no dejar un proceso de bash extra dando vueltas

Esto hará que systemd consulte la contraseña de inmediato (si inicia apache usando systemctl) o usando uno de los llamados agentes (hay algunos predeterminados que solicitan contraseñas usando wall o directamente en la consola durante el arranque del sistema). Esto es lo mejor que puede hacer para cumplir.

intelfx
fuente