Hlavní navigace

Šifrování / v Archu

10. 5. 2008 16:49 | Jan Hrach

Nevím, jestli po mně jde CIA, NSA, FBI, nebo KGB. Ale stejně jsem se rozhodl zašifrovat si celý systém. K šifrování root oddílu v Archlinuxu budeme potřebovat následující ingredience:

  • Jeden volný oddíl na disku, na který se nám systém dočasně vejde (možno loopback device někde)
  • Flashdisk s jedním volným oddílem o velikosti alespoň 32MB na umístění /boot
  • Stroj s možností bootovat z USB

Proč šifrovat i /

Domeček (/home) už má dneska šifrovaný skoro každý, což ovšem nebrání agentům, aby se mu vloupali do domu, „opatchovali“ /sbin/cryptsetup tak, aby jim poslal zadávané heslo přes síť, zkopírovali si zašifrovaný oddíl, a počkali, až si oddíl připojíte.

Současný GRUB neumí zavést jádro a initrd ze šifrovaného oddílu a tedy je musíte mít na flashdisku, který budete nosit neustále u sebe, aby vám agenti nenasadili backdoora do jádra.

Příprava

Jako první si zazálohujeme všechna data. Klasické doporučení, ale je to opravdu vhodné. Dále si otevřeme soubor /etc/mkinitcpio.conf a úplně na konci přidáme do HOOKS encrypt. Příkazem mkinitcpio vyrobíme nový ramdisk.

Teď si na flashce vyrobíme oblíbený filesystém (doporučuji ext2), přimountujeme a nakopírujeme na ni obsah  /boot

mount /dev/FLASH /mnt
cp -a /boot/* /mnt/
umount /mnt

Připojíme ji do /boot a nainstalujeme na ni GRUB:

mount /dev/FLASH /boot
grub-install /dev/FLASH

Teď musíme upravit menu.lst na flashce, aby bootovala jádro od sebe a ne z disku. V /boot/grub/menu.lst  změníme záznamy

kernel /boot/vmlinuz26 root=/dev/sda1 vga=775 ro
initrd /boot/kernel26.img

na

kernel /vmlinuz26 root=/dev/sda1 vga=775 ro
initrd /kernel26.img

(root(hd0,0) necháme, protože GRUB vidí jako 1.disk ten, ze kterého nabootoval, v tomto případě flash)
Flashdisk odmountujeme.

Kopírování systému

Na prázdném oddílu si vyrobíme ext3, připojíme ho třeba do /mnt a nakopírujeme na něj stávající systém:

cp -a /bin /mnt
cp -a /boot /mnt
cp -a /dev /mnt
cp -a /etc /mnt
cp -a /lib /mnt
cp -a /opt /mnt
cp -a /root /mnt
cp -a /sbin /mnt
cp -a /srv /mnt
cp -a /sbin /mnt
cp -a /usr /mnt
cp -a /var /mnt
mkdir /mnt/home
mkdir /mnt/media
mkdir /mnt/mnt
mkdir /mnt/proc
mkdir /mnt/sys
mkdir /mnt/tmp
chmod -R a+rwt /mnt/tmp

Upravíme /mnt/etc/fstab tak, aby / ukazoval na tento nový oddíl, syncneme, rebootneme a pokusíme se nabootovat z flashdisku. V naběhnuvším GRUBu ještě dočasně upravíme jádru root=/dev/NAKOPÍROVANÝ_SYSTÉM a nastartujeme.

Šifrování samo

Vytvoříme šifrovaný oddíl:

cryptsetup -c aes-lrw-benbi -y -s 384 luksFormat /dev/sda1

Odemkneme:

cryptsetup luksOpen /dev/sda1 root

Vytvoříme FS:

mkfs.ext3 /dev/mapper/root

Namountujeme a výše uvedenou sekvencí příkazů na něj nakopírujeme systém. Upravíme  /mnt/fstab:

/dev/mapper/root / ext3 defaults 0 1

a /etc/crypttab:

root            /dev/sda1               none    luks

Opět syncneme, rebootujeme, nastartujeme z flashdisku a systém se nás při příštím bootu zeptá na heslo. Pokud jsme něco udělali špatně, čeká nás Kernel panic. Můžeme opět nabootovat do zkopírovaného nezašifrovaného systému a problém opravit. Až všechno bude fungovat, přepíšeme nezašifrovanou kopii systému  /dev/urandom.

Doporučená literatura:

System Encryption with LUKS for dm-crypt

Configuring mkinitcpio