LUKS 시스템 잠금을 해제하기 위해 부팅 시 USB 키가 설치되지 않았습니다.

LUKS 시스템 잠금을 해제하기 위해 부팅 시 USB 키가 설치되지 않았습니다.

저는 Debian Jessie를 사용하고 있습니다. 하드 드라이브가 2개 있고 각 파티션이 두 하드 드라이브(RAID 아님)에 분산되어 있습니다. 그들은 모두 LVM을 사용하여 개별적으로 LUKS 암호화를 수행합니다. 내 /boot파티션은 두 개의 하드 드라이브에 포함되지 않은 유일한 파티션입니다. 대신 암호화되지 않은 USB 스틱에 있습니다. 두 하드 드라이브 모두 /boot파티션 에서 잠금 해제되어야 합니다 myKeyfile.key(그러나 그렇지 않습니다). 내 목표는 USB 스틱 없이 시스템을 부팅할 때 디스크에 완전히 액세스할 수 없거나 쓸모가 없게 만드는 것입니다.

이것을 달성하기 위해 내가 한 일은 다음과 같습니다. 나는 사용했다이 답변StackOverflow를 가이드로 사용하세요.


/etc/default/cryptdisks

# Mountpoints to mount, before cryptsetup is invoked at initscripts. Takes
# mountpoints which are configured in /etc/fstab/ as arguments. Separate
# mountpoints by space.  

# original: CRYPTDISKS_MOUNT=""
CRYPTDISKS_MOUNT=/boot

의견을 바탕으로 에서 언급한 대로 마운트 지점 이름이 올바른지 확인하면 됩니다 fstab. 완전성을 위해 관련 줄은 다음과 같습니다.

/etc/fstab

# <file system> <mount point> <type> <options> <dump> <pass>
 UUID=<usb uuid>    /boot      ext4   defaults    0     2

/etc/crypttab

sda1_crypt  UUID=<disk uuid>  /boot/myKeyfile.key  luks,keyscript=/bin/passphrase-from-usb
sda2_crypt  UUID=<disk uuid>  /boot/myKeyfile.key  luks,keyscript=/bin/passphrase-from-usb

USB 드라이브의 UUID(대신)를 지정할 수 있지만 관심 있는 파일을 /boot/myKeyfile.key지정하는 방법을 잘 모르겠습니다 .myKeyfile.key

/etc/initramfs-tools/hooks/passphrase-from-usb

#!/bin/sh

PREREQ=""

prereqs() {
        echo "$PREREQ"
}

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

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

copy_exec /bin/passphrase-from-usb /bin

/bin/passphrase-from-usb

#!/bin/sh

set -e

    if ! [ -e "$CRYPTTAB_KEY" ]; then
        echo "Waiting for USB stick to be recognized..." >&2
        sleep 5
    fi
    if [ -e "$CRYPTTAB_KEY" ]; then
        echo "Unlocking the disk $CRYPTTAB_SOURCE ($CRYPTTAB_NAME) from USB key" >&2
        echo "Using $CRYPTTAB_KEY as the key source" >&2
        dd if="$CRYPTTAB_KEY" bs=1 count=256 2>/dev/null
        exit
    else
        echo "Can't find $CRYPTTAB_KEY; USB stick not present." >&2
    fi

/lib/cryptsetup/askpass "Manually unlock the disk ($CRYPTTAB_NAME)\nEnter passphrase: "


시작 시 받는 환영 메시지는 다음과 같습니다.

Loading, please wait...
   Volume group "vg-root" not found
   Skipping volume group vg-root
Unable to find LVM volume vg-root/lv-root
   Volume group "vg-other" not found
   Skipping volume group vg-other
Unable to find LVM volume vg-other/lv-swap

Waiting for USB stick to be recognized...
[   3.159979] sd 7:0:0:0: [sdd] No Caching mode page found
[   3.160152] sd 7:0:0:0: [sdd] Assuming drive cache: write through

Can't find /boot/myKeyfile.key; USB stick not present. 

Manually unlock the disk (sda1_crypt)
Enter passphrase:

비밀번호를 입력하면 두 번째 디스크에서도 동일한 스왑이 발생합니다 sdb1_crypt.


내가 뭔가 잘못하고 있는데 무엇인지 잘 모르겠습니다. CRYPTDISKS_MOUNT"암호화된 디스크를 호출하기 전에 마운트할 마운트 포인트를 지정해 주세요" 이므로 잠금 해제 프로세스가 시작되기 전에 추가가 가능할 /boot것이라고 생각했습니다. /boot그런데 실행시에는 설치가 되지 않는 것 같습니다 /bin/passphrase-from-usb.

myKeyfile.key두 드라이브 모두에 ​​LUKS 키로 추가되었고 initramfsvia를 업데이트했다고 확신합니다 update-initramfs -u.

답변1

부팅하는 동안 initramfs는 /boot를 마운트하지 않습니다. /boot에 있는 파일을 사용하려면 /boot를 수동으로 마운트할 수 있습니다. passphrase-from-usb 스크립트에 다음 명령을 추가할 수 있습니다.

mkdir -p /tmp-boot
mount <usb uuid> /tmp-boot -t ext4
dd if=/tmp-boot/myKeyfile.key bs=1 count=256 2>/dev/null
umount /tmp-boot

http://wejn.org/how-to-make-passwordless-cryptsetup.html매우 도움이 될 것입니다.

관련 정보