Thursday Feb 03, 2022

Hur man krypterar rotfilssystemet i Linux

Som systemadministratör vet du förmodligen redan hur viktigt det är att kryptera dina diskar.

Om din bärbara dator skulle stjälas skulle till och med en nybörjarhackare kunna utvinna den information som finns på diskarna.

Det räcker med ett enkelt USB-minne med en LiveCD på och allt skulle vara stulet.

Troligt nog för dig finns det sätt för dig att förhindra detta från att hända : genom att kryptera data som lagras på dina diskar.

I den här handledningen kommer vi att se de steg som behövs för att utföra en fullständig systemkryptering. Du kan hitta andra handledningar på nätet som fokuserar på att kryptera bara en fil eller hempartitioner till exempel.

I det här fallet krypterar vi hela systemet vilket innebär hela rotpartitionen och startmappen. Vi kommer att kryptera en del av bootloadern.

Redo?

Innehållsförteckning

Förutsättningar

För att kunna utföra alla åtgärder som beskrivs i den här guiden måste du självklart ha systemadministratörsrättigheter.

För att kontrollera att så är fallet, se till att du tillhör gruppen ”sudo” (för Debianbaserade distributioner) eller ”wheel” (för RedHat-baserade distributioner).

Om du ser följande utdata bör du vara redo att köra.

För att fortsätta är det viktigt att du vet att det inte är helt riskfritt att kryptera diskar.

Processen innebär att hela disken formateras, vilket innebär att du kommer att förlora data om du inte säkerhetskopierar den. Därför kan det vara en bra idé för dig att säkerhetskopiera dina filer, oavsett om du väljer att göra det på en extern enhet eller i ett moln online.

Om du inte är säker på vilka steg som krävs för att säkerhetskopiera hela ditt system rekommenderar jag att du läser följande handledning som förklarar det på ett tydligt sätt.

Nu när allt är inställt kan vi börja kryptera hela vårt system.

Identifiera din nuvarande situation

Denna handledning är uppdelad i tre delar : en för varje scenario som du kan stå inför.

När du har identifierat din nuvarande situation kan du navigera direkt till det kapitel som du är intresserad av.

Om du vill kryptera ett system som redan innehåller okrypterade data har du två valmöjligheter :

  • Du kan lägga till en extra disk till datorn eller servern och konfigurera den så att den blir den startbara disken : du kan gå till del ett.
  • Du kan inte lägga till en extra disk till datorn (en bärbar dator under garanti till exempel) : du hittar den information som behövs i del två.

Om du installerar ett helt nytt system, vilket innebär att du installerar distributionen från grunden, kan du kryptera hela din disk direkt från det grafiska installationsprogrammet. Som en följd av detta kan du gå vidare till del tre.

Design av hårddisklayout

När du skapar nya partitioner, krypterade eller inte, är det ganska viktigt att välja hårddisklayout i förväg.

I det här fallet kommer vi att utforma vår disk med hjälp av en MBR-layout : de första 512 bytes av den startbara disken kommer att reserveras för det första steget av GRUB (samt metadata för våra partitioner).

Den första partitionen kommer att vara en tom partition som är reserverad för system som använder EFI (eller UEFI) som startande firmware. Om du väljer att installera Windows 10 i framtiden kommer du att ha en partition redan tillgänglig för det.

Den andra partitionen på vår disk kommer att formateras som en LUKS-LVM-partition som innehåller en fysisk volym (själva diskpartitionen) samt en volymgrupp som innehåller två logiska volymer: en för rotfilsystemet och en annan för en liten swap-partition.

Som du kan se kommer det andra steget i GRUB också att vara krypterat : detta beror på att vi valde att ha startmappen lagrad på samma partition.

Självklart är du inte begränsad till den design som tillhandahålls här, du kan lägga till ytterligare logiska volymer för dina loggar till exempel.

Den här designen kommer att vara vår färdplan för den här handledningen : vi kommer att börja från en helt ny disk och implementera alla delar tillsammans.

Kryptering av data i vila

Den här handledningen fokuserar på kryptering av data i vila. Som namnet anger innebär data-at-rest-kryptering att ditt system är krypterat, dvs. att ingen kan läsa från det, när det vilar eller är avstängt.

Denna kryptering är ganska användbar om din dator skulle bli stulen, hackare skulle inte kunna läsa data på disken om de inte känner till lösenfrasen som du kommer att välja i nästa avsnitt.

Det skulle dock fortfarande finnas en risk för att dina data raderas för alltid : att inte ha läsbehörighet till en disk betyder inte att de inte helt enkelt kan ta bort partitioner på den.

Som en konsekvens av detta bör du se till att du har en säkerhetskopia av dina viktiga filer på en säker plats.

Kryptering av rotfilssystemet på ny disk

Som beskrivits i inledningen kommer vi att kryptera rotfilssystemet från en ny disk som inte innehåller några data alls. Detta är ganska viktigt eftersom den krypterade disken kommer att formateras i processen.

Hoppa över till systemet som du vill kryptera och koppla in den nya disken. Identifiera först och främst din nuvarande disk, som förmodligen heter ”/dev/sda” och disken som du just har satt in (som förmodligen heter ”/dev/sdb”).

Om du är osäker på korrespondensen mellan namn och diskens serier kan du lägga till säljare och serier med alternativet ”-o” i lsblk.

$ lsblk -do +VENDOR,SERIAL

I det här fallet heter skivan med data ”/dev/sda” och den nya skivan heter ”/dev/sdb”.

Först och främst måste vi skapa den layout som vi angav i inledningen, det vill säga en partition som kommer att vara en EFI-partition och en LUKS-LVM-partition.

Skapa grundläggande disklayout

Det första steget på vår resa mot full disk kryptering börjar med två enkla partitioner : en EFI (även om vi använder MBR, ifall du vill ändra i framtiden) och en för vår LVM.

För att skapa nya partitioner på din disk använder du kommandot ”fdisk” och anger den disk som ska formateras.

$ sudo fdisk /dev/sdb

Som förklarats i inledningen kommer den första partitionen att vara en 512 Mb-partition och den andra kommer att ta det återstående utrymmet på disken.

I verktyget ”fdisk” kan du skapa en ny partition med alternativet ”n” och ange en storlek på 512 megabyte med ”+512M”.

Se till att ändra partitionstypen till W95 FAT32 med alternativet ”t” och ange ”b” som typ.

Awesome, nu när du har din första partition ska vi skapa den vi är intresserade av.

Skapa den andra partitionen är ännu enklare.

I verktyget fdisk använder du ”n” för att skapa en ny partition och håller dig till standardinställningarna, vilket innebär att du kan trycka på ”Enter” vid varje steg.

När du är klar kan du helt enkelt trycka på ”w” för att skriva ändringarna till disken.

Nu kan du utföra kommandot ”fdisk” igen för att få en bra uppfattning om de ändringar som du utförde på disken.

$ sudo fdisk -l /dev/sdb

Snyggt!

Din andra partition är redo att formateras så låt oss gå till den.

Skapa LUKS & LVM-partitioner på disken

För att kryptera diskar kommer vi att använda LUKS, en förkortning för Linux Unified Key Setup project.

LUKS är en specifikation för flera backends som implementeras i vissa versioner av Linuxkärnan.

I det här fallet kommer vi att använda undermodulen ”dm-crypt” i Linux storage stack.

Som namnet anger är ”dm-crypt” en del av modulen device mapper som syftar till att skapa ett abstraktionslager mellan dina fysiska diskar och det sätt du väljer att utforma din lagringsstack.

Diagram från thomas-krenn.com

Denna information är ganska viktig eftersom den innebär att du kan kryptera i stort sett alla enheter med hjälp av ”dm-crypt” backend.

I det här fallet kommer vi att kryptera en disk som innehåller en uppsättning LVM-partitioner, men du kan välja att kryptera ett USB-minne eller en diskett.

För att interagera med modulen ”dm-crypt” kommer vi att använda kommandot ”cryptsetup”.

Självklart kan du behöva installera det på din server om du inte redan har det.

$ sudo apt-get instal cryptsetup$ which cryptsetup

Nu när cryptsetup finns tillgängligt på din dator kommer du att skapa din första LUKS-formaterade partition.

För att skapa en LUKS-partition kommer du att använda kommandot ”cryptsetup” följt av kommandot ”luksFormat” som formaterar den angivna partitionen (eller disken).

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

Notera : så varför anger vi formateringstypen LUKS1? Från och med januari 2021 har GRUB (vår bootloader) inte stöd för LUKS2-kryptering. Se till att lämna en kommentar om du märker att LUKS2 nu släpps för GRUB bootlader.

Som du kan se meddelas du att denna operation kommer att radera alla data som finns lagrade på disken. Kontrollera disken som du formaterar en sista gång och skriv ”YES” när du är klar.

Omedelbart därefter uppmanas du att ange en lösenfras. LUKS använder två autentiseringsmetoder : en lösenordsbaserad som i huvudsak är ett lösenord som du anger vid dekryptering.

LUKS kan också använda nycklar. Genom att använda nycklar kan du till exempel lagra den på en del av din disk och ditt system kommer att kunna ta hand om den automatiskt.

Välj en stark lösenfras, skriv in den igen och vänta på att diskkrypteringen ska slutföras.

När du är klar kan du kontrollera med kommandot ”lsblk” att din partition nu är krypterad som en LUKS-partition.

Grymt! Du har nu en krypterad partition.

$ lsblk -f

För att kontrollera att din partition är korrekt formaterad kan du använda kommandot ”cryptsetup” följt av alternativet ”luksDump” och ange namnet på den krypterade enheten.

$ sudo cryptsetup luksDump /dev/sdb2

Din version bör vara inställd på ”1” för ”LUKS1”-formatet och du bör se nedan den krypterade lösenfrasen i en av keylots.

Skapande av krypterad LVM på disk

Nu när din LUKS-krypterade partition är klar kan du ”öppna” den. Att ”öppna” en krypterad partition innebär helt enkelt att du kommer att få tillgång till data på disken.

För att öppna din krypterade enhet använder du kommandot ”cryptsetup” följt av ”luksOpen”, namnet på den krypterade enheten och ett namn.

$ sudo cryptsetup luksOpen <encrypted_device> <name>

I det här fallet valde vi att ge enheten namnet ”cryptlvm”.

Som en följd av detta kan man genom att använda kommandot ”lsblk” igen se att en ny enhet har lagts till i den befintliga enhetslistan. Den andra partitionen innehåller nu en enhet med namnet ”cryptlvm” som är din dekrypterade partition.

Nu när allt är klart kan vi börja skapa våra två LVM : en för vår rotpartition och en för swap.

För det första ska vi skapa en fysisk volym för vår nya disk med kommandot ”pvcreate”.

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

Nu när din fysiska volym är klar kan du använda den för att skapa en volymgrupp med namnet ”cryptvg”.

$ sudo vgcreate cryptvg /dev/mapper/cryptlvm

Nu när volymgruppen är klar kan du skapa dina två logiska volymer.

I det här fallet är den första partitionen en 13Gb-partition och swap-partitionen tar det återstående utrymmet. Se till att ändra dessa siffror för ditt specifika fall.

För att hysa vårt rotfilsystem ska vi skapa ett EXT4-filsystem på den logiska volymen.

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

Skapa swap-partitionen kan uppnås med samma steg, med hjälp av ”lvcreate” och ”mkswap”.

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

Awesome! Nu när dina partitioner är skapade är det dags för dig att överföra ditt befintliga rootfilesystem till den nyligen skapade.

Transfer Entire Filesystem to Encrypted Disk

Innan du överför hela ditt filsystem kan det vara en bra idé att kontrollera att du har tillräckligt med utrymme på destinationsdisken.

$ df -h 

För att överföra hela ditt filsystem till din nyskapade partition ska du använda kommandot ”rsync”.

Mount din nyskapade logiska volym och börja kopiera dina filer och mappar rekursivt till destinationsdisken.

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

Den här processen kan ta ganska lång tid, beroende på hur mycket data du ska överföra.

Efter ett tag bör hela ditt filsystem kopieras till din krypterade enhet. Nu när ”/boot” är krypterad måste du installera om steg 1 av GRUB i enlighet med detta.

Installera och konfigurera GRUB Bootloader

Så, varför skulle du behöva installera om och konfigurera om din GRUB i enlighet med detta?

För att besvara denna fråga måste du ha en grundläggande uppfattning om hur ditt system startar upp när du använder en konventionell BIOS/MBR-uppstartsprocess.

Som förklaras i inledningen är GRUB uppdelad i två (ibland tre) delar : GRUB stage 1 och GRUB stage 2. Steg 1 letar bara efter platsen för steg 2, som ofta ligger i mappen ”/boot” i ditt filsystem.

Steg 2 ansvarar för många uppgifter: ladda de nödvändiga modulerna, ladda kärnan i minnet och starta initramfs-processen.

Som du förstod är steg 2 krypterat här, så vi måste tala om för steg 1 (som ligger i de första 512 bytesen på din disk) att det måste dekrypteras först.

Re-installera GRUB Stage 1 & 2

För att återinstallera det första steget i GRUB måste du först aktivera ”cryptomount” som möjliggör åtkomst till krypterade enheter i GRUB-miljön.

För att uppnå detta måste du redigera filen ”/etc/default/grub” och lägga till alternativet ”GRUB_ENABLE_CRYPTODISK=y”.

Hur som helst sitter du för närvarande på det system som du försöker kryptera. Som en konsekvens av detta måste du chroota in på din nya enhet för att kunna utföra kommandona korrekt.

Chroot i krypterad enhet

För att chroota in på din krypterade enhet måste du utföra följande kommandon.

När du nu har utfört dessa kommandon bör du nu befinna dig i kontexten för din krypterade enhet.

$ vi /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y

Som anges i GRUB-dokumentationen kommer det här alternativet att konfigurera GRUB så att den letar efter krypterade enheter och lägger till ytterligare kommandon för att dekryptera dem.

Nu när steg 1 är konfigurerat kan du installera det på din MBR med kommandot grub-install.

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

Notera : var försiktig, du måste ange ”/dev/sdb” och inte ”/dev/sdb1”.

Som du förmodligen märkt, när du inte anger några alternativ för GRUB-installationen, har du som standard en ”i386-pc”-installation (som är utformad för en BIOS-baserad firmware).

Nyinstallera GRUB steg 2

Med hjälp av stegen som beskrivs ovan har steg 1 uppdaterats, men vi måste också tala om för steg 2 att den har att göra med en krypterad disk.

För att åstadkomma detta går du över till ”/etc/default/grub” och lägger till ytterligare en rad för ditt GRUB steg 2.

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

Detta är en viktig rad eftersom den talar om för GRUB:s andra steg var den krypterade disken är och var rotpartitionen finns.

För att identifiera de UUID:er som behövs kan du använda kommandot ”lsblk” med alternativet ”-f”.

$ lsblk -f 

Med hjälp av dessa UUID:er skulle vi lägga till följande rad i GRUB-konfigurationsfilen.

För att uppdatera din nuvarande GRUB-installation kan du använda kommandot ”update-grub2” i din chrooted miljö.

$ sudo update-grub2

Nu när du har uppdaterat din GRUB-installation bör din GRUB-meny (dvs. steg 2) ändras och du bör se följande innehåll när du inspekterar ”/boot/grub/grub.cfg”-filen.

Som du kan se ändrades GRUB-konfigurationsfilen och ditt system använder nu ”cryptomount” för att lokalisera den krypterade enheten.

För att ditt system ska starta upp ordentligt måste du kontrollera att :

  • Du laddar in rätt moduler som cryptodisk, luks, lvm och andra;
  • Instruktionen ”cryptomount” är korrekt inställd;
  • Kärnan laddas med hjälp av ”cryptdevice”-instruktionen som vi just ställde in i föregående avsnitt.
  • De angivna UUID:erna är korrekta : ”cryptdevice” pekar på den LUKS2-krypterade partitionen och ”root” pekar på ext4-rotfilsystemet.

Modifiera filerna ”crypttab” och ”fstab”

Ett av de första stegen i initramfs kommer att vara att montera dina volymer med hjälp av filerna ”/etc/crypttab” och ”/etc/fstab” i filsystemet.

Som en följd av detta, och eftersom du skapar nya volymer, kan du behöva ändra dessa filer för att sätta rätt UUID i dem.

Först av allt, gå över till filen ”/etc/crypttab” (du kan skapa den om den inte redan finns) och lägg till följande innehåll

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

Om du inte är säker på UUID:et för din krypterade enhet kan du använda ”blkid” för att få informationen.

$ blkid | grep -i LUKS 

Nu när crypttab-filen är modifierad behöver du bara ändra fstab i enlighet med detta.

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

Också om du inte är säker på UUID:et för ditt ext4-filsystem kan du använda kommandot ”blkid” igen.

$ blkid | grep -i ext4

Nästan klar!

Nu när din GRUB och dina konfigurationsfiler är korrekt konfigurerade behöver vi bara konfigurera initramfs-avbildningen.

Re-configure initramfs image

Mellan alla uppstartsskript kommer initramfs att leta efter rotfilssystemet som du angav i föregående kapitel.

För att dekryptera rotfilssystemet måste det dock åberopa rätt initramfs-moduler, nämligen ”cryptsetup-initramfs”. I din chrooted-miljö kan du utföra följande kommando :

$ apt-get install cryptsetup-initramfs 

För att inkludera cryptsetup-modulerna i din initramfs-avbildning ska du se till att utföra kommandot ”update-initramfs”.

$ update-initramfs -u -k all

Så är det!

Du har lyckats sätta ihop alla nödvändiga delar för att skapa en helt krypterad disk på ditt system. Du kan nu starta om datorn och ta en titt på din nya uppstartsprocess.

Boot on Encrypted Device

När du startar upp är den första skärmen som du kommer att se det första steget i GRUB som försöker dekryptera det andra steget i GRUB.

Om du ser den här lösenordsprompten betyder det att du inte har några fel i din steg 1-konfiguration.

Notera : tänk på att den här skärmen kanske inte följer din vanliga tangentbordslayout. Om du får en uppmaning om ett felaktigt lösenord bör du därför försöka låtsas att du har ett amerikanskt tangentbord eller ett AZERTY-tangentbord till exempel.

När du har angett det korrekta lösenordet kommer du att få se GRUB-menyn.

Om du ser den här skärmen betyder det att ditt steg 1 kunde öppna steg 2. Du kan välja alternativet ”Ubuntu” och starta upp ditt system.

På nästa skärm ombeds du att ange lösenfrasen igen.

Detta är helt normalt eftersom din startpartition är krypterad. Som en konsekvens av detta behöver du en lösenfras för att låsa upp stage 2 och en för att låsa upp hela rotfilssystemet.

Tyvärr finns det ett sätt att undvika detta : genom att ha en nyckelfil inbäddad i initramfs-avbildningen. För detta har ArchLinux bidragsgivare skrivit en utmärkt handledning i ämnet.

I det här fallet ska vi bara ange lösenfrasen och trycka på Enter.

Efter ett tag, när init-processen är klar, bör du presenteras för låsskärmen i ditt användargränssnitt!

Grattis, du har framgångsrikt krypterat ett helt system på Linux!

Kryptering av rotfilsystem på befintlig disk

I vissa fall kan det hända att du måste kryptera en befintlig disk utan att du har möjlighet att ta bort en av diskarna på din dator. Detta fall kan inträffa om du har en disk under garanti till exempel.

I detta fall är processen ganska enkel :

  • Gör en startbar USB-enhet (eller en flyttbar enhet) som innehåller en ISO av den distribution du väljer;
  • Använd enheten för att starta upp och logga in på en LiveCD av din distribution;
  • Från LiveCD:n identifierar du hårddisken som innehåller din rotdistribution och gör en säkerhetskopia av den;
  • Mount den primära partitionen på den mapp du väljer och följ instruktionerna i föregående kapitel;

Så varför behöver du använda en LiveCD om du vill kryptera en icke avtagbar disk?

Om du skulle kryptera din primära huvuddisk måste du avmontera den. Men eftersom det är rotpartitionen i ditt system skulle du inte kunna avmontera den, vilket innebär att du måste använda en LiveCD.

Kryptering av rotfilssystemet från installationsguiden

I vissa fall bäddar vissa distributörer in krypteringsprocessen direkt i installationsguiden.

Om du inte är ute efter att överföra ett befintligt filsystem från ett system till ett annat kan du frestas att använda det här alternativet.

Med Ubuntu 20.04 som exempel föreslår installationsprocessen diskkryptering i diskkonfigurationsguiden.

Om du väljer det här alternativet kommer du att få en liknande installation som den som gjordes i de tidigare avsnitten. De flesta distributioner väljer dock att inte kryptera mappen ”/boot”.

Om du vill kryptera mappen ”/boot” rekommenderar vi att du läser det första avsnittet i denna handledning.

Felsökning

Då öppen källkod ständigt förändras finns det en chans att du inte kan starta upp ditt system, även om du följde stegen i den här handledningen noggrant.

Men eftersom felkällorna troligen är oändliga och specifika för varje användare skulle det inte vara någon idé att räkna upp varje enskilt problem som du kan kryssa.

Hur som helst är det dock ganska viktigt att veta i vilket steg av uppstartsprocessen du misslyckas.

Om du ser en skärm med en ”grub rescue”-prompt betyder det troligen att du har fastnat i steg 1, alltså att starthanteraren inte lyckades hitta disken som innehåller det andra steget.

Om du får en initramfs-prompt betyder det förmodligen att något fel hände under init-processen :

  • Är du säker på att du angav de filsystem som ska monteras i filerna crypttab och fstab?
  • Är du säker på att alla moduler för närvarande var inlästa i din initramfs-avbildning? Saknar du inte till exempel modulerna cryptsetup eller lvm?

Nedan följer några resurser som vi fann intressanta under skrivandet av den här handledningen, de kan ha några svar på dina problem :

  • Kryptera ett helt system : en liknande handledning för ArchLinux;
  • Manuell systemkryptering på Ubuntu : steg som används för att chroota i ett rotfilssystem.

Slutsats

I den här handledningen lärde du dig hur du kan kryptera ett helt rotfilsystem, med mappen ”/boot”, med hjälp av LUKS-specifikationen.

Du har också lärt dig om uppstartsprocessen för Linux och de olika stegen som ditt system genomgår för att starta ditt operativsystem.

Lämna ett svar

Din e-postadress kommer inte publiceras.

Back to Top