
Titkostott root fjlrendszer HOGYANChristophe Devine

   Verzitrtnet
   Verzi: v1.1 2003.12.01 tdolgozta: cd
   GRUB tmogats hozzadva.
   Verzi: v1.0 2003.09.24 tdolgozta: cd
   Els kiads, az LDP ltal ellenrizve.
   Verzi: v0.9 2003.09.11 tdolgozta: cd
   Frisstve, DocBook XML formtumba konvertlva.

   Ez a dokumentum lerja, hogyan helyezzk biztonsgba adatainkat a
   Linux root fjlrendszer ers titkostsi algoritmust hasznl
   titkostsval.
     _________________________________________________________________

   Tartalomjegyzk
   1. [1]A rendszer elksztse

        1.1. [2]A partcik kialaktsa
        1.2. [3]A Linux-2.4.23 rendszermag teleptse
        1.3. [4]Az util-linux-2.12 teleptse

   2. [5]A titkostott root fjlrendszer ltrehozsa
   3. [6]A boot eszkz belltsa

        3.1. [7]A virtulis fjlrendszer (ramdisk) ltrehozsa
        3.2. [8]Rendszerindts CD-ROM-rl
        3.3. [9]Rendszerindts fizikai partcirl

   4. [10]Utols lpsek
   5. [11]A HOGYANrl

        5.1. [12]Magyar fordts

1. A rendszer elksztse

1.1. A partcik kialaktsa

A lemeznk (hda) legalbb hrom partcit tartalmazzon:

     * hda1: ez a kicsi (~4 Mb), nem titkostott partci fogja krni a
       jelszavunkat a titkostott root fjlrendszer felcsatolshoz.
     * hda2: ez a partci tartalmazza a titkostott root fjlrendszert;
       legyen megfelelen nagy.
     * hda3: ez a partci tartalmazza az aktulis GNU/Linux rendszert.

   Ekkor mg a hda1 s a hda2 partcik nincsenek hasznlatban. A hda3
   partci tartalmazza az aktulisan teleptett Linux terjesztst; az
   /usr s a /boot nem lehet ettl a partcitl elklntve.
     _________________________________________________________________

1.2. A Linux-2.4.23 rendszermag teleptse

Kt nagyobb projekt ltezik, ami ers titkostsi tmogatst ad a
rendszermaghoz: a CryptoAPI s a loop-AES. Ez a HOGYAN a loop-AES projekten
alapul, mivel ez egy assembly nyelven rt, nagyon gyors s optimalizlt
implementci, gy maximlis teljestmnyt nyjt az IA-32 (x86) alap
processzorok szmra. Ksztje Rijndael.

Mindenek eltt tltsk le, majd csomagoljuk ki a loop-AES csomagot:

wget http://loop-aes.sourceforge.net/loop-AES/loop-AES-v2.0b.tar.bz2
tar -xvjf loop-AES-v2.0b.tar.bz2

   Ezutn tltsk le a rendszermag forrst, majd alkalmazzuk a foltot:

wget http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.23.tar.bz2
tar -xvjf linux-2.4.23.tar.bz2
cd linux-2.4.23
patch -Np1 -i ../loop-AES-v2.0b/kernel-2.4.23.diff

   lltsuk be a billentyzet kiosztst:

   dumpkeys | loadkeys -m - > drivers/char/defkeymap.c

   A kvetkez lpsben belltjuk a rendszermagot; a kvetkez
   lehetsgek mindenkpp legyenek belltva:

make menuconfig

    Block devices  --->

        <*> Loopback device support
        [*]   AES encrypted loop device support (NEW)

        <*> RAM disk support
        (4096)   Default RAM disk size (NEW)
        [*]   Initial RAM disk (initrd) support

    File systems  --->

        <*> Ext3 journalling file system support
        <*> Second extended fs support

(fontos: ne legyen belltva a /dev file system support lehetsg)

   Fordtsuk le s teleptsk a rendszermagot:

make dep bzImage
make modules modules_install
cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.23

   Ha a grub rendszerbetltt hasznljuk, szerkesszk a
   /boot/grub/menu.lst illetve /boot/grub/grub.conf fjlt:

cat > /boot/grub/menu.lst << EOF
default 0
timeout 10
color green/black light-green/black
title Linux
    root (hd0,2)
    kernel /boot/vmlinuz-2.4.23 ro root=/dev/hda3 vga=4
EOF

   Ha viszont lilo-t hasznlunk, akkor szerkesszk az /etc/lilo.conf
   fjlt, s futtassuk a lilo-t:

cat > /etc/lilo.conf << EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/boot/vmlinuz-2.4.23
    label=Linux
    read-only
    root=/dev/hda3
    vga=4
EOF
lilo

   Indtsuk jra a rendszert.
     _________________________________________________________________

1.3. Az util-linux-2.12 teleptse

A losetup programon - amely az util-linux csomag rsze - alkalmaznunk kell a
foltot, s jra kell fordtanunk az ers titkosts tmogatshoz. Tltsk
le s csomagoljuk ki az util-linux csomagot, majd alkalmazzuk a foltot:

wget http://ftp.cwi.nl/aeb/util-linux/util-linux-2.12.tar.gz
tar -xvzf util-linux-2.12.tar.gz
cd util-linux-2.12
patch -Np1 -i ../loop-AES-v2.0b/util-linux-2.12.diff

   20 karakternl rvidebb jelsz hasznlata esetn rjuk be:

   CFLAGS="-O2 -DLOOP_PASSWORD_MIN_LENGTH=8"; export CFLAGS

   Ha fontos krds a biztonsg, ne hasznljuk ezt a lehetsget. A
   biztonsgnak megvan az ra, jelen esetben ez a hossz jelsz
   hasznlata.

   Fordtsuk le a losetup-ot, majd root felhasznlknt teleptsk azt:

./configure && make lib mount
cp -f mount/losetup /sbin
rm -f /usr/share/man/man8/losetup.8.gz
cp -f mount/losetup.8 /usr/share/man/man8
     _________________________________________________________________

2. A titkostott root fjlrendszer ltrehozsa

A clpartci feltltse vletlenszer adattal:

shred -n 1 -v /dev/hda2

   A titkostott loopback eszkz belltsa:

losetup -e aes256 -S xxxxxxxxxx /dev/loop0 /dev/hda2
Password:

   A sztrral optimalizlt tmadsok kivdse rdekben ajnlott a -S
   xxxxxxxxxx opci hasznlata, ahol "xxxxxxxxxx" a vletlenszeren
   kivlasztott lvletlen sorozat kiindulrtk (random seed). Ezen
   kvl a rendszerindtskor esetleg fellp billentyzetkiosztsi
   hibk megelzse rdekben ne hasznljunk nem-ASCII karaktereket
   (kezeteket stb.) a jelszban.

   Hozzuk ltre az ext3 fjlrendszert:

   mke2fs -j /dev/loop0

   Ellenrizzk, hogy helyesen rtuk be a jelszt:

losetup -d /dev/loop0
losetup -e aes256 -S xxxxxxxxxx /dev/loop0 /dev/hda2
Password:

mkdir /mnt/efs
mount /dev/loop0 /mnt/efs

   sszehasonlthatjuk a titkostott s az eredeti adatokat:

xxd /dev/hda2  | less
xxd /dev/loop0 | less

   Itt az ideje, hogy teleptsk a titkostott Linux fjlrendszert. Ha
   egy GNU/Linux terjesztst hasznlunk (pldul Debian-t, Slackware-t,
   Gentoo-t, Mandrake-et, RedHat/Fedora-t, SuSE-t stb.), futtassuk a
   kvetkez parancsot:

   cp -avx / /mnt/efs

   Ha a Linux From Scratch knyvet hasznljuk, az albbi eltrseket
   kivve a dokumentum szerint folytathatjuk a munkt:

     * 6. fejezet - Az util-linux teleptse:
       Alkalmazzuk a loop-AES foltot a forrs kicsomagolsa utn.
     * 8. fejezet - Az LFS rendszer indthatv ttele:
       Szortkozzunk a kvetkez fejezetre.
     _________________________________________________________________

3. A boot eszkz belltsa

3.1. A virtulis fjlrendszer (ramdisk) ltrehozsa

Els lpsknt chroot-oljunk a titkostott partcira, s hozzuk ltre a
boot eszkzhz a felcsatolsi pontot:

chroot /mnt/efs
mkdir /loader

   Ezutn hozzuk ltre a virtulis rendszerindt fjlrendszert (initial
   ramdisk, initrd), amelyre ksbb szksgnk lesz:

cd
dd if=/dev/zero of=initrd bs=1k count=4096
mke2fs -F initrd
mkdir ramdisk
mount -o loop initrd ramdisk

   Hozzuk ltre a fjlrendszer knyvtrszerkezett, s msoljuk be a
   szksges fjlokat:

mkdir ramdisk/{bin,dev,lib,mnt,sbin}
cp /bin/{bash,mount,umount} ramdisk/bin/
ln -s bash ramdisk/bin/sh
mknod -m 600 ramdisk/dev/console c 5 1
mknod -m 600 ramdisk/dev/hda2    b 3 2
mknod -m 600 ramdisk/dev/loop0   b 7 0
cp /lib/{ld-linux.so.2,libc.so.6,libdl.so.2} ramdisk/lib/
cp /lib/{libncurses.so.5,libtermcap.so.2}    ramdisk/lib/
cp /sbin/{losetup,pivot_root} ramdisk/sbin/

   Ha a kvetkez vagy hasonl hibazenetet kapjuk, az nem jelent
   problmt: "/lib/libncurses.so.5: No such file or directory", vagy
   "/lib/libtermcap.so.2: No such file or directory"; a bash-nek csak
   ezen programknyvtrak egyike szksges. Megtudhatjuk azt, hogy
   esetnkben melyik szksges:

   ldd /bin/bash

   Hozzuk ltre a rendszerindt (init) szkriptet (ne felejtsk a
   "xxxxxxxxxx" helyre berni a kivlasztott lvletlen sorozat
   kiindulrtket (random seed)):

cat > ramdisk/sbin/init << "EOF"
#!/bin/sh

/sbin/losetup -e aes256 -S xxxxxxxxxx /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext2 /dev/loop0 /mnt

while [ $? -ne 0 ]
do
    /sbin/losetup -d /dev/loop0
    /sbin/losetup -e aes256 -S xxxxxxxxxx /dev/loop0 /dev/hda2
    /bin/mount -r -n -t ext2 /dev/loop0 /mnt
done

cd /mnt
/sbin/pivot_root . loader
exec /usr/sbin/chroot . /sbin/init
EOF

chmod 755 ramdisk/sbin/init

   Csatoljuk le a loopback eszkzt, s tmrtsk be a virtulis
   rendszerindt fjlrendszert:

umount -d ramdisk
rmdir ramdisk
gzip initrd
mv initrd.gz /boot/
     _________________________________________________________________

3.2. Rendszerindts CD-ROM-rl

Ersen ajnlott a rendszert egy rsvdett eszkzrl indtani, pldul egy
indthat CD-ROM-rl.

Tltsk le, majd csomagoljuk ki a syslinux csomagot:

wget ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-2.07.tar.gz
tar -xvzf syslinux-2.07.tar.gz

   lltsuk be az isolinux-ot:

mkdir bootcd
cp /boot/vmlinuz-2.4.23 bootcd/vmlinuz
cp /boot/initrd.gz syslinux-2.07/isolinux.bin bootcd/
echo "DEFAULT vmlinuz initrd=initrd.gz ro root=/dev/ram0 vga=4" \
    > bootcd/isolinux.cfg

   Hozzuk ltre az indthat cd-kpet (cd image), s rjuk ki egy rhat
   cd-re:

mkisofs -o bootcd.iso -b isolinux.bin -c boot.cat \
        -no-emul-boot -boot-load-size 4 -boot-info-table \
        -J -hide-rr-moved -R bootcd/

cdrecord -dev 0,0,0 -speed 4 -v bootcd.iso

rm -rf bootcd{,.iso}
     _________________________________________________________________

3.3. Rendszerindts fizikai partcirl

A boot partci egy alternatv rendszerindt eszkz: szksg lehet r, ha
az indthat CD elvsz. Vegyk figyelembe, hogy a hda1 egy rhat eszkz,
ezrt nem biztonsgos; csak szksg esetn hasznljuk!

Hozzuk ltre s csatoljuk fel az ext2 fjlrendszert:

dd if=/dev/zero of=/dev/hda1 bs=8192
mke2fs /dev/hda1
mount /dev/hda1 /loader

   Msoljuk t a rendszermagot s a virtulis rendszerindt
   fjlrendszert:

cp /boot/vmlinuz-2.4.23 /loader/vmlinuz
cp /boot/initrd.gz /loader/

   Ha grub-ot hasznlunk:

mkdir /loader/boot
cp -av /boot/grub /loader/boot/
cat > /loader/boot/grub/menu.lst << EOF
default 0
timeout 10
color green/black light-green/black
title Linux
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/ram0 vga=4
    initrd /initrd.gz
EOF
grub-install --root-directory=/loader /dev/hda
umount /loader

   Ha lilo-t hasznlunk:

mkdir /loader/{boot,dev,etc}
cp /boot/boot.b /loader/boot/
mknod -m 600 /loader/dev/hda  b 3 0
mknod -m 600 /loader/dev/hda1 b 3 1
mknod -m 600 /loader/dev/ram0 b 1 0
cat > /loader/etc/lilo.conf << EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/vmlinuz
    label=Linux
    initrd=/initrd.gz
    read-only
    root=/dev/ram0
    vga=4
EOF
lilo -r /loader
umount /loader
     _________________________________________________________________

4. Utols lpsek

Mdostsuk az /etc/fstab fjlt gy, hogy tartalmazza a kvetkez sort:

/dev/loop0      /      ext3    defaults             0 1

   Trljk az /etc/mtab fjlt, s lpjnk ki a chroot-bl. Legvgl
   futtassuk a "umount -d /mnt/efs" parancsot, majd indtsuk jra a
   rendszert. A hda3-ra mr nincs szksg, ltrehozhatunk egy titkostott
   fjlrendszert ezen a partcin, s hasznlhatjuk biztonsgi
   mentsknt.

   Ha kevs a fizikai memrink, szksg lesz swap terletre. Ttelezzk
   fel, hogy a hda4 fogja tartalmazni a titkostott swap partcit;
   elszr ltre kell hozni a swap eszkzt:

shred -n 1 -v /dev/hda4
losetup -e aes256 /dev/loop1 /dev/hda4
mkswap /dev/loop1

   Majd hozzunk ltre egy indtszkriptet (S00swap) a rendszer
   indtknyvtrban (/etc/rcS.d/ Debian esetn):

#!/bin/sh

echo "az elzleg kivlasztott jelsz" | \
    losetup -p 0 -e aes256 /dev/loop1 /dev/hda4
swapon /dev/loop1
     _________________________________________________________________

5. A HOGYANrl

A Titkostott root fjlrendszer HOGYAN 2002 novemberben kszlt el a
[13]Linux From Scratch projekt rszre. Ksznet mindazoknak, akik azta
segtettek a HOGYAN tkletestsben (fordtott idrendben): Julien
Perrot, Grant Stephenson, Cary W. Gilmer, James Howells, Pedro Baez, Josh
Purinton, Jari Ruusu s Zibeli Aton.

A hozzszlsokat [14]Christophe Devine vrja.
     _________________________________________________________________

5.1. Magyar fordts

A magyar fordtst [15]Vadon Pter ksztette (2004.06.15). A lektorlst
[16]Daczi Lszl vgezte el (2004.06.24). A dokumentum legfrissebb vltozata
megtallhat a [17]Magyar Linux Dokumentcis Projekt honlapjn.

References

   1. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#PREPARING-SYSTEM
   2. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#PARTITION-LAYOUT
   3. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#INSTALL-KERNEL
   4. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#INSTALL-UTIL-LINUX
   5. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#ENCRYPT-ROOT-FILESYSTEM
   6. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#SETUP-BOOT-DEVICE
   7. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#INITIAL-RAMDISK
   8. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#BOOTABLE-CD
   9. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#BOOT-PARTITION
  10. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#FINAL-STEPS
  11. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#ABOUT
  12. file://localhost/home/dacas/tldp/convert/Encrypted-Root-Filesystem-HOWTO-hu.html#AEN177
  13. http://www.linuxfromscratch.org/lfs/news.html
  14. http://www.cr0.net:8040/about/
  15. mailto:vape[kukac]maffia[pont]hu
  16. mailto:dacas[kukac]freemail[pont]hu
  17. http://tldp.fsf.hu/
