Debian install debootstrappal, titkosított fájlrendszerre

 ( TCH | 2018. október 2., kedd - 19:12 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Köszi, de én a rendszerpartíciót szeretném titkosítani.

Hát, itt meg az install alatti rész nincs meg...de a másikkal kombinálva már lehet, hogy jó lesz, köszi.

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-add-curl-to-the-initramfs-and-run-curl-in-a-script

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?

up