Hacer que lsinitramfs arranque en un sistema de archivos cifrado

Hacer que lsinitramfs arranque en un sistema de archivos cifrado

seguí las instruccionesaquí. He estado usando el LiveCD y por mi vida no puedo persuadir a Ubuntu para que cree un archivo initramfs que esté dispuesto a descifrar mi sistema de archivos LUKS. No tengo problemas para pasar GRUB.

¿Ayuda? Pero tengo la sensación de que podemos hacer que esto funcione.

Cuando llego a la etapa initramfs, puedo ejecutar cryptsetup pero aparece este mensaje de error:

device-mapper: table: 252:0 crypt error allocating tfm

También recibí un mensaje que decía "Compruebe que el kernel admita el cifrado aes-xts-plain64".

Respuesta1

¡Bien, lo descubrí!

Adapté esta guía, principalmente agregando cosas hasta que funcionó:

https://help.ubuntu.com/community/EncryptedFilesystemOnIntrepid

Modifiqué un poco los archivos de esa guía, pero por lo demás la seguí.

Por si acaso, agregué estas líneas modprobe a /etc/initramfs-tools/scripts/local-top/cryptoroot:

modprobe -q dm_crypt
modprobe -q sha256_generic
modprobe -q sha256
modprobe -q aes_generic
modprobe -q aes
modprobe -q cbc
modprobe -q xts
modprobe -q aes
modprobe -q aes_x86_64

Lo que da:

    PREREQ="udev"

prereqs()
{
        echo "$PREREQ"
}

case $1 in
# get pre-requisites
prereqs)
        prereqs
        exit 0
        ;;
esac
#This line from the Encrypted Entrepid tutorial didn't work for me
#/bin/loadkeys -q /etc/console-setup/boottime.kmap.gz
modprobe -q dm_crypt
modprobe -q sha256
modprobe -q sha256_generic
modprobe -q aes_generic
modprobe -q aes
modprobe -q cbc
modprobe -q xts
modprobe -q aes
modprobe -q aes_x86_64    
# The following command will ensure that the kernel is aware of
# the partition before we attempt to open it with cryptsetup.
/sbin/udevadm settle

if grep -q splash /proc/cmdline; then
    /bin/chvt 1
fi
/sbin/cryptsetup luksOpen CRYPTOROOT cryptoroot
if grep -q splash /proc/cmdline; then
       /sbin/usplash -c &
       sleep 1
fi

Para el archivo anterior (local-top), es necesario cambiar la línea CRYPTROOT.

Usé un archivo de claves, por lo que mi línea se veía así:

/sbin/cryptsetup luksOpen /dev/disk/by-uuid/xxxx --key-file /my_keyfile.bin cryptoroot

El archivo de claves no es necesario. El luksHeader se puede abrir con una contraseña (simplemente elimine la opción de archivo de claves). Dicho esto, si incluye el archivo, no use /dev/sdXy.

A /etc/initramfs-tools/hooks/cryptoroot acabo de agregar estas líneas:

# Comment out this line
# cp /etc/console-setup/boottime.kmap.gz ${DESTDIR}/etc/console
# If you add a key-file
# cp /my_keyfile.bin ${DESTDIR}/
copy_exec /bin/loadkeys /bin
copy_exec /bin/chvt /bin
copy_exec /sbin/cryptsetup /sbin
copy_exec /sbin/blkid /sbin
copy_exec /sbin/lsmod /sbin
copy_exec /sbin/cat /sbin
copy_exec /sbin/dmsetup /sbin

Lo que da:

PREREQ=""

prereqs()
{
        echo "$PREREQ"
}

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

if [ ! -x /sbin/cryptsetup ]; then
        exit 0
fi

. /usr/share/initramfs-tools/hook-functions

# Comment out this line
# cp /etc/console-setup/boottime.kmap.gz ${DESTDIR}/etc/console
    # If you add a key-file
    # cp /my_keyfile.bin ${DESTDIR}/
    copy_exec /bin/loadkeys /bin
    copy_exec /bin/chvt /bin
    copy_exec /sbin/cryptsetup /sbin
    copy_exec /sbin/blkid /sbin
    copy_exec /sbin/lsmod /sbin
    copy_exec /sbin/cat /sbin
    copy_exec /sbin/dmsetup /sbin

Además, todos estos archivos deben marcarse como ejecutables.

chmod +x /etc/initramfs-tools/hooks/cryptoroot
chmod +x /etc/initramfs-tools/scripts/local-top/cryptoroot

Agregue estos a /etc/initramfs-tools/modules:

dm_mod
dm_crypt
sha256_generic
sha256_ssse3
aes_generic
cbc
aes_x86_64
xts

¡Fue relativamente fácil!

Ejecute update-initramfs -u -k all

Luego necesitamos crear una entrada GRUB personalizada en mi caso porque os-prober no detectará un sistema de archivos en BTRFS. La entrada del arco ayudará allí.

Así es como se ve el mío:

menuentry "System shutdown" {
        echo "System shutting down..."
        halt
}

menuentry "System restart" {
        echo "System rebooting..."
        reboot
}    

menuentry 'Ubuntu Linux try 1' --class arch --class gnu-linux --class gnu --class os {
    load_video
     set gfxpayload=keep
     insmod gzio
     insmod part_msdos
     insmod cryptodisk
     insmod luks
     insmod gcry_rijndael
     insmod gcry_sha256
     insmod btrfs
     insmod ext2
     cryptomount -u [UUID of sdXY]
     set root='cryptouuid/[UUID of sdXY]'
     if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='cryptouuid/[UUID of sdXY]'  [UUID of /dev/mapper/cryptoroot]
     else
      search --no-floppy --fs-uuid --set=root [UUID of /dev/mapper/cryptoroot]
     fi
     echo    'Loading Linux linux-lts ...'
     #I use btrfs so...
     linux    btrfs path    root=UUID=[UUID of /dev/mapper/cryptoroot] rw rootflags=subvol=/btrfs/path/to/root cryptdevice=/dev/disk/by-uuid/[UUID of sdXY]':cryptroot quiet modprobe.blacklist=pcspkr profile
     echo    'Loading initial ramdisk ...'
     initrd  path/initrd.img
    }

    ##I was able to boot without this kernel option but some guides suggested it: ##cryptopts=target=cryptrootname,source=/dev/sdXY

Es oficial: ¡Ubuntu puede iniciarse en el sistema de archivos cifrados de Arch! Busqué mucho en Google y no estoy seguro de que alguien más haya descifrado este, al menos no en algunos años.

información relacionada