CryptoLoop
From FrugalWiki
Szükséges kernel beállítások
Az itt leírtak megvalósításához legalább 2.6.5-ös kernel szükséges, mivel ez a megoldás a 2.6-os kernelsorozat egy új device-mapper (http://www.saout.de/misc/dm-crypt/) megoldására támaszkodik. Ettől a verziótól kezdve minden szükséges dolog benne van a vanilla kernelben, így nincs szükség egyéb patch-ekre.
A kernelben a "device-mapper" és a "dm-crypt" támogatást kell bekapcsolni, amelyek a "Device Drivers > Multi-device support (RAID and LVM)" menüpont alatt találhatóak:
# # Multi-device support (RAID and LVM) # CONFIG_MD=y CONFIG_BLK_DEV_DM=y CONFIG_DM_CRYPT=y
Ezen kívül kell még valamilyen titkosító algoritmus támogatás is:
# # Cryptographic options # CONFIG_CRYPTO=y CONFIG_CRYPTO_MD4=y CONFIG_CRYPTO_MD5=y CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=y CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_BLOWFISH=y CONFIG_CRYPTO_TWOFISH=y CONFIG_CRYPTO_SERPENT=y CONFIG_CRYPTO_AES_586=y
Szükséges csomagok
cryptosetup
device-mapper
libgcrypt
Initrd elkészítése
Szükség lesz egy úgynevezett initrd fájl elkészítésére, amit myinitrd-nek fogunk elnevezni. Ez tartalmaz egy "mini" Linux rendszert, ami az encrypted root fájlrendszer mountolásáért fog felelni. A dd paranccsal létrehozunk egy 4MB méretű fájlt, amit persze ki is terjeszthetünk nagyobb méretűvé, csak ne felejtsük el, hogy a Linux kernel konfigurálásakor ennek méretét megadtuk, tehát ezt is növelni kell, ha így teszünk.
cd /mnt touch myinitrd dd if=/dev/zero of=myinitrd bs=1024k count=4 losetup /dev/loop0 myinitrd mke2fs /dev/loop0 mkdir /mnt/initrd mount /dev/loop0 /mnt/initrd
Most az image-ben lévő szükséges fájlokat és alkönyvtárakat hozzuk létre:
cd /mnt/initrd mkdir etc dev lib bin proc new touch etc/fstab touch linuxrc chmod x linuxrc
Linuxrc lesz az a fájl, amelyben az init parancsokat elhelyezzük. Ez egy script fájl, amit a Linux kernel betöltése után hívunk meg (grub-ban adjuk meg a fájl nevét!). Ehhez fájlokat kell átmásolni a bin és lib alkönyvtárba. A bin-be a következő fájlokat másoljuk:
/bin/sh /bin/cat /bin/mount /bin/umount /bin/mkdir /bin/chroot /bin/cryptsetup /sbin/pivot_root
A lib alkönyvtárba olyan library fájlokat kell elhelyezni, amelyek a binárisok futtatásához szükségesek. Ezt legkönnyebben úgy tehetjük meg, hogy az ldd parancs segítségével ellenőrizzük a bináris fájlok futtatásához szükséges lib-eket. Itt egy példa a mount binárisra:
ldd /bin/mount linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/libc.so.6 (0x4002e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) cp /lib/libc.so.6 /mnt/initrd/lib/ cp /lib/ld-linux.so.2 /mnt/initrd/lib/
Ha minden binárison végigmentünk, akkor a dev alkönvytár alatt hozzuk létre az alábbi eszközöket:
mknod /mnt/initrd/dev/console c 5 1 mknod /mnt/initrd/dev/null c 1 3 mknod /mnt/initrd/dev/hda2 b 3 2 mknod /mnt/initrd/dev/tty c 4 0 mkdir /mnt/initrd/dev/mapper mknod /mnt/initrd/dev/mapper/control c 10 63
Ha te hda2 helyett hda3-at használsz, akkor cseréld ki a harmadik sorban lévő "b 3 2"-t, "b 3 3"-ra. Ha biztos akarsz lenni az eszköz major/minor számában, akkor használd a cat /proc/devices parancsot.
Végül írjuk bele a linuxrc fájlba az alábbi scriptet. A script a dm-crypt segítségével mountolja a root fájlrendszert induláskor és ez lesz a valódi root rendszert:
#!/bin/sh export PATH=/bin:/sbin # Get cmdline from proc mount -t proc proc /proc CMDLINE=`cat /proc/cmdline` umount /proc # Mount real root and change to it cryptsetup -y create root /dev/hda2 mount /dev/mapper/root /new cd /new mkdir initrd pivot_root . initrd # Start init and flush ram device exec chroot . /bin/sh <<- EOF >dev/console 2>