Šifrovanie LINUX

Šifrovanie LINUX

Šifrovanie oddielu s koreňovým (root) systémom súborov (Linux)

Ak vás zaujalo riešenie šifrovania systémového disku/oddielu v systéme Windows z minulého článku, ale používate systém Linux, v ktorom nemá Truecrypt podporu pre šifrovanie systémového oddielu, nezúfajte. V tomto článku sa budeme budeme zaobrať riešením, ako zašifrovať disk/oddiel obsahujúci koreňový systém súborov pomocou DM Crypt s rozšírením LUKS

 

Budeme k tomu potrebovať Live CD alebo USB verziu vášej Linux-ovej distribúcie. V tomto článku podrobne popíšem toto riešenie pre distribúciu Ubuntu, ale tento postup sa pre rôzne distribúcie skoro vôbec nelíši.

Celý postup by sme mohli zhrnúť do týchto základých krokov:

  • Príprava disku a nastavenie šifrovania oddielu/disku
  • Inštalácia alebo kopírovanie systému
  • Nastavenie prípojných bodov (tzv. Mount Point-ov) a generovanie zavádzacích súborov systému
Príprava disku a nastavenie šifrovania

Budeme potrebovať minimálne 2 oddiely na disku. Prvý nebude zašifrovaný a bude obsahovať zavádzacie súbory opreačného systému. Jeho veľkosť bude cca. 100-200 MB. Zvyšok disku si môžete rozdeliť podľa potreby. Tí, ktorý chcú zašifrovať existujúci systém, budú musieť svoj koreňový systém súborov dočasne presunúť buď na iný oddiel alebo na externý disk, pretože počas nastavovania šifrovania bude koreňový oddiel sformátovaný. Tí ktorí inštalujú nový systém majú o túto starosť menej. Keď máte systém súborov zálohovaný, môžeme prejsť k príprave diskových oblastí.

Na rozdelenie disku môžete použiť vynikajúci program GParted, ktorý je súčasťou LIVE CD/USB distribúcie Ubuntu. Ak máte distribúciu, ktorá ho neobsahuje, môžete ho nainštalovať príkazom:

sudo apt-get update

sudo apt-get install gparted

 

Program môžeme spustiť z ponuky SystemAdministration (pre graf. prostredie GNOME) alebo jednoducho z terminálu príkazom:

gksudo gparted

Vytvorená štruktúra disku by mala vyzerať približne takto, ako je na nasledujúcom obrázku.

Screenshot rozdelenia disku v programe GParted

Screenshot rozdelenia disku v programe GParted

Pre oblasť so zavádzacími súbormi operačného systému (s názvom BOOT) zvolíme systém súborov ext2 kvôli kompatibilite so staršími verziami systémového zavádzača (GRUB Bootloader-u). Pre oblasť s koreňovým systémom súborov zvolíme napr. ext4. Poznamenávam, že táto oblasť bude sformátovaná. Vykonanie zmien na disku potvrdíme EditApply all operations alebo kliknutím na tlačítko so zelenou fajkou.

UPOZORNENIE

Kliknutím na Apply all operations stratíte dáta všetkých odstránených oddielov a oddielov označených na formátovanie.

Vyplnenie oblasti náhodnými dátami

Ak váš disk, resp. oblasť, na ktorej sa chystáme vytvoriť šifrovaný systém súborov, obsahovala predtým citlivé dáta, doporučujem celú oblasť prepísať náhodnými dátami (tzv. WIPE, aby nebolo možné pôvodné dáta obnoviť. Tí z nás, ktorý inštalujú systém na čisto nový disk, alebo jednoducho nepotrebujú oblasť prepísať, môžu tento krok vynechať, nakoľko je pomerne zdĺhavý pre veľkú oblasť. Predpokladajme, že oblasť, ktorú chceme zašifrovať, máme v systéme ako v mojom prípade – /dev/sda2. Ak ju chceme prepísať náhodnými dátami, použijeme príkaz:

sudo dd if=/dev/urandom of=/dev/sda2

kde miesto /dev/sda2 si dáte svoju oblasť, ak máte inú. Ak chceme počas prepisovania vedieť stav, otvoríme ďalšie okno terminálu a zistíme PID procesu dd príkazom:

ps -A | grep dd

dostaneme výpis podobný tomuto

5750 pts/0 00:00:07 dd

kde zvýraznené číslo predstavuje PID procesu dd (vaše bude pravdepodobne iné). Pre výpis stavu prepisovania pošleme tomuto procesu signál USR1 príkazom:

sudo kill -USR1 PID

kde miesto PID si dáte vaše PID. Stav prepisovania sa zobrazí v predchádzajúcom okne terminálu (kde sme prepisovanie spustili). Prepisovanie môžeme kedikoľvek ukončiť stlačením klávesov CTRL+C

Vytvorenie šifrovaného systému súborov

Chystáme sa na našej novo vytvorenej oblasti vytvoriť šifrovaný systém súborov. Do terminálu napíšeme príkaz:

sudo cryptsetup --verify-passphrase --cipher aes-xts-plain key-size 512 luksFormat /dev/sda2

Vysvetlivky

  • –verify-passphrase – znamená, že program nás vyzve na potvrdenie zadaného hesla
  • –cipher aes-xts-plain – nastaví typ šifrovania na AES v móde XTS
  • –key-size – nastaví dĺžku šifrovacieho kľúča na 512 bitov
  • luksFormat – znamená, že daná oblasť sa más sformátovať systémom LUKS
  • /dev/sda2 – cieľová oblať, kde bude vytvorený šifrovaný systém súborov.

Príkaz by mal vypísať niečo takéto:

WARNING!

========

This will overwrite data on /dev/sda2 irrevocably.

Are you sure? (Type uppercase yes): YES

Enter LUKS passphrase:

Verify passphrase:

Upozorní nás, že na danej oblasti budú zmazané všetky dáta. Krok potvrdíme napísaním YES, všetko veľkými písmenami a zadaním hesla, ktorým sa bude šifrovaná oblasť odomykať.

Odomknutie šifrovanej oblasti

Vytvorenú zašifrovanú oblasť odomkneme príkazom:

sudo cryptsetup luksOpen /dev/sda2 root

Vysvetlivky

  • luksOpen – znamená, že program sa pokúsi odomknúť danú oblasť s LUKS
  • /dev/sda2 – oblasť, ktorá sa má odomknúť
  • root – názov, pod ktorým budeme pristupovať k odomknutému systému súborov cez /dev/mapper/<NÁZOV>, čiže v našom prípade /dev/mapper/root. Môžete použiť aký chcete.

Vytvorenie systému súborov na odomknutom oddieli

Keď sme odomkli šifrovanú oblasť, musíme na nej vytvoriť systém súborov. Pripomínam, že všetky operácie vykonávané na /dev/mapper/root sú šifrované. Systém súborov vytvoríme príkazom:

sudo mkfs.ext4 /dev/mapper/root

Po skončení sa môžeme pustiť do inštalácie.

Inštalácia alebo kopírovanie systému

Tí, ktrý chcú iba prekopírovať predtým zálohovaný alebo existujúci systém do šifrovaného oddielu môžu preskočiť na krokKopírovanie systému

Inštalácia prebieha klasickým spôsobom, až na tieto 2 kroky:

Manuálne určenie oblastí počas inštalácie

V tomto kroku vyberieme, že chceme Určiť oblasti ručne, vo všetkých inštalátoroch distribúcií, s ktorými som sa stretol, bola vždy táto možnosť posledná dole.

V ďalšom kroku potrebujeme určiť, že koreňový systém súborov bude umiestnený na šifrovanej oblasti, a že zavádzacie súbory systému budú umiestnené na malej oblasti so systémom súborov EXT2. Výsledok by mal vyzerať nejako takto:

Nastavenie oblastí počas inštalácie

Nastavenie oblastí počas inštalácie

Docielime to tak, že dvakrát klikneme na riadok so zariadením /dev/mapper/root a v okne ktoré sa nám otvorilo vyberieme z poľa Použiť ako položku Žurnálovací súborový systém ext4, zaškrtneme políčko Formátovať oblasť a ako Prípojný bod vyberieme / a klikneme na OK. To isté urobíme aj pre zariadenie /dev/sda1, ale Použiť ako tu vyberieme súborový systém ext2 a Prípojný bod bude /boot. Zvyšok inštalácie pokračuje obvyklým spôsobom, ale na konci inštalácie NEDÁME REŠTARTOVAŤ POČÍTAČ. Pokračujeme na Nastavenie prípojných bodov (tzv. Mount Point-ov) a generovanie zavádzacích súborov systému

Kopírovanie systému

Vytvoríme si 2 priečinky, do ktorých pripojíme zdroj a cieľ kopírovania:

sudo mkdir /mnt/zdroj

sudo mkdir /mnt/ciel

sudo mount /dev/mapper/root /mnt/ciel

sudo mount /dev/sda1 /mnt/ciel/boot

sudo mount /mnt/zdroj

A skopírujeme všetko zo zdroja do cieľa:

sudo rsync -av /mnt/zdroj/ /mnt/ciel

Poznámka: Lomítko na konci /mnt/zdroj/ je dôležité a znamená, že program bude kopírovať obsah toho priečinka miesto priečinka ako celku

Po skončení zdroj a cieľ odpojíme:

sudo umount /mnt/zdroj

sudo umount /mnt/ciel/boot

sudo umount /mnt/ciel

Nastavenie prípojných bodov (tzv. Mount Point-ov) a generovanie zavádzacích súborov systému

V tomto poslednom kroku nám ostáva už len nastaviť, aby systém pri zavádzaní pred pripojením hlavného koreňového súborového systému od nás vypýtal heslo na odomknutie a odomkol ho. Takže pripojíme našu šifrovanú oblasť a oblasť so zavádzacími súbormi, skopírujeme súbor resolvera, premiestnime sa do nej, pripojíme proc, sys a devpts, aktualizujeme zoznam balíkov a nainštalujeme cryptsetup:

sudo mount /dev/mapper/root /mnt

sudo mount /dev/sda1 /mnt/boot

sudo cp /etc/resolv.conf /mnt/etc/

sudo chroot /mnt/

mount -t proc proc /proc

mount -t sysfs sys /sys

mount -t devpts devpts /dev/pts

apt-get update

apt-get install cryptsetup

Potrebujeme upraviť súbor obsahujúci zoznam šifrovaných oblastí, takže spustíme náš obľúbený text. editor a upravíme súbor /etc/crypttab

nano /etc/crypttab

tak, aby vyzeral nasledovne:

 

# <target name> <source device>         <key file>      <options>
root           /dev/sda2               none            luks

 

Keď sme hotoví, stlačíme klávesy CTRL+O, ENTER a CTRL+X

Tí z nás, ktorí kopírovali systém miesto inštalácie budú musieť upraviť aj /etc/fstab, aby vyzerala nasledovne:

nano /etc/fstab

 

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
/dev/mapper/root /              ext4    errors=remount-ro 0       1
/dev/sda1       /boot           ext2    defaults        0       2

 

A zase zmeny uložíme CTRL+O, ENTER a CTRL+X

A posledný krok, ktorý urobíme je generovanie zavádzacieho súboru initramfs:

update-initramfs -u

Keď skončí, môžeme reštartovať počítač a držať si palce. Po reštarte by mal systém pýtať od nás heslo na odomknutie a po jeho správnom zadaní by mal nabehnúť. Pre riešenie prípadných problémov bude treba nabootovať z LIVE CD/USB a vykonať tieto počiatočné kroky:

sudo cryptsetup luksOpen /dev/sda2 root

sudo mount /dev/mapper/root /mnt

sudo mount /dev/sda1 /mnt/boot

sudo cp /etc/resolv.conf /mnt/etc/

sudo chroot /mnt/

mount -t proc proc /proc

mount -t sysfs sys /sys

mount -t devpts devpts /dev/pts

Aj napriek tomu, že tento návod bol pomerne zložitý, dúfam, že som vás neodradil a že sa vám to podarilo úspešne sprevádzkovať. V prípade otázok je pod článkom priestor na komentáre. Ak sa vám tento článok zdal zložitý a chceli by ste chrániť svoje citlivé dáta v operačnom systéme Linux, tak si určite prečítajte budúci článok, v ktorom sa budeme venovať šifrovaniu domovského (/home) priečinka, ktorý obsahuje väčšinu citlivých užívateľských dát.

Rada na záver

Doporučujem zálohovať si hlavičku šifrovanej oblasti pre prípad, že by sa mohla v budúcnosti poškodiť. Ak by došlo k poškodeniu hlavičky, nebolo by možné dáta dešifrovať. So zálohou a s poznaním odomykacieho hesla, ktoré bolo platné počas vytvárania zálohy je možné hlavičku v budúcnosti obnoviť a obnoviť tak aj prístup k dátam. Hlavičku si zálohujeme príkazom:

sudo cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file <súbor>

kde <súbor> je cesta k súboru so zálohou.

Ak chcete obnoviť hlavičku so zálohy, môžete tak urobiť príkazom:

sudo cryptsetup luksHeaderRestore /dev/sda2 --header-backup-file <súbor>

Ivan Králik

Vyjadrite váš názor v komentároch