![LUKS 시스템 잠금을 해제하기 위해 부팅 시 USB 키가 설치되지 않았습니다.](https://linux55.com/image/75453/LUKS%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%9E%A0%EA%B8%88%EC%9D%84%20%ED%95%B4%EC%A0%9C%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EB%B6%80%ED%8C%85%20%EC%8B%9C%20USB%20%ED%82%A4%EA%B0%80%20%EC%84%A4%EC%B9%98%EB%90%98%EC%A7%80%20%EC%95%8A%EC%95%98%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 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 키로 추가되었고 initramfs
via를 업데이트했다고 확신합니다 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매우 도움이 될 것입니다.