¿Cómo se puede desbloquear un sistema Ubuntu 11.10 completamente encriptado a través de SSH en el arranque?

8

En versiones anteriores de Ubuntu y versiones actuales de Debian, puede desbloquear un sistema completamente encriptado (usando dmcrypt y LUKS) en el momento del arranque a través de SSH.

Fue tan fácil como:

  1. Instalar el sistema encriptado utilizando el disco instalador alternativo de Ubuntu o el disco instalador normal de Debian y elegir encriptar el sistema.
  2. Después de instalar el sistema, agregue los paquetes dropbear y busybox.
  3. Actualización de initram-fs para autorizar su clave ssh.

En el momento del arranque, simplemente ssh a la máquina y hacer:

echo -ne "keyphrase" > /lib/cryptsetup/passfifo

La máquina luego desbloqueará y arrancará el sistema encriptado.

Utilizando exactamente los mismos pasos en Ubuntu 11.10, puedo enviar ssh a la máquina, pero /lib/cryptsetup/passfifono existe.

Parece que no hay forma de desbloquear el sistema a través de ssh. No estoy seguro de dónde mirar para ver si esta funcionalidad cambió o si se eliminó.

Jeff
fuente
En un sistema que funcionaba a la antigua usanza, ¿puedes hacerlo dpkg -S /lib/cryptsetup/passfifo? No puedo encontrar ningún paquete en packages.ubuntu.com para Natty o Maverick que contenga este archivo.
maco

Respuestas:

4

Acabo de buscar en Google y parece que Plymouth se interpone en el camino. Si plymouth está allí, en el arranque, cryptsetup le pedirá a plymouth la contraseña y eso significa que no está usando passfifo.

La mejor solución parece ser poner el siguiente script en el directorio /usr/share/initramfs-tools/hooks/Después de haberlo puesto allí, puede hacerlo chmod +xy luego debe hacerlo update-initramfs -u. Entonces debería poder usar el unlockcomando (que se crea mediante el script a continuación).

Esto depende de que use una clave ssh para iniciar sesión. Si desea utilizar una contraseña, debe SSHUSERPASS=<username>ingresar/etc/initramfs-tools/initramfs.conf

#!/bin/sh

PREREQ="dropbear"

prereqs() {
    echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
    ;;
esac

. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions

if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
    cat > "${DESTDIR}/bin/unlock" <<-EOF
        #!/bin/sh
        if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot
        then
            /sbin/pkill cryptroot
            /sbin/pkill -f "plymouth ask-for-pass"
            /sbin/pkill cryptsetup
            exit 0
        fi
        exit 1
    EOF
    chmod 755 "${DESTDIR}/bin/unlock"

    mkdir -p "${DESTDIR}/lib/unlock"
    cat > "${DESTDIR}/lib/unlock/plymouth" <<-EOF
        #!/bin/sh
        [ "\$1" == "--ping" ] && exit 1
        /bin/plymouth "\$@"
    EOF
    chmod 755 "${DESTDIR}/lib/unlock/plymouth"

    # Enable password login
    if [ -n "$SSHUSERPASS" ]
    then
        sed -n "s/^${SSHUSERPASS}:/root:/p" /etc/shadow > "${DESTDIR}/etc/shadow"
        chmod 640 "${DESTDIR}/etc/shadow"
    fi
fi

Puede leer más en esta publicación en los foros de ubuntu , este error de launchpad y la publicación alemana de la que extraje la mayor parte de esto .

Hamish Downer
fuente
1

hasta que se resuelva este error , puede intentar matar primero a plymouth. Desafortunadamente, no hay una manera fácil de determinar el PID de plymouthd. Pero Plymouth sabe cómo dejarlo :-) Entonces, lo siguiente debería ser suficiente.

plymouth --quit; echo -ne "keyphrase" > /lib/cryptsetup/passfifo

Frederick Nord
fuente