So booten Sie lsinitramfs in ein verschlüsseltes Dateisystem

So booten Sie lsinitramfs in ein verschlüsseltes Dateisystem

Ich habe die Anweisungen befolgtHier. Ich habe die LiveCD verwendet und kann Ubuntu beim besten Willen nicht dazu überreden, eine initramfs-Datei zu erstellen, die mein LUKS-Dateisystem entschlüsseln könnte. Ich komme problemlos über GRUB hinaus.

Hilfe? Ich habe das Gefühl, dass wir das hinbekommen.

Wenn ich zum Initramfs-Stadium komme, kann ich Cryptsetup ausführen, erhalte jedoch diese Fehlermeldung:

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

Ich habe außerdem die Meldung „Überprüfen Sie, ob der Kernel die AES-XTS-Plain64-Verschlüsselung unterstützt“ erhalten.

Antwort1

OK, ich habe es herausgefunden!

Ich habe diese Anleitung angepasst und im Wesentlichen nur Dinge hinzugefügt, bis es funktionierte:

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

Ich habe die Dateien gegenüber dieser Anleitung ein wenig abgeändert, mich ansonsten aber daran gehalten.

Nur für den Fall habe ich diese Modprobe-Zeilen zu /etc/initramfs-tools/scripts/local-top/cryptoroot hinzugefügt:

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

Das ergibt:

    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

Für die obige Datei (local-top) muss die CRYPTROOT-Zeile geändert werden.

Ich habe eine Schlüsseldatei verwendet, daher sah meine Zeile folgendermaßen aus:

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

Die Schlüsseldatei ist nicht erforderlich. Der luksHeader kann mit einem Passwort geöffnet werden (entfernen Sie einfach die Schlüsseldateioption). Wenn Sie die Datei jedoch einbinden, verwenden Sie nicht /dev/sdXy.

Zu /etc/initramfs-tools/hooks/cryptoroot habe ich einfach diese Zeilen hinzugefügt:

# 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

Das ergibt:

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

Außerdem müssen alle diese Dateien als ausführbar gekennzeichnet sein.

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

Fügen Sie diese zu /etc/initramfs-tools/modules hinzu:

dm_mod
dm_crypt
sha256_generic
sha256_ssse3
aes_generic
cbc
aes_x86_64
xts

Es war relativ einfach!

Führen Sie update-initramfs -u -k all aus.

Dann müssen wir in meinem Fall einen benutzerdefinierten GRUB-Eintrag erstellen, da os-prober kein Dateisystem auf BTRFS erkennt. Der Arch-Eintrag wird dabei helfen.

So sieht meins aus:

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 ist offiziell: Ubuntu kann in das verschlüsselte Dateisystem von Arch booten! Ich habe viel gegoogelt und bin mir nicht sicher, ob das schon jemand geknackt hat, zumindest nicht in den letzten Jahren.

verwandte Informationen