Chave USB não está montando na inicialização para desbloquear o sistema LUKS

1

Eu estou executando o Debian Jessie. Eu tenho 2 discos rígidos com minhas várias partições espalhadas por ambos (não RAID). Ambos são criptografados separadamente pelo LUKS, e os LVMs se baseiam em ambos. Minha partição /boot é a única partição não incluída nos dois discos rígidos; em vez disso, ele está localizado em um pendrive não criptografado. Na partição /boot está myKeyfile.key , que deve desbloquear ambos os discos rígidos [mas não]. Meu objetivo é ter discos totalmente inacessíveis / inúteis sempre que o sistema inicializar sem o pendrive.

Aqui está o que eu fiz para conseguir isso. Eu usei esta resposta no StackOverflow como um guia.

/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

De acordo com o comentário, eu só tenho que ter certeza de que tenho o nome apropriado do ponto de montagem, conforme descrito em fstab . Para completar, aqui está a linha relevante:

/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

Eu poderia especificar o UUID da unidade USB (em vez de /boot/myKeyfile.key ), mas não sei como especificaria que myKeyfile.key é o arquivo em que estou interessado.

/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: "

É com isso que sou saudado na inicialização:

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:

Depois de inserir a frase secreta, a mesma troca acontece para o segundo disco, sdb1_crypt .

Estou fazendo algo errado, mas não tenho certeza do que. Como CRYPTDISKS_MOUNT "especifica os pontos de montagem montados antes de os cryptdisks serem invocados", achei que adicionar /boot a ele tornaria /boot disponível antes do início do procedimento de desbloqueio. No entanto, ele não parece estar montado quando /bin/passphrase-from-usb é executado.

Tenho certeza de que myKeyfile.key é adicionado como uma chave LUKS às duas unidades e atualizei o initramfs via update-initramfs -u .

    
por natedogg 18.10.2015 / 23:49

1 resposta

0

durante a inicialização, o initramfs não é montado / inicializado. Se você quiser usar o arquivo em / boot, você pode montar o / boot manualmente. pode adicionar os seguintes comandos ao script 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

Além disso, este link será muito útil.

    
por 06.11.2015 / 03:40