USB-ключ не устанавливается при загрузке, чтобы разблокировать систему LUKS

Я запускаю Debian Jessie. У меня есть 2 жестких диска с различными разделами, распределенными по обоим (не RAID). Оба они отдельно зашифрованы LUKS, а LVM – на обоих. Мой /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 

Я мог бы указать UUID USB-накопителя (вместо /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 "указывает точки монтирования, которые монтируются перед вызовом cryptdisks", я думал, что добавление /boot к нему сделает /boot доступным до начала процедуры разблокировки. Однако он не монтируется, когда выполняется /bin/passphrase-from-usb .

Я уверен, что myKeyfile.key добавлен как ключ LUKS для обоих дисков, и я обновил initramfs через update-initramfs -u .

во время загрузки initramfs не монтирует / не загружает. если вы хотите использовать файл в / boot, вы можете установить / boot вручную. могут добавлять следующие команды в скрипт-код-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 будет очень полезен.