Debian install debootstrappal, titkosított fájlrendszerre

Fórumok

Van N db scriptünk, amit egy live pendrive-ról lefuttatva kapunk egy működő Linuxot. Egy db SSD-re megy fel az egész, jelenleg egy 1 megás BIOS boot partíciót csinál, mögötte a Linuxos partíciót és a végén egy - az egész meghajtó méretétől függően - fél vagy két gigás swap-et.

Ezt szeretnénk most kibővíteni azzal, hogy a fájlrendszer, amire települ az titkosított legyen és ne passphrase-es legyen (ne kérje a bootkor), hanem keyfile-os, amit egy másik partícióról ránt be (vagy egy külső USB-ről). Végigtúrtam a netet, de az egyetlen tutorial ami erről szólt, az nem részletezte a lépéseket, hanem a Debian 8-hoz volt egy leírás, ami az installert használta.

Ebben tud valaki segíteni? Az is jó, ha elirányít egy leírásra, ami nekem eddig kimaradt.

Hozzászólások

Hát valamit nagyon elkeffentek, mert nem akaródzik sikerülni.

Kezdetnek létrehozom a következő partíciós táblát a /dev/sda-n:

1.    1 MiB BIOS BOOT  (04) N/A  N/A
2.  256 MiB Linux      (83) ext4 /boot
3. 2304 MiB Linux      (83) ext4 /
4.    1 MiB MINIX      (81) N/A  N/A
5.  510 MiB Linux swap (82) swap swap

Aztán lefuttatom a következőket:

dd if=/dev/urandom of=/dev/sda4 bs=512
echo 'YES' | cryptsetup -v -c aes-xts-plain64 -s 512 -h sha256 -i 2000 luksFormat /dev/sda3 /dev/sda4
cryptsetup -c aes-xts-plain64 -d /dev/sda4 -s 512 -i 2000 open --type=plain /dev/sda3 eldcr
mkfs.ext4 -F /dev/sda2
e2label /dev/sda2 BootLabel
mkfs.ext4 -F /dev/mapper/eldcr
e2label /dev/mapper/eldcr RootLabel
mkdir -p /mnt/disk
mount /dev/mapper/eldcr /mnt/disk
mkswap /dev/sda5

Vagyis a /dev/sda4-re kiokádok 1 MiB-nyi random szemetet és a cryptsetup-hoz azt használom fel kulcsfájl gyanánt, aztán formázás és csatolás.
Ezután jön a debootstrap majd a chroot, amiben felcsatolom a /dev/sda2-őt /boot-nak, majd telepítem a rendszert (kernelt, programokat, miegyebet).

Az /etc/fstab-ba ez kerül:

UUID=<a /dev/sda2 UUID-je> /boot ext4 errors=remount-ro 0 1
UUID=<a /dev/sda3 UUID-je> / ext4 errors=remount-ro 0 1
UUID=<a /dev/sda5 UUID-je> none swap sw 0 0

A /etc/crypttab-ba pedig ez:

eldcr UUID=<a /dev/sda3 UUID-je> /dev/disk/by-uuid/<a /dev/sda4 UUID-je> luks,cipher=aes-xts-plain64,size=512,hash=sha256,time=2000,keyscript=/boot/getlukskey.sh

Az /etc/default/grub-ban beállításra kerülnek a következőek:

GRUB_ENABLE_CRYPTODISK=y
GRUB_PRELOAD_MODULES="luks cryptodisk"
GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=UUID=<a /dev/sda3 UUID-je>:eldcr root=/dev/mapper/eldcr cryptopts=target=eldcr,source=/dev/disk/by-uuid/<a /dev/sda3 UUID-je>,keyscript=/boot/getlukskey.sh crypto=sha256:aes-xts-plain64:512:0:"
GRUB_CMDLINE_LINUX=""

Az /etc/initramfs-tools/conf.d/cryptroot fájlba ez kerül:

CRYPTROOT=target=eldcr,source=/dev/disk/by-uuid/<a /dev/sda3 UUID-je>

És végül a /boot/getlukskey.sh tartalma:

#!/bin/sh
dd if=/dev/disk/by-uuid/<a /dev/sda4 UUID-je> bs=512 | cat

(Természetesen a chmod a+x /boot/getlukskey.sh is megvolt.)

Ha minden a helyén van, akkor ezzel zárok:

grub-install --target=i386-pc --skip-fs-probe --efi-directory=/ --boot-directory=/boot --root-directory=/ /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
update-initramfs -c -k all

Boot után azonban ez az eredmény:

Begin: Running /scripts/local-block ... cryptsetup (eldcr): error - script "/boot/getlukskey.sh" missing

És ez ismétlődik addig, amíg fel nem adja.

A getlukskey.sh-t próbáltam már több helyre is berakni (olyankor a keyscript paramétert mind a két helyen átírtam), de az eredmény ugyanaz.

Valamit vagy nagyon félre, vagy nagyon nem értek, mert ez nem akaródzik sikerülni...

Ötlet, hogy mit?

szvsz a /boot ilyenkor meg nincs felcsatolva, (a grub specin tolti be a kernel-t, meg initrd-t),
tippre az kene hogy a getlukskey.sh is keruljon be az initram cuccba, itt egy tutorial:
https://serverfault.com/questions/152959/configure-initramfs-tools-to-a…

copy_exec /boot/getlukskey.sh /bin

es keyscript=/bin/getlukskey.sh

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Köszi, ezzel is előrébb jutottam.

A következőket változtattam a kapott hibajelentések alapján:

A kiírt kulcsot lecsökkentettem egy blokkra:

dd if=/dev/urandom of=/dev/sda4 bs=1 count=512
echo 'YES' | cryptsetup -v -c aes-xts-plain64 -s 512 -h sha256 -i 2000 --keyfile-size=512 luksFormat /dev/sda3 /dev/sda4
cryptsetup -c aes-xts-plain64 -d /dev/sda4 -s 512 -i 2000 --keyfile-size=512 open --type=plain /dev/sda3 eldcr

Az /etc/fstab így néz ki:

/dev/disk/by-partuuid/<a /dev/sda2 partuuidja> /boot ext4 errors=remount-ro 0 1
/dev/mapper/eldcr / ext4 errors=remount-ro 0 1
/dev/disk/by-partuuid/<a /dev/sda5 partuuidja> none swap sw 0 0

A /etc/crypttab így:

eldcr /dev/disk/by-partuuid/<a /dev/sda3 partuuidja> /dev/disk/by-partuuid/<a /dev/sda4 partuuidja> luks,cipher=aes-xts-plain64,size=512,hash=sha256,keyfile-size=512,time=2000,keyscript=getlukskey.sh

Az /etc/default/grub-ban egy sor változott:

GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=/dev/disk/by-partuuid/<a /dev/sda3 partuuidja>:eldcr root=/dev/mapper/eldcr cryptopts=target=eldcr,source=/dev/disk/by-partuuid/<a /dev/sda3 partuuidja>,keyscript=getlukskey.sh crypto=sha256:aes-xts-plain64:512:0:0

A getlukskey.sh forráskönyvtára a /lib/cryptsetup/scripts/ lett (ott keresi és reklamál is, hogy invalid, ha nincs ott).
A tartalma pedig ez:

#!/bin/sh
dd if=/dev/disk/by-partuuid/<a /dev/sda4 partuuidja> bs=1 count=512 2>/dev/null

A /etc/initramfs-tools/conf.d/cryptroot tartalma:

CRYPTROOT=target=eldcr,source=/dev/disk/by-partuuid/<a /dev/sda3 partuuidja>

Létrejött a /usr/share/initramfs-tools/hooks/glkcopy ezzel a tartalommal:

#!/bin/sh -e
PREREQS=""
case $1 in
        prereqs) echo "${PREREQS}"; exit 0;;
esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /lib/cryptsetup/scripts/getlukskey.sh /bin
copy_exec /sbin/cryptsetup
copy_exec /sbin/dmsetup
copy_exec /lib/cryptsetup/askpass

A /etc/initramfs-tools/modules-be felvettem a következő modulokat: chainiv, cryptomgr, krng, cbc, ecb, ctr, aes, sha256, xts, dm-mod, dm-crypt

Az egész folyamat végén pluszba van egy update-initramfs -u -k all parancs. (A menetközben lévő update-initramfs -c -k all nem vette bele a scriptet, nem tudom miért.)

Az eredmény ezután az, hogy bootkor:

cryptsetup (eldcr): unknown fstype, bad password or options?

Még kipróbáltam azt, hogy kihajítottam a boot opciókból és a crypttab-ból a keyscript-et és boot opcióknál a helyére cryptkey=/dev/disk/by-partuuid/<a /dev/sda4 partuuidja>:0:512 került.

Ennek eredményeként már az initramfs generálásakor bereklamál, hogy WARNING: root target eldcr uses a key file, skipped.
Boot után pedig azt kéri, hogy unlockoljam a lemezt, azaz adjak passwordot.

Van valami ötlet, a kettő közül bármelyikre, hogy mi nem stimmel?