News | About | Get Frugalware | Packages | Documentation | Discussion Forums | Bug Tracker | Wiki | Community | Development

CryptoLoop

From FrugalWiki

Jump to: navigation, search

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>
Personal tools
Namespaces
Variants
Actions