Sådan krypteres rodfilssystemet på Linux

Som systemadministrator ved du sikkert allerede, hvor vigtigt det er at kryptere dine diske.

Hvis din bærbare computer bliver stjålet, vil selv en uerfaren hacker være i stand til at udtrække de oplysninger, der er indeholdt på diskene.

Det kræver blot et simpelt USB-stik med en LiveCD på, og alt ville være stjålet.

Gluksomt nok for dig er der måder, hvorpå du kan forhindre dette i at ske : ved at kryptere data gemt på dine diske.

I denne vejledning vil vi se de trin, der er nødvendige for at udføre en fuld systemkryptering. Du kan finde andre vejledninger online, der fokuserer på at kryptere blot en fil eller hjemmepartitioner for eksempel.

I dette tilfælde krypterer vi hele systemet, hvilket betyder hele rodpartitionen og opstartsmappen. Vi vil kryptere en del af bootloaderen.

Klar?

Indholdsfortegnelse

Forudsætninger

For at kunne udføre alle de operationer, der er beskrevet i denne vejledning, skal du naturligvis have systemadministratorrettigheder.

For at kontrollere, at dette er tilfældet, skal du sikre dig, at du tilhører gruppen “sudo” (for Debian-baserede distributioner) eller “wheel” (på RedHat-baserede distributioner).

Hvis du ser følgende output, så burde du være klar til at gå i gang.

Hvor du fortsætter, er det vigtigt for dig at vide, at det ikke er uden risiko at kryptere diske.

Processen indebærer formatering af hele din disk, hvilket betyder, at du vil miste data, hvis du ikke tager en sikkerhedskopi af den. Som følge heraf kan det være en god idé for dig at tage backup af dine filer, uanset om du vælger at gøre det på et eksternt drev eller i en online cloud.

Hvis du ikke er sikker på de trin, der er nødvendige for at tage backup af hele dit system, anbefaler jeg, at du læser den følgende vejledning, der forklarer det i klare vendinger.

Nu, hvor alt er indstillet, kan vi begynde at kryptere hele vores system.

Identificer din nuværende situation

Denne vejledning er opdelt i tre dele : en for hvert scenarie, som du kan stå over for.

Når du har identificeret din nuværende situation, kan du navigere direkte til det kapitel, som du er interesseret i.

Hvis du ønsker at kryptere et system, der allerede indeholder ukrypterede data, har du to muligheder :

  • Du kan tilføje en ekstra disk til din computer eller server og konfigurere den til at blive den opstartbare disk : du kan gå til del et.
  • Du kan ikke tilføje en ekstra disk til din computer (f.eks. en bærbar computer under garanti) : du finder de nødvendige oplysninger i del to.

Hvis du installerer et helt nyt system, hvilket betyder at du installerer distributionen fra bunden, kan du kryptere hele din disk direkte fra det grafiske installationsprogram. Som følge heraf kan du gå til del tre.

Design Harddisklayout

Når du opretter nye partitioner, krypteret eller ej, er det ret vigtigt at vælge harddiskenes design på forhånd.

I dette tilfælde vil vi designe vores disk ved hjælp af et MBR-layout : de første 512 bytes af den opstartbare disk vil være reserveret til det første trin af GRUB (samt metadata for vores partitioner).

Den første partition vil være en tom partition, der er reserveret til systemer, der bruger EFI (eller UEFI) som opstartsfirmware. Hvis du vælger at installere Windows 10 i fremtiden, vil du allerede have en partition til rådighed til det.

Den anden partition på vores disk vil blive formateret som en LUKS-LVM-partition, der indeholder et fysisk volumen (selve diskpartitionen) samt en volumengruppe, der indeholder to logiske volumener : en til rodfilssystemet og en anden til en lille swap-partition.

Som du kan se, vil den anden fase af GRUB også være krypteret : det skyldes, at vi har valgt at have bootmappen gemt på den samme partition.

Du er naturligvis ikke begrænset til det design, der er givet her, du kan f.eks. tilføje yderligere logiske volumener til dine logfiler.

Dette design vil være vores køreplan for denne vejledning : vi starter fra en helt ny disk og implementerer alle delene sammen.

Data-at-rest-kryptering

Denne vejledning fokuserer på data-at-rest-kryptering. Som navnet siger, betyder data-at-rest-kryptering, at dit system er krypteret, dvs. at ingen kan læse fra det, når det hviler eller er slukket.

Denne kryptering er ganske nyttig, hvis din computer skulle blive stjålet, hackere vil ikke kunne læse data på disken, medmindre de kender til den passphrase, som du vil vælge i de næste afsnit.

Der ville dog stadig være en risiko for, at dine data bliver slettet for evigt : at de ikke har læseadgang til en disk betyder ikke, at de ikke bare kan fjerne partitioner på den.

Som følge heraf skal du sørge for at opbevare en sikkerhedskopi af dine vigtige filer et sikkert sted.

Kryptering af rodfilssystemet på ny disk

Som beskrevet under indledningen vil vi kryptere rodfilssystemet fra en ny disk, som ikke indeholder nogen data overhovedet. Dette er ret vigtigt, fordi den krypterede disk vil blive formateret i processen.

Gå over til det system, som du vil kryptere, og sæt den nye disk i. Først og fremmest skal du identificere din nuværende disk, som sandsynligvis hedder “/dev/sda”, og den disk, du lige har sat i (som sandsynligvis hedder “/dev/sdb”).

Hvis du er i tvivl om overensstemmelsen mellem navne og diskens serienumre, kan du tilføje leverandører og serienumre med “-o”-indstillingen i lsblk.

$ lsblk -do +VENDOR,SERIAL

I dette tilfælde hedder disken med data “/dev/sda”, og den nye hedder “/dev/sdb”.

Først og fremmest skal vi oprette det layout, vi angav i indledningen, dvs. en partition, der skal være en EFI-partition og en LUKS-LVM-partition.

Skabelse af grundlæggende disklayout

Det første skridt på vores rejse mod fuld disk-kryptering starter med to enkle partitioner : en EFI-partition (selv om vi bruger MBR, hvis du ønsker at ændre i fremtiden) og en til vores LVM.

For at oprette nye partitioner på din disk skal du bruge kommandoen “fdisk” og angive den disk, der skal formateres.

$ sudo fdisk /dev/sdb

Som forklaret i indledningen vil den første partition være en partition på 512 Mb, og den anden vil tage den resterende plads på disken.

I værktøjet “fdisk” kan du oprette en ny partition med “n”-indstillingen og angive en størrelse på 512 megabyte med “+512M”.

Sørg for at ændre partitionstypen til W95 FAT32 ved hjælp af indstillingen “t” og angiv “b” som type.

Awesome, nu hvor du har din første partition, skal vi oprette den, vi er interesseret i.

Det er endnu enklere at oprette den anden partition.

I fdisk-værktøjet skal du bruge “n” for at oprette en ny partition og holde dig til standardindstillingerne, hvilket betyder, at du kan trykke på “Enter” på hvert trin.

Når du er færdig, kan du blot trykke på “w” for at skrive ændringerne til disken.

Nu vil du ved at udføre kommandoen “fdisk” igen få et godt overblik over de ændringer, du har foretaget på disken.

$ sudo fdisk -l /dev/sdb

Godt!

Din anden partition er klar til at blive formateret, så lad os gå i gang med den.

Skabelse af LUKS & LVM-partitioner på disken

For at kryptere diske skal vi bruge LUKS, en forkortelse for Linux Unified Key Setup-projektet.

LUKS er en specifikation for flere backends, der er implementeret i nogle versioner af Linux-kernen.

I dette tilfælde skal vi bruge undermodulet “dm-crypt” i Linux-lagringsstakken.

Som navnet antyder, er “dm-crypt” en del af device mapper-modulet, der har til formål at skabe et abstraktionslag mellem dine fysiske diske og den måde, du vælger at designe din storage stack på.

Diagram fra thomas-krenn.com

Denne information er ret vigtig, fordi det betyder, at du kan kryptere stort set alle enheder ved hjælp af “dm-crypt”-backend’en.

I dette tilfælde vil vi kryptere en disk, der indeholder et sæt LVM-partitioner, men du kan også vælge at kryptere en USB-hukommelsespind eller en diskette.

For at interagere med modulet “dm-crypt” skal vi bruge kommandoen “cryptsetup”.

Du skal naturligvis installere den på din server, hvis du ikke allerede har den.

$ sudo apt-get instal cryptsetup$ which cryptsetup

Nu, hvor cryptsetup er tilgængelig på din computer, skal du oprette din første LUKS-formaterede partition.

For at oprette en LUKS-partition skal du bruge kommandoen “cryptsetup” efterfulgt af kommandoen “luksFormat”, der formaterer den angivne partition (eller disk).

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

Note : hvorfor angiver vi så LUKS1-formateringstypen? Fra og med januar 2021 understøtter GRUB (vores bootloader) ikke LUKS2-kryptering. Sørg for at efterlade en kommentar, hvis du bemærker, at LUKS2 nu er frigivet til GRUB bootlader.

Som du kan se, får du besked om, at denne operation vil slette alle data, der er gemt på disken. Kontroller den disk, som du formaterer, en sidste gang, og skriv “YES”, når du er klar.

Derpå bliver du bedt om at angive en adgangsfrase. LUKS anvender to autentifikationsmetoder : en passphrase-baseret, som i det væsentlige er en adgangskode, som du indtaster ved dekryptering.

LUKS kan også bruge nøgler. Ved at bruge nøgler kan du f.eks. gemme den på en del af din disk, og dit system vil automatisk kunne passe på den.

Vælg en stærk passphrase, indtast den igen og vent til disk-krypteringen er færdig.

Når du er færdig, kan du med kommandoen “lsblk” kontrollere, at din partition nu er krypteret som en LUKS-partition.

Vildt! Du har nu en krypteret partition.

$ lsblk -f

For at kontrollere, at din partition er korrekt formateret, kan du bruge kommandoen “cryptsetup” efterfulgt af “luksDump”-indstillingen og angive navnet på den krypterede enhed.

$ sudo cryptsetup luksDump /dev/sdb2

Din version bør være indstillet til “1” for “LUKS1”-formatet, og du bør se under den krypterede passphrase i et af nøglelottene.

Skabelse af krypteret LVM på disk

Nu, hvor din LUKS-krypterede partition er klar, kan du “åbne” den. At “åbne” en krypteret partition betyder simpelthen, at du vil få adgang til data på disken.

For at åbne din krypterede enhed skal du bruge kommandoen “cryptsetup” efterfulgt af “luksOpen”, navnet på den krypterede enhed og et navn.

$ sudo cryptsetup luksOpen <encrypted_device> <name>

I dette tilfælde har vi valgt at navngive enheden “cryptlvm”.

Som følge heraf kan du ved at bruge kommandoen “lsblk” igen se, at der blev tilføjet en ny enhed til den eksisterende enhedsliste. Den anden partition indeholder nu en enhed med navnet “cryptlvm”, som er din dekrypterede partition.

Nu hvor alt er klar, kan vi begynde at oprette vores to LVM : en til vores rodpartition og en til swap.

Først og fremmest skal vi oprette et fysisk volumen til vores nye disk ved hjælp af kommandoen “pvcreate”.

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

Nu, hvor din fysiske volumen er klar, kan du bruge den til at oprette en volumegruppe ved navn “cryptvg”.

$ sudo vgcreate cryptvg /dev/mapper/cryptlvm

Nu, hvor din volumegruppe er klar, kan du oprette dine to logiske volumener.

I dette tilfælde er den første partition en 13 Gb-partition, og swap-partitionen vil tage den resterende plads. Sørg for at ændre disse tal til dit specifikke tilfælde.

For at være vært for vores rodfilesystem skal vi oprette et EXT4-filsystem på den logiske volumen.

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

Opretning af swap-partitionen kan opnås ved hjælp af de samme trin, ved hjælp af “lvcreate” og “mkswap” en.

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

Awesome! Nu hvor dine partitioner er oprettet, er det tid til at overføre dit eksisterende rodfilesystem til den nyoprettede.

Transfer Entire Filesystem to Encrypted Disk

Hvor du overfører hele dit filsystem, kan det være en god idé at kontrollere, at du har nok plads på destinationsdrevet.

$ df -h 

For at overføre hele dit filsystem til din nyoprettede partition skal du bruge kommandoen “rsync”.

Mount dit nyoprettede logiske volumen, og begynd at kopiere dine filer og mapper rekursivt til destinationsdrevet.

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

Denne proces kan tage en del tid, afhængigt af mængden af data, som du skal overføre.

Efter et stykke tid bør hele dit filsystem være kopieret til dit krypterede drev. Nu hvor “/boot” er krypteret, skal du geninstallere trin 1 af GRUB i overensstemmelse hermed.

Installer og konfigurer GRUB Bootloader

Så, hvorfor skal du geninstallere og rekonfigurere din GRUB i overensstemmelse hermed?

For at besvare dette spørgsmål skal du have en grundlæggende idé om, hvordan dit system starter op, når du bruger en BIOS/MBR konventionel opstartsproces.

Som forklaret i indledningen er GRUB opdelt i to (nogle gange tre) dele : GRUB stage 1 og GRUB stage 2. Stage 1 leder kun efter placeringen af stage 2, som ofte ligger i mappen “/boot” i dit filsystem.

Stage 2 er ansvarlig for mange opgaver : indlæsning af de nødvendige moduler, indlæsning af kernen i hukommelsen og start af initramfs-processen.

Som du har forstået, er stage 2 krypteret her, så vi skal fortælle stage 1 (som ligger i de første 512 bytes på din disk), at den skal dekrypteres først.

Geninstaller GRUB Stage 1 & 2

For at geninstallere det første trin af GRUB skal du først aktivere “cryptomount”, der muliggør adgang til krypterede enheder i GRUB-miljøet.

For at opnå dette skal du redigere filen “/etc/default/grub” og tilføje indstillingen “GRUB_ENABLE_CRYPTODISK=y”.

Du sidder dog i øjeblikket på det system, som du forsøger at kryptere. Derfor skal du chroote ind på dit nye drev for at kunne udføre kommandoerne korrekt.

Chroot i krypteret drev

For at chroote ind på dit krypterede drev skal du udføre følgende kommandoer.

Nu, hvor du har udført disse kommandoer, skulle du nu befinde dig i konteksten for dit krypterede drev.

$ vi /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y

Som anført i GRUB-dokumentationen vil denne indstilling konfigurere GRUB til at lede efter krypterede enheder og tilføje yderligere kommandoer for at dekryptere dem.

Nu, hvor trin 1 er konfigureret, kan du installere det på din MBR ved hjælp af kommandoen grub-install.

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

Bemærk : vær forsigtig, du skal angive “/dev/sdb” og ikke “/dev/sdb1”.

Som du sikkert har bemærket, når du ikke angiver nogen indstillinger for GRUB-installationen, har du som standard en “i386-pc”-installation (som er beregnet til en BIOS-baseret firmware).

Geninstaller GRUB Stage 2

Med de ovenfor beskrevne trin er stage 1 blevet opdateret, men vi skal også fortælle stage 2, at den har med en krypteret disk at gøre

For at opnå dette, skal du gå over til “/etc/default/grub” og tilføje endnu en linje til din GRUB stage 2.

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

Dette er en vigtig linje, fordi den fortæller GRUB’s andet trin, hvor det krypterede drev er, og hvor rodpartitionen er placeret.

For at identificere de nødvendige UUID’er kan du bruge kommandoen “lsblk” med “-f”-indstillingen.

$ lsblk -f 

Ved hjælp af disse UUID’er vil vi tilføje følgende linje til GRUB-konfigurationsfilen.

For at opdatere din nuværende GRUB-installation kan du bruge kommandoen “update-grub2” i dit chrooterede miljø.

$ sudo update-grub2

Nu da du har opdateret din GRUB-installation, bør din GRUB-menu (dvs. trin 2) være ændret, og du bør se følgende indhold, når du inspicerer “/boot/grub/grub.cfg”-filen.

Som du kan se, blev GRUB-konfigurationsfilen ændret, og dit system bruger nu “cryptomount” til at lokalisere det krypterede drev.

For at dit system kan starte korrekt op, skal du kontrollere, at :

  • Du indlæser de korrekte moduler såsom cryptodisk, luks, lvm og andre;
  • Instruktionen “cryptomount” er korrekt indstillet;
  • Kernen indlæses ved hjælp af instruktionen “cryptdevice”, som vi netop har indstillet i det foregående afsnit.
  • De angivne UUID er korrekte : den “cryptdevice” peger på den LUKS2-krypterede partition og den “root” peger på ext4-root-filsystemet.

Modificer crypttab- og fstab-filer

Et af de første skridt i initramfs vil være at montere dine volumener ved hjælp af filerne “/etc/crypttab” og “/etc/fstab” på filsystemet.

Som følge heraf, og fordi du opretter nye volumener, kan du blive nødt til at ændre disse filer for at sætte det korrekte UUID i dem.

Først og fremmest skal du gå over til filen “/etc/crypttab” (du kan oprette den, hvis den ikke allerede findes) og tilføje følgende indhold

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

Hvis du ikke er sikker på UUID’et på din krypterede enhed, kan du bruge “blkid” til at få oplysningerne.

$ blkid | grep -i LUKS 

Nu, hvor crypttab-filen er ændret, behøver du kun at ændre fstab i overensstemmelse hermed.

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

Hvis du igen er usikker på UUID’et for dit ext4-filsystem, kan du bruge kommandoen “blkid” igen.

$ blkid | grep -i ext4

Næsten færdig!

Nu hvor dine GRUB- og konfigurationsfiler er konfigureret korrekt, mangler vi kun at konfigurere initramfs-aftrykket.

Re-configure initramfs image

Men blandt alle opstartsscripts vil initramfs lede efter det rodfilesystem, som du angav i det foregående kapitel.

For at dekryptere rodfilssystemet skal den imidlertid påkalde de korrekte initramfs-moduler, nemlig “cryptsetup-initramfs”-modulet. I dit chrooted miljø kan du udføre følgende kommando :

$ apt-get install cryptsetup-initramfs 

For at inkludere cryptsetup-modulerne i dit initramfs-aftryk skal du sørge for at udføre kommandoen “update-initramfs”.

$ update-initramfs -u -k all

Det var det hele!

Du har med succes samlet alle de nødvendige dele for at oprette en fuldt krypteret disk på dit system. Du kan nu genstarte din computer og se din nye opstartsproces.

Boot on Encrypted Device

Når du starter op, er den første skærm, du vil se, GRUB’s første trin, der forsøger at dekryptere GRUB’s andet trin.

Hvis du ser denne adgangskodeprompt, betyder det, at du ikke har nogen fejl i din trin 1-konfiguration.

Bemærk : vær opmærksom på, at denne skærm muligvis ikke følger dit sædvanlige tastaturlayout. Hvis du derfor får en forkert adgangskodeprompt, skal du prøve at lade som om, du f.eks. har et amerikansk tastatur eller et AZERTY-tastatur.

Når du har angivet den korrekte adgangskode, får du vist GRUB-menuen.

Hvis du ser dette skærmbillede, betyder det, at dit trin 1 var i stand til at åbne trin 2. Du kan vælge “Ubuntu” og starte op på dit system.

På det næste skærmbillede bliver du bedt om at angive passphrase igen.

Dette er helt normalt, fordi din bootpartition er krypteret. Som følge heraf har du brug for en passphrase for at låse stage 2 op og en for at låse hele rodfilssystemet op.

Glukkeligvis er der en måde at undgå det på : ved at have en nøglefil indlejret i initramfs-aftrykket. Til det har ArchLinux-bidragyderne skrevet en fremragende tutorial om emnet.

I dette tilfælde skal vi bare angive passphrasen og trykke på Enter.

Efter et stykke tid, når init-processen er færdig, skulle du blive præsenteret for låseskærmen i din brugergrænseflade!

Gratulater, det er lykkedes dig at kryptere et helt system på Linux!

Kryptering af rodfilesystem på eksisterende disk

I nogle tilfælde kan du være nødt til at kryptere en eksisterende disk uden mulighed for at fjerne en af diskene på din computer. Dette tilfælde kan forekomme, hvis du f.eks. har en disk under garanti.

I dette tilfælde er processen ganske enkel :

  • Lav en bootbar USB (eller en flytbar enhed) med en ISO af den distribution du ønsker;
  • Brug enheden til at boote og logge ind på en LiveCD af din distribution;
  • Fra LiveCD’en skal du identificere den harddisk, der indeholder din root-distribution, og lave en sikkerhedskopi af den;
  • Montér den primære partition på en mappe efter eget valg, og følg instruktionerne i det foregående kapitel;

Så hvorfor skal du bruge en LiveCD, hvis du ønsker at kryptere en ikke-aftagelig disk?

Hvis du skulle kryptere din primære hoveddisk, skulle du afmontere den. Men da det er rodpartitionen i dit system, ville du ikke kunne afmontere den, og derfor er du nødt til at bruge en LiveCD.

Kryptering af rodfilssystemet fra installationsguiden

I nogle tilfælde indlejrer nogle distributører krypteringsprocessen direkte i installationsguiden.

Hvis du ikke ønsker at overføre et eksisterende filsystem fra et system til et andet, kan du være fristet til at bruge denne mulighed.

Med Ubuntu 20.04 som eksempel foreslår installationsprocessen disk-kryptering i guiden til diskkonfiguration.

Hvis du vælger denne mulighed, vil du få en lignende opsætning som den, der er foretaget i de foregående afsnit. De fleste distributioner vælger dog ikke at kryptere mappen “/boot”.

Hvis du ønsker at kryptere mappen “/boot”, anbefaler vi, at du læser det første afsnit i denne vejledning.

Fejlfinding

Da open source ændres konstant, er der en chance for, at du ikke er i stand til at starte dit system op, selv om du har fulgt trinene i denne vejledning nøje.

Men da fejlkilderne sandsynligvis er uendelige og specifikke for hver enkelt bruger, ville det ikke give mening at opregne hvert eneste problem, som du kan encouter.

Derimod er det for det meste ret vigtigt at vide, på hvilket trin i opstartsprocessen du fejler.

Hvis du ser en skærm med en “grub rescue”-prompt, betyder det sandsynligvis, at du sidder fast på trin 1, altså at bootloaderen ikke kunne finde disken med andet trin.

Hvis du står i en initramfs-prompt, betyder det sandsynligvis, at der er sket noget forkert under init-processen :

  • Er du sikker på, at du har angivet de filsystemer, der skal monteres i crypttab- og fstab-filerne?
  • Er du sikker på, at alle moduler var aktuelt indlæst i dit initramfs-aftryk? Mangler du f.eks. ikke cryptsetup- eller lvm-modulerne?

Nedenfor er der nogle ressourcer, som vi fandt interessante under udarbejdelsen af denne vejledning, de kan måske have nogle svar på dine problemer :

  • Kryptering af et helt system : en lignende vejledning til ArchLinux;
  • Manuel systemkryptering på Ubuntu : trin, der bruges for at chroot i et root-filsystem.

Konklusion

I denne vejledning lærte du, hvordan du kan kryptere et helt rodfilssystem med mappen “/boot” ved hjælp af LUKS-specifikationen.

Du lærte også om Linux-opstartsprocessen og de forskellige trin, som dit system gennemgår for at starte dit styresystem.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.

Back to Top