lsinitramfs를 암호화된 파일 시스템으로 부팅하기

lsinitramfs를 암호화된 파일 시스템으로 부팅하기

나는 지시를 따랐다.여기. 나는 LiveCD를 사용해 왔으며 내 LUKS 파일 시스템의 암호를 해독할 initramfs 파일을 생성하도록 Ubuntu를 설득하는 데 평생 동안 실패했습니다. GRUB를 통과하는 데 아무런 문제가 없습니다.

돕다? 그래도 우리가 이 일을 해낼 수 있을 것 같은 느낌이 듭니다.

initramfs 단계에 도달하면 cryptsetup을 실행할 수 있지만 다음 오류 메시지가 나타납니다.

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

또한 "커널이 aes-xts-plain64 암호를 지원하는지 확인하세요"라는 메시지도 받았습니다.

답변1

알았어, 알아냈어!

나는 이 가이드를 수정했고, 대부분 작동할 때까지 내용을 추가했습니다.

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

해당 가이드에서 파일을 약간 수정했지만 그 외에는 그대로 따랐습니다.

만일을 대비해 /etc/initramfs-tools/scripts/local-top/cryptoroot에 다음 modprobe 줄을 추가했습니다.

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

다음을 제공합니다.

    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

위 파일(local-top)의 경우 CRYPTROOT 줄을 변경해야 합니다.

나는 키 파일을 사용했기 때문에 내 줄은 다음과 같습니다.

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

키 파일은 필요하지 않습니다. luksHeader는 비밀번호로 열 수 있습니다(key-file 옵션만 제거). 즉, 파일을 포함하는 경우 /dev/sdXy를 사용하지 마세요.

/etc/initramfs-tools/hooks/cryptoroot에 다음 줄을 추가했습니다.

# 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

다음을 제공합니다.

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

또한 이러한 모든 파일은 실행 가능으로 표시되어야 합니다.

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

/etc/initramfs-tools/modules에 다음을 추가합니다:

dm_mod
dm_crypt
sha256_generic
sha256_ssse3
aes_generic
cbc
aes_x86_64
xts

비교적 쉬웠어요!

update-initramfs -u -k all 실행

그런 다음 os-prober가 BTRFS에서 파일 시스템을 감지하지 못하기 때문에 제 경우에는 사용자 정의 GRUB 항목을 생성해야 합니다. 아치 항목이 도움이 될 것입니다.

내 모습은 다음과 같습니다.

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

공식적입니다: Ubuntu는 Arch의 암호화된 파일 시스템으로 부팅할 수 있습니다! 나는 많은 인터넷 검색을 했고 적어도 몇 년 안에 다른 사람이 이 문제를 해독했는지 확신할 수 없습니다.

관련 정보