Thursday Feb 03, 2022

Jak šifrovat kořenový souborový systém v Linuxu

Jako správce systému již pravděpodobně víte, jak důležité je šifrovat disky.

Pokud by vám byl notebook ukraden, i začínající hacker by byl schopen získat informace obsažené na discích.

Stačí obyčejný USB flash disk s LiveCD a vše by bylo ukradeno.

Naštěstí pro vás existují způsoby, jak tomu zabránit : šifrováním dat uložených na discích.

V tomto návodu si ukážeme kroky potřebné k provedení úplného šifrování systému. Na internetu můžete najít jiné návody zaměřené například na šifrování pouze souborů nebo domovských oddílů.

V tomto případě šifrujeme celý systém, což znamená celý kořenový oddíl a spouštěcí složku. Budeme šifrovat část zavaděče.

Připraveni?“

Obsah

Předpoklady

Pro provedení všech operací podrobně popsaných v tomto návodu je samozřejmě nutné mít práva správce systému.

Pro kontrolu, zda tomu tak je, se ujistěte, že patříte do skupiny „sudo“ (u distribucí založených na Debianu) nebo „wheel“ (u distribucí založených na RedHatu).

Pokud se zobrazí následující výstup, měli byste být v pořádku.

Než budete pokračovat, je důležité, abyste věděli, že šifrování disků není bez rizika.

Proces zahrnuje formátování celého disku, což znamená, že pokud nebudete zálohovat, přijdete o data. V důsledku toho by pro vás mohlo být dobré zálohovat své soubory, ať už se rozhodnete pro zálohování na externím disku nebo v online cloudu.

Pokud si nejste jisti kroky potřebnými k zálohování celého systému, doporučuji vám přečíst si následující návod, který to srozumitelně vysvětluje.

Teď, když je vše připraveno, můžeme začít šifrovat celý náš systém.

Identifikace vaší aktuální situace

Tento návod je rozdělen do tří částí : jedna pro každý scénář, který vás může potkat.

Po identifikaci vaší aktuální situace můžete přímo přejít na kapitolu, která vás zajímá.

Pokud chcete zašifrovat systém, který již obsahuje nezašifrovaná data, máte dvě možnosti :

  • Můžete k počítači nebo serveru přidat další disk a nakonfigurovat jej tak, aby se stal zaváděcím diskem : můžete přejít na část první.
  • Nemůžete k počítači přidat další disk (například notebook v záruce) : potřebné informace najdete v části druhé.

Pokud instalujete zcela nový systém, to znamená, že instalujete distribuci od nuly, můžete celý disk zašifrovat přímo z grafického instalátoru. V důsledku toho můžete přejít k části třetí.

Návrh rozložení pevného disku

Kdykoli vytváříte nové oddíly, ať už šifrované nebo nešifrované, je poměrně důležité zvolit návrh pevného disku předem.

V tomto případě navrhneme náš disk pomocí rozložení MBR : prvních 512 bajtů zaváděcího disku bude vyhrazeno pro první fázi GRUBu (a také pro metadata našich oddílů).

První oddíl bude prázdný oddíl vyhrazený pro systémy používající jako zaváděcí firmware EFI (nebo UEFI). Pokud se v budoucnu rozhodnete nainstalovat systém Windows 10, budete mít oddíl pro něj již k dispozici.

Druhý oddíl našeho disku bude naformátován jako oddíl LUKS-LVM obsahující jeden fyzický svazek (samotný oddíl disku) a také jednu skupinu svazků obsahující dva logické svazky : jeden pro kořenový souborový systém a druhý pro malý odkládací oddíl.

Jak vidíte, druhý stupeň GRUBu bude také zašifrovaný : to proto, že jsme se rozhodli mít spouštěcí složku uloženou na stejném oddílu.

Na zde uvedený návrh se samozřejmě nemusíte omezovat, můžete přidat další logické svazky například pro protokoly.

Tento návrh bude naším plánem pro tento tutoriál : začneme od zcela nového disku a všechny části budeme implementovat společně.

Šifrování dat v klidu

Tento tutoriál se zaměřuje na šifrování dat v klidu. Jak název napovídá, šifrování dat v klidu znamená, že váš systém je zašifrovaný, tj. nikdo z něj nemůže číst, když je v klidu nebo vypnutý.

Toto šifrování je docela užitečné, pokud by vám počítač někdo ukradl, hackeři nebudou moci číst data na disku, pokud nebudou znát přístupovou frázi, kterou si zvolíte v dalších částech.

Stále by však existovalo riziko, že vaše data budou navždy vymazána : to, že nemají přístup ke čtení disku, neznamená, že nemohou jednoduše odstranit oddíly na něm.

V důsledku toho se ujistěte, že máte zálohu svých důležitých souborů na bezpečném místě.

Šifrování kořenového souborového systému na novém disku

Jak bylo podrobně popsáno v úvodu, budeme šifrovat kořenový souborový systém z nového disku, který neobsahuje vůbec žádná data. To je poměrně důležité, protože šifrovaný disk bude v průběhu procesu formátován.

Přejděte k systému, který chcete šifrovat, a připojte nový disk. Nejprve identifikujte svůj současný disk, který se pravděpodobně jmenuje „/dev/sda“, a disk, který jste právě připojili (pravděpodobně se jmenuje „/dev/sdb“).

Pokud máte pochybnosti o shodě názvů a sériových čísel disků, můžete doplnit dodavatele a sériová čísla pomocí volby „-o“ příkazu lsblk.

$ lsblk -do +VENDOR,SERIAL

V tomto případě se disk s daty jmenuje „/dev/sda“ a nový se jmenuje „/dev/sdb“.

Nejprve musíme vytvořit rozložení, které jsme uvedli v úvodu, tedy jeden oddíl, který bude EFI, a jeden oddíl LUKS-LVM.

Vytvoření základního rozložení disku

První krok na naší cestě k úplnému šifrování disku začínáme dvěma jednoduchými oddíly : jedním EFI (i když použijeme MBR, pro případ, že bychom to chtěli v budoucnu změnit) a jedním pro náš LVM.

Pro vytvoření nových oddílů na disku použijte příkaz „fdisk“ a zadejte disk, který chcete naformátovat.

$ sudo fdisk /dev/sdb

Jak bylo vysvětleno v úvodu, první oddíl bude mít velikost 512 Mb a druhý zabere zbývající místo na disku.

V nástroji „fdisk“ můžete vytvořit nový oddíl pomocí volby „n“ a zadat velikost 512 megabajtů pomocí „+512M“.

Nezapomeňte změnit typ oddílu na W95 FAT32 pomocí volby „t“ a jako typ zadejte „b“.

Paráda, nyní máte první oddíl, vytvoříme ten, který nás zajímá.

Vytvoření druhého oddílu je ještě jednodušší.

V nástroji fdisk použijte „n“, abyste vytvořili nový oddíl, a zůstaňte u výchozího nastavení, což znamená, že v každém kroku můžete stisknout „Enter“.

Když jste hotovi, můžete jednoduše stisknout „w“, abyste změny zapsali na disk.

Znovu provedením příkazu „fdisk“ získáte přehled o změnách, které jste na disku provedli.

$ sudo fdisk -l /dev/sdb

Skvělé!

Váš druhý oddíl je připraven k formátování, takže se k němu vydáme.

Vytvoření oddílů LUKS & LVM na disku

Pro šifrování disků budeme používat LUKS, zkratku pro projekt Linux Unified Key Setup.

LUKS je specifikace několika backendů implementovaných v některých verzích linuxového jádra.

V tomto případě budeme používat podmodul „dm-crypt“ linuxového storage stacku.

Jak uvádí jeho název, „dm-crypt“ je součástí modulu mapovače zařízení, jehož cílem je vytvořit vrstvu abstrakce mezi fyzickými disky a způsobem, který si zvolíte pro návrh zásobníku úložišť.

Diagram z thomas-krenn.com

Tato informace je poměrně důležitá, protože znamená, že pomocí backendu „dm-crypt“ můžete šifrovat prakticky každé zařízení.

V tomto případě budeme šifrovat disk, který obsahuje sadu oddílů LVM, ale můžete si zvolit i šifrování paměťové karty USB nebo diskety.

Pro interakci s modulem „dm-crypt“ použijeme příkaz „cryptsetup“.

Je zřejmé, že jej budete muset nainstalovat na svůj server, pokud jej ještě nemáte.

$ sudo apt-get instal cryptsetup$ which cryptsetup

Teď, když máte v počítači k dispozici příkaz cryptsetup, vytvoříte svůj první oddíl naformátovaný na LUKS.

Pro vytvoření oddílu LUKS použijete příkaz „cryptsetup“ a následně příkaz „luksFormat“, který naformátuje zadaný oddíl (nebo disk).

 $ sudo cryptsetup luksFormat --type luks1 /dev/sdb2

Poznámka : proč tedy uvádíme typ formátování LUKS1? Od ledna 2021 GRUB (náš zavaděč) nepodporuje šifrování LUKS2. Nezapomeňte zanechat komentář, pokud si všimnete, že LUKS2 je nyní uvolněn pro zavaděč GRUB.

Jak vidíte, jste upozorněni, že tato operace vymaže všechna data uložená na disku. Naposledy zkontrolujte formátovaný disk a až budete připraveni, zadejte „ANO“.

Hned poté budete vyzváni k zadání přístupové fráze. Systém LUKS používá dvě metody ověřování : metodu založenou na heslové frázi, což je v podstatě heslo, které zadáváte při dešifrování.

LUKS může také používat klíče. Pomocí klíčů je můžete například uložit na část disku a systém se o ně bude moci automaticky starat.

Vyberte si silnou přístupovou frázi, opět ji zadejte a počkejte na dokončení šifrování disku.

Po dokončení můžete příkazem „lsblk“ zkontrolovat, že váš oddíl je nyní zašifrován jako oddíl LUKS.

Úžasné! Nyní máte šifrovaný oddíl.

$ lsblk -f

Chcete-li zkontrolovat, zda je váš oddíl správně naformátován, můžete použít příkaz „cryptsetup“, po kterém následuje volba „luksDump“ a zadejte název šifrovaného zařízení.

$ sudo cryptsetup luksDump /dev/sdb2

Vaše verze by měla být nastavena na „1“ pro formát „LUKS1“ a pod ní byste měli vidět šifrovanou frázi v jednom z míst pro klíče.

Vytvoření šifrovaného LVM na disku

Teď, když je váš oddíl šifrovaný LUKS připraven, můžete jej „otevřít“. „Otevření“ šifrovaného oddílu jednoduše znamená, že budete mít přístup k datům na disku.

Pro otevření šifrovaného zařízení použijte příkaz „cryptsetup“, po kterém následuje příkaz „luksOpen“, název šifrovaného zařízení a jméno.

$ sudo cryptsetup luksOpen <encrypted_device> <name>

V tomto případě jsme zvolili název zařízení „cryptlvm“.

Důsledkem je, že při opětovném použití příkazu „lsblk“ vidíte, že do stávajícího seznamu zařízení bylo přidáno nové zařízení. Druhý oddíl nyní obsahuje zařízení s názvem „cryptlvm“, což je váš dešifrovaný oddíl.

Teď, když je vše připraveno, můžeme začít vytvářet naše dva LVM : jeden pro náš kořenový oddíl a druhý pro swap.

Nejprve vytvoříme fyzický svazek pro náš nový disk pomocí příkazu „pvcreate“.

# Optional, if you don't have LVM commands : sudo apt-get install lvm2$ sudo pvcreate /dev/mapper/cryptlvm

Teď, když je váš fyzický svazek připraven, můžete pomocí něj vytvořit skupinu svazků s názvem „cryptvg“.

$ sudo vgcreate cryptvg /dev/mapper/cryptlvm

Teď, když je skupina svazků připravena, můžete vytvořit své dva logické svazky.

V tomto případě je první oddíl 13Gb a zbývající místo zabere odkládací oddíl. Nezapomeňte tato čísla upravit pro váš konkrétní případ.

Pro umístění našeho kořenového souborového systému vytvoříme na logickém svazku souborový systém EXT4.

$ sudo lvcreate -n lvroot -L 13G cryptvg$ sudo mkfs.ext4 /dev/mapper/cryptvg-lvroot

Vytvoření odkládacího oddílu lze dosáhnout stejnými kroky, tedy pomocí „lvcreate“ a „mkswap“.

$ sudo lvcreate -n lvswap -l 100%FREE cryptvg$ sudo mkswap /dev/mapper/cryptvg-lvswap

Paráda! Nyní, když jsou oddíly vytvořeny, je čas přenést stávající kořenový souborový systém na nově vytvořený.

Přenos celého souborového systému na šifrovaný disk

Před přenosem celého souborového systému by bylo dobré zkontrolovat, zda máte na cílovém disku dostatek místa.

$ df -h 

Pro přenos celého souborového systému na nově vytvořený oddíl použijete příkaz „rsync“.

Připojte nově vytvořený logický svazek a začněte rekurzivně kopírovat soubory a složky na cílový disk.

$ sudo mount /dev/mapper/cryptvg-lvroot /mnt$ sudo rsync -aAXv / --exclude="mnt" /mnt --progress

Tento proces může trvat poměrně dlouho v závislosti na množství dat, která máte přenést.

Po nějaké době by měl být celý váš systém souborů zkopírován na šifrovanou jednotku. Nyní, když je „/boot“ zašifrován, budete muset odpovídajícím způsobem přeinstalovat fázi 1 GRUBu.

Instalace a konfigurace zavaděče GRUB

Proč byste tedy měli odpovídajícím způsobem přeinstalovat a konfigurovat GRUB?

Chcete-li odpovědět na tuto otázku, musíte mít základní představu o způsobu spouštění systému při použití konvenčního zavádění systému BIOS/MBR.

Jak bylo vysvětleno v úvodu, systém GRUB se dělí na dvě (někdy tři) části : GRUB fáze 1 a GRUB fáze 2. Fáze 1 pouze vyhledá umístění fáze 2, která se často nachází ve složce „/boot“ vašeho souborového systému.

Fáze 2 je zodpovědná za mnoho úkolů : načtení potřebných modulů, načtení jádra do paměti a spuštění procesu initramfs.

Jak jste pochopili, fáze 2 je zde zašifrována, takže musíme fázi 1 (umístěné v prvních 512 bajtech vašeho disku) říci, že je třeba ji nejprve dešifrovat.

Přeinstalování stupně 1 GRUBu & 2

Pro přeinstalování prvního stupně GRUBu je nejprve nutné povolit funkci „cryptomount“, která umožňuje přístup k šifrovaným zařízením v prostředí GRUBu.

Chcete-li toho dosáhnout, musíte upravit soubor „/etc/default/grub“ a přidat volbu „GRUB_ENABLE_CRYPTODISK=y“.

V současné době však sedíte na systému, který se snažíte šifrovat. V důsledku toho budete muset provést chroot do nového disku, abyste mohli správně provést příkazy.

Chroot v šifrovaném disku

Chcete-li provést chroot do šifrovaného disku, musíte provést následující příkazy.

Pokud jste tyto příkazy provedli, měli byste se nyní nacházet v kontextu šifrovaného disku.

$ vi /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y

Jak je uvedeno v dokumentaci GRUBu, tato volba nakonfiguruje GRUB tak, aby hledal zašifrovaná zařízení a přidal další příkazy pro jejich dešifrování.

Teď, když je fáze 1 nakonfigurována, můžete ji nainstalovat do MBR pomocí příkazu grub-install.

$ grub-install --boot-directory=/boot /dev/sdb

Poznámka : pozor, je třeba zadat „/dev/sdb“ a ne „/dev/sdb1“.

Jak jste si asi všimli, při nezadání žádné volby pro instalaci GRUBu máte ve výchozím nastavení instalaci „i386-pc“ (která je určena pro firmware založený na BIOSu).

Přeinstalujte fázi GRUB 2

Pomocí výše popsaných kroků byla aktualizována fáze 1, ale musíme také říci fázi 2, že má co do činění se šifrovaným diskem.

Chcete-li toho dosáhnout, přejděte do „/etc/default/grub“ a přidejte další řádek pro vaši fázi GRUB 2.

GRUB_CMDLINE_LINUX="cryptdevice=UUID=<encrypted_device_uuid> root=UUID=<root_fs_uuid>"

Tento řádek je důležitý, protože druhé fázi GRUBu říká, kde se nachází šifrovaný disk a kde kořenový oddíl.

K identifikaci potřebných UUID můžete použít příkaz „lsblk“ s parametrem „-f“.

$ lsblk -f 

Pomocí těchto identifikátorů UUID bychom do konfiguračního souboru GRUB přidali následující řádek.

Chcete-li aktualizovat aktuální instalaci GRUB, můžete v prostředí chroot použít příkaz „update-grub2“.

$ sudo update-grub2

Teď, když jste aktualizovali svou instalaci GRUB, by měla být vaše nabídka GRUB (tj. fáze 2) upravena a při kontrole souboru „/boot/grub/grub.cfg“.

Jak vidíte, konfigurační soubor GRUB byl upraven a váš systém nyní používá „cryptomount“ pro vyhledání šifrovaného disku.

Pro správné spuštění systému je třeba zkontrolovat, že :

  • Načítáte správné moduly, například cryptodisk, luks, lvm a další;
  • Příkaz „cryptomount“ je správně nastaven;
  • Jádro je načteno pomocí příkazu „cryptdevice“, který jsme právě nastavili v předchozí části.
  • Zadané UUID jsou správné : „cryptdevice“ ukazuje na šifrovaný oddíl LUKS2 a „root“ na kořenový souborový systém ext4.

Úprava souborů crypttab a fstab

Jedním z prvních kroků initramfs bude připojení svazků pomocí souborů „/etc/crypttab“ a „/etc/fstab“ na souborovém systému.

V důsledku toho, a protože vytváříte nové svazky, budete možná muset tyto soubory upravit, abyste do nich vložili správné UUID.

Nejprve přejděte do souboru „/etc/crypttab“ (můžete jej vytvořit, pokud ještě neexistuje) a přidejte do něj následující obsah

$ nano /etc/crypttab# <target name> <source device> <key file> <options> cryptlvm UUID=<luks_uuid> none luks

Pokud si nejste jisti UUID šifrovaného zařízení, můžete k jeho zjištění použít příkaz „blkid“.

$ blkid | grep -i LUKS 

Teď, když je soubor crypttab upraven, stačí odpovídajícím způsobem upravit fstab.

$ nano /etc/fstab# <file system> <mount point> <type> <options> <dump> <pass>UUID=<ext4 uuid> / ext4 errors=remount-ro 0 1

Pokud si nejste jisti UUID vašeho souborového systému ext4, můžete opět použít příkaz „blkid“.

$ blkid | grep -i ext4

Téměř hotovo!

Když máte správně nakonfigurovaný GRUB a konfigurační soubory, zbývá už jen nakonfigurovat obraz initramfs.

Znovu nakonfigurujte obraz initramfs

Mezi všemi spouštěcími skripty bude initramfs hledat kořenový souborový systém, který jste zadali v předchozí kapitole.

Pro dešifrování kořenového souborového systému však bude muset vyvolat správné moduly initramfs, konkrétně modul „cryptsetup-initramfs“. Ve svém chrootovaném prostředí můžete provést následující příkaz :

$ apt-get install cryptsetup-initramfs 

Pro zahrnutí modulů cryptsetup do obrazu initramfs nezapomeňte provést příkaz „update-initramfs“.

$ update-initramfs -u -k all

To je vše!

Úspěšně jste sestavili všechny potřebné části, abyste mohli v systému vytvořit plně šifrovaný disk. Nyní můžete restartovat počítač a podívat se na nový proces spouštění.

Spuštění na šifrovaném zařízení

Při spouštění se na první obrazovce zobrazí první fáze GRUBu, která se snaží dešifrovat druhou fázi GRUBu.

Pokud se zobrazí tato výzva k zadání hesla, znamená to, že v konfiguraci první fáze nemáte žádné chyby.

Poznámka : uvědomte si, že tato obrazovka nemusí odpovídat vašemu obvyklému rozložení klávesnice. V důsledku toho, pokud se zobrazí nesprávná výzva k zadání hesla, zkuste předstírat, že máte například americkou klávesnici nebo klávesnici AZERTY.

Po zadání správného hesla se zobrazí nabídka GRUB.

Pokud se zobrazí tato obrazovka, znamená to, že se vašemu stupni 1 podařilo otevřít stupeň druhý. Můžete vybrat možnost „Ubuntu“ a spustit systém.

Na další obrazovce budete opět požádáni o zadání přístupové fráze.

To je zcela normální, protože váš zaváděcí oddíl je šifrovaný. V důsledku toho potřebujete jednu heslovou frázi pro odemknutí fáze 2 a jednu pro odemknutí celého kořenového souborového systému.

Naštěstí existuje způsob, jak se tomu vyhnout : pomocí souboru s klíčem vloženého do obrazu initramfs. Přispěvatelé ArchLinuxu k tomu napsali vynikající návod.

V tomto případě pouze zadáme přístupovou frázi a stiskneme Enter.

Po chvíli, až bude proces init dokončen, by se vám měla zobrazit zamykací obrazovka uživatelského rozhraní!

Gratulujeme, úspěšně jste zašifrovali celý systém v Linuxu!

Šifrování kořenového souborového systému na existujícím disku

V některých případech se může stát, že budete muset zašifrovat existující disk bez možnosti odebrání jednoho z disků v počítači. Tento případ může nastat, pokud máte například disk v záruce.

V tomto případě je postup poměrně jednoduchý :

  • Vytvořte bootovací USB (nebo vyměnitelné zařízení) obsahující ISO vybrané distribuce;
  • Použijte toto zařízení za účelem spuštění a přihlášení do LiveCD vaší distribuce;
  • Z LiveCD identifikujte pevný disk obsahující vaši kořenovou distribuci a vytvořte jeho zálohu;
  • Připojte primární oddíl do zvolené složky a postupujte podle pokynů v předchozí kapitole;

Proč tedy potřebujete použít LiveCD, pokud chcete šifrovat nevyměnitelný disk?

Pokud byste chtěli zašifrovat hlavní primární disk, museli byste jej odpojit. Protože se však jedná o kořenový oddíl systému, nebylo by možné jej odpojit, v důsledku čehož musíte použít LiveCD.

Šifrování kořenového souborového systému z průvodce instalací

V některých případech někteří distributoři vkládají proces šifrování přímo do průvodce instalací.

Pokud nechcete přenášet existující souborový systém z jednoho systému do druhého, můžete být v pokušení tuto možnost použít.

Příklad Ubuntu 20.04, instalační proces navrhuje šifrování disku v průvodci konfigurací disku.

Pokud zvolíte tuto možnost, budete mít podobné nastavení jako v předchozích částech. Většina distribucí se však rozhodne složku „/boot“ nešifrovat.

Pokud chcete složku „/boot“ šifrovat, doporučujeme přečíst si první část tohoto návodu.

Řešení problémů

Jelikož se open-source neustále mění, existuje možnost, že se vám systém nepodaří spustit, i když jste pečlivě postupovali podle kroků tohoto návodu.

Jelikož však zdrojů chyb je pravděpodobně nekonečně mnoho a jsou specifické pro každého uživatele, nemělo by smysl vyjmenovávat všechny problémy, na které můžete narazit.

Většinou je však poměrně důležité vědět, na kterém kroku zaváděcího procesu selháváte.

Pokud se zobrazí obrazovka s výzvou „grub rescue“, pravděpodobně to znamená, že jste se zasekli na stupni 1, tedy že zavaděč nebyl schopen najít disk obsahující druhý stupeň.

Pokud se zobrazí výzva initramfs, pravděpodobně to znamená, že se během procesu init stalo něco špatného :

  • Jste si jisti, že jste v souborech crypttab a fstab zadali souborové systémy k připojení?
  • Jste si jisti, že v obraze initramfs byly aktuálně načteny všechny moduly? Nechybí vám například moduly cryptsetup nebo lvm?

Níže jsou uvedeny některé zdroje, které nás při psaní tohoto návodu zaujaly, možná v nich najdete odpovědi na vaše problémy :

  • Šifrování celého systému : podobný návod pro ArchLinux;
  • Ruční šifrování systému v Ubuntu : kroky použité pro chroot v kořenovém souborovém systému.

Závěr

V tomto tutoriálu jste se dozvěděli, jak můžete zašifrovat celý kořenový souborový systém se složkou „/boot“ pomocí specifikace LUKS.

Dozvěděli jste se také o zaváděcím procesu Linuxu a o různých krocích, kterými systém prochází, aby se spustil operační systém.

V tomto tutoriálu jste se dozvěděli, jak šifrovat celý kořenový souborový systém se složkou „/boot“.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

Back to Top