Auto de-crypt todas as partições LUKS no Debian

2

Eu uso o Debian Wheezy e tenho todas as partições criptografadas usando LUKS, exceto / boot. Eu quero descriptografar as partições automaticamente sem ter que digitar a senha em cada uma das 7 partições criptografadas (é o mesmo em 7).

Como eu posso fazer isso? Com cryptsetup? Como faço o script de gancho do initramfs?

/ boot: sem cripta /: cripta / home: cripta

Eu preciso do decryp / e / home no initramfs, no Debian.

    
por Alfredo Pons Menargues 18.02.2014 / 15:21

1 resposta

1

cryptsetup pode usar uma frase secreta do terminal e um arquivo. Eu tenho (não com o Debian, no entanto) um pequeno volume LUKS que contém um arquivo. Os outros volumes têm dois slots: um para a frase secreta e outro para o arquivo com conteúdo aleatório (que não precisa de iterações).

Eu tenho um script que desbloqueia o primeiro volume com uma frase secreta, desbloqueia os outros usando o arquivo e desmonta o volume e fecha o dispositivo crypt DM.

meu script (alemão)

#!/bin/bash

vg="storage2"
disk_id="scsi-SATA_WDC_WD5000BPVT-2_WD-WXF1A90J2616"
keyfile="/mnt/crypto-pw/keyfile"
program_name="mount_crypto"
yes_char=j
no_char=n
wait_seconds=3

_exit_ () {
        if [ $# -eq 0 ]
                then
                ec=1
        elif [ $# -eq 1 ]
                then
                ec=$1
                if ! [[ $ec =~ ^[0-9]$ ]] || [[ $ec =~ ^[1-9][0-9]+$ ]]
                        then
                        echo "Fehler beim Aufruf von _exit_()" >&2
                        exit 100
                fi
        else # [ $# -gt 1 ]
                message="$2"
        fi
        if [ -n "$message" ]
                then
                echo "$message" >&2
                logger -t "$program_name" "$message"
        fi
        if grep -q /dev/mapper/cryptopw /proc/mounts
                then
                echo "Aushängen von /mnt/crypto-pw" >&2
                if ! umount /mnt/crypto-pw &>/dev/null
                        then
                        echo "Fehler beim Aushängen"
                        cryptsetup luksClose cryptopw &>/dev/null
                fi
        fi
        if [ -b /dev/mapper/cryptopw ]
                then
                echo "Löschen von /dev/mapper/cryptopw"
                cryptsetup luksClose cryptopw || echo "Fehler"
        fi
        sleep "$wait_seconds"
        exit $ec
}
if ! [ "/dev/sda" = "$(readlink -f /dev/disk/by-id/${disk_id})" ]; then
        echo "Problem mit den Platten bzw. deren Erkennungsreihenfolge:"
        echo "/dev/sda ist nicht scsi-SATA_WDC_WD5000BPVT-_WD-WXF1A90J2616; Abbruch."
        exit 1
fi

echo "[${program_name}]"
echo -n "Sollen die Kryptolaufwerke eingebunden werden? (${yes_char}/${no_char}) "
read antwort

while [ "${no_char}" != "$antwort" -a "${yes_char}" != "$antwort" -a -n "$antwort" ] # leeres $antwort ist auch OK - Abbruch mit ^C
        do
        echo
        echo
        antwort=
        echo "Falsche Antwort. Zulässig sind nur ${yes_char} und ${no_char}."
        echo -n "Sollen die Kryptolaufwerke eingebunden werden? (${yes_char}/${no_char}) "
        read antwort
done

if [ "${yes_char}" != "$antwort" ]
        then
        _exit_ 0 "${program_name} vom Benutzer abgebrochen."
fi
echo
echo "=== cryptopw öffnen und einbinden"
cryptsetup luksOpen /dev/${vg}/crypto-pw cryptopw || _exit_ 10 "cryptopw konnte nicht geöffnet werden"
mount -t ext4 -o ro,acl /dev/mapper/cryptopw /mnt/crypto-pw || _exit_ 11 "cryptopw konnte nicht eingebunden werden"
test -f "$keyfile" || _exit_ 12 "keyfile nicht vorhanden; Abbruch"
echo
echo "=== crypto öffnen und einbinden"
if ! [ -b /dev/mapper/crypto ]
        then
        cryptsetup --key-file "$keyfile" luksOpen /dev/${vg}/crypto crypto || _exit_ 13 "crypto konnte nicht geöffnet werden; Abbruch"
else
        echo "crypto blockdev existiert bereits."
fi
if ! grep -q "^/dev/mapper/crypto " /proc/mounts
        then
        mount -t ext4 -o acl,user_xattr,mand,nosuid,nodev /dev/mapper/crypto /crypto || _exit_ 14 "crypto konnte nicht eingebunden werden"
else
        echo "/crypto ist schon gemountet."
fi
echo
echo "=== backup öffnen und einbinden"
if ! [ -b /dev/mapper/backup ]
        then
        cryptsetup --key-file "$keyfile" luksOpen /dev/sda3 backup || _exit_ 15 "backup konnte nicht geöffnet werden; Abbruch"
else
        echo "backup blockdev existiert bereits."
fi
if ! grep -q "^/dev/mapper/backup " /proc/mounts
        then
        mount -t ext4 -o acl,user_xattr,mand,nosuid,nodev /dev/mapper/backup /backup || _exit_ 16 "backup konnte nicht eingebunden werden"
else
        echo "/backup ist schon gemountet."
fi

echo
echo "Diese Laufwerke sind im Moment gemountet (mit ext[234]):"
mount | grep ext[234]

echo

_exit_ 0
    
por 18.02.2014 / 16:30

Tags