Sikkerhed: Krypteret swap- og root-filsystem med LUKS og Ubuntu
2007-02-09 14:10 af Thomas Damgaard Nielsen -
I dette blogindlæg vil jeg fortælle, hvordan jeg har installeret Ubuntu på min laptop med krypteret swap- og root-filsystem(/). Jeg glemte desværre at tage notater under processen, derfor er denne guide skrevet frit fra hukommelsen.
Jeg håber ikke, at der er alt for mange fejl i guiden. Hvis du kaster dig ud i at følge den, hører jeg meget gerne fra dig. Jeg er naturligvis interesseret i at høre om eventuelle fejl.
Før du begynder
Før du begynder skal du bruge følgende:
- En Ubuntu installationscd. Jeg brugte Kubuntu 6.10 Edgy Eft
- En Knoppix-cd. ( meget rar at have, hvis det ikke lige vil boote første gang)
Da kryptering af disken ødelægger eventuelle data der måtte eksistere på disken, er det vigtigt, at du tager backup af dine data, før du går i gang!
Hvis du installerer på en helt ny disk, er det en god ide at følge min guide til at gardere sig mod known-plaintext-angreb.
Partitionering af disken
Før vi kan begynde installationen skal harddisken partitioneres. Der skal (minimum) oprettes følgende partitioner:
- En
/boot-partition på omkring 100M. Denne bliver ikke krypteret og skal bruges til at boot strappe systemet. Denne partition vil jeg i det følgende referere til som/dev/hda2. - En partition på minimum 2500M. Denne partition skal midlertidigt bruges som root (
/) til at installere systemet på fra installationscd’en. Partitionen vil ende med at blive swap-partition. Denne partition vil jeg i det følgende referere til som/dev/hda5. - En stor partition som skal ende med at være krypteret root(
/). Denne partition vil jeg i det følgende referere til som/dev/hda6.
Altså har du nu en partitionstabel som minder lidt om denne:
/dev/hda2 /boot 100MB ext3 /dev/hda5 (no mount point) 40GB /dev/hda6 / 2500MB ext3
Du kan eventuelt partitionere disken direkte fra installationscd’en.
Husk på, at der kun kan være 4 primære partitioner på en disk.
Installation af systemet
Når disken er partitioneret installeres systemet fra cd’en. Hele systemet installeres på /dev/hda5. Du skal sørge for at vælge at installere uden swap-partition. Installationsprogrammet vil muligvis brokke sig lidt over dette og vise dig en advarsel.
Den kan du blot ignorere.
Når systemet er installeret, booter du op og tilføjer universe til din /etc/apt/sources.list.
Kør apt-get update og installer pakkerne:
cryptsetup hashalot initramfs-tools
Tilføj linierne
dm_mod dm_crypt sha256 aes_i586
til filen /etc/initramfs-tools/modules.
Nu skal du opdatere dit initrd-image. Det gør du ved at skrive:
update-initramfs -u all
Oprettelse af krypteret LUKS-partition
Load nødvendіge moduler:
modprobe dm_crypt modprobe sha256 modprobe aes_i586
Opret LUKS-partition:
cryptsetup luksFormat /dev/hda5
Du vil nu få en meget alvorlig advarsel, om at du er ved at ødelægge al data på /dev/hda5, men det vil du jo gerne, så du svarer YES. Herefter indtaster du en passphrase to gange. Denne skal bruges, hver gang du skal boote dit system fremover. Bemærk:
koden kan til enhver tid ændres.
Når LUKS-partitionen er oprettet afslutter cryptsetup med beskeden Command successful.
Nu åbnes den krypterede partition:
cryptsetup luksOpen /dev/hda5 root
Nu oprettes et nyt device: /dev/mapper/root. Dette device er dit krypterede filsystem.
Nu skal du formatere partitionen for at oprette et filsystem. Her bestemmer du naturligvis selv, hvilket filsystem du vil anvende. Jeg bruger ext3 og formaterer derfor med følgende kommando:
mkfs.ext3 -j -O dir_index -m 0 -v /dev/mapper/root
Mount filsystemet:
mount /dev/mapper/root /mnt
Du skal nu kopiere dit installerede system over på det krypterede filsystem:
cp -avx / /mnt
Når systemet er blevet færdigt med at kopiere, skriver du:
mount -o bind /dev /mnt/dev mount -o bind /proc /mnt/proc mount -o bind /sys /mnt/sys chroot /mnt mount /dev/hda2 /boot
Åbn /etc/fstab og find linien med /. Den ser nogenlunde sådan ud:
/dev/hda6 / ext3 defaults,errors=remount-ro 0 1
Den ændrer du til
/dev/mapper/root / ext3 defaults,errors=remount-ro 0 1
Åbn filen /etc/crypttab og tilføj linien:
root /dev/hda5 none cipher=aes-cbc-essiv:sha256
Konfigurering af GRUB
Åbn /boot/grub/menu.lst og tilføj linierne:
title Ubuntu, encrypted root root (hd0,1) kernel /vmlinuz-2.6.17-10-generic root=/dev/mapper/root ro initrd /initrd.img-2.6.17-10-generic quiet savedefault boot
efter linien ### END DEBIAN AUTOMAGIC KERNELS LIST. Du skal muligvis rette kerne-versionen til, så den passer efter din kerne. Jeg bruger 2.6.17.10-generic, hvis du bruger noget andet, skal du naturligvis rette den til det.
Reboot
Nu kan du genstarte og teste dit system ved at skrive reboot.
Når dit system starter op, vil du (forhåbentligt) se, at den stopper ved følgende linie:
Enter LUKS passphrase:
Her skal du indtaste den passphrase, du valgte tidligere. Herefter starter systemet op.
Krypteret swap
Nu har du sådan set et fungerende system med krypteret root-filsystem. Det har bare ikke nogen swap-partition. Hvis du har RAM nok, burde det ikke være det store problem, men hvis du ligesom os andre dødelige ikke har et tocifret antal GB RAM, så vil jeg
anbefale dig at bruge swap. Denne swap-partition skal naturligvis være krypteret. Hvis den ikke er krypteret, kan den ødelægge hele pointen i at køre med krypteret root-filsystem. Når et eller andet program gemmer noget følsomt data i hukommelsen, kan det
til enhver tid “swappes” ud og gemmes på swap-partitionen. Hvis denne er i klartekst, vil fjenden kunne finde dine data her.
Heldigvis er det ret simpelt at opsætte krypteret swap.
Først deaktiverer du swap(dette burde strengt taget ikke være nødvendigt, da du har installeret systemet uden swap. Jeg har blot taget dette skridt med i tilfælde af at nogen følger denne guide delvist):
swapoff -a
Åbn /etc/fstab og tilføj linien:
/dev/mapper/cswap none swap sw 0 0
Åbn /etc/crypttab og tilføj linien:
cswap /dev/hda6 /dev/urandom swap
Skriv:
cryptsetup luksFormat /dev/hda6
Start dit nye krypterede device:
/etc/init.d/cryptdisks start
Aktiver swap:
swapon -a
Beskyttelse mod klartekst-angreb
For at beskytte dig mod klartekst-angreb, er det en god ide at fylde din root-partition op med tilfældig data. Især hvis det er en hel ny disk!
Dette gøres nemt ved at skrive:
dd if=/dev/urandom of=/root/sletmig
Så lader du bare dd køre, indtil disken løber tør for plads. Når det sker, kan du slette filen sletmig.
Du kan holde øje med, hvor langt den er nået ved at skrive
watch df -h
i en anden terminal.
Opdatering 2007-10-08
pug har gjort mig opmærksom på, at der nu er kommet en officiel HOWTO.
Kommentarer
Flytning med komplikationer Interessant essay om DRM i Windows Vista
Hei Thomas.
Takk for en meget bra guide.
Jeg fant et par feil..
I tillegg til cryptsetup hashalot og initramfs-tools, så må man installere aespipe og loop-aes-utils.
Det er skrivefeil blant modprobe linjene. Det skal være modprobe aes_i586 ikke ars_i586.
Jeg hadde også problemer med å følge din guide angående swap. Jeg måtte slette partisjonen med parted så den var unallocated for at det skulle gå. Får ellers melding om at den allerede har et filsystem.
Ellers, en meget god guide. Tusen takk!!
Med vennlig hilsen
M.H fra Norge
— Morten Hersson 2007-03-18 16:59 #
Hej Morten
Min trykfejl i modprobe er hermed rettet. Tak for det :)
Hvilken Ubuntnu-version bruger du?
Jeg brugte Kubuntu 6.10. Måske har noget ændret sig i de nyere versioner?
Jeg husker ikke, at jeg havde brug for at installere pakkerne aespipe og loop-aes-utils.
— Thomas Damgaard Nielsen 2007-03-18 17:06 #
Jeg bruker Ubuntu 6.10.
jeg er ikke helt sikker på om man trenger begge pakkene, men før jeg installerte de, så gikk ikke modprobe aes_i586 fordi den ikke eksisterte.
Du vet vel ikke hvorfor jeg måtte slette swap partisjonen for å få alt til å virke?
— Morten Hersson 2007-03-18 18:40 #
Morten:
Mit bud på, hvorfor du måtte slette swap-partitionen, er, at partitionstypen var forkert. Den skal sikkert være type 83 (Linux), hvor den tidligere var 82 (Linux swap / Solaris).
Jeg kan ikke selv huske, at jeg havde dette problem, men det kan jeg meget vel have haft. Jeg har skrevet guiden ud fra min hukommelse. Jeg vil forsøge at følge den igen på et nyt sytem. Så skal jeg sørge for at rette den til.
Måske vil jeg vente med at prøve den, til den nye Feisty Fawn bliver udgivet i april. Lige nu har jeg installeret Feisty Fawn Herd 5 på et par systemer. Det virker ikke just stabilt endnu.
— Thomas Damgaard Nielsen 2007-03-19 12:02 #
Hej Thomas,
Jeg har prøvet din guide på Feisty Fawn, men uden den store held. Den vil ikke mounte under boot.
Jeg har ikke kunnet finde frem til nogle der har fået det til at virke, og jeg har ingen ide om hvad fejlen kan være :) Alt virker som det skal lige indtil reboote, så kommer den bare ikke længere.
— Christoffer Kjølbæk 2007-04-12 22:53 #
Christoffer: Jeg har ikke selv prøvet på Feisty endnu, men jeg mindes da, at Feisty skulle understøtte LUKS direkte fra installeren.
Jeg vil undersøge dette, når Feisty udkommer (forhåbentligt snart).
— Thomas Damgaard Nielsen 2007-04-13 00:17 #
Det gør den garanteret også, så det er formentligt bare en lille detalje jeg har overset :)
Jeg har i stedet brugt LUKS og pam_mount, hvilket også virker ganske fint:
http://ostehamster.dk/wordpress/?p=22
— Christoffer Kjølbæk 2007-04-13 01:27 #
Der er både korrekte og forkerte ting i ovenstående… jeg foreslår at folk følger guiden på
https://help.ubuntu.com/community/EncryptedFilesystemHowto8
Måske kan det spare nogen for et par timers spild af tid :-). Ellers tak for forsøget Thomas.
— pug 2007-10-08 04:34 #
pug: Tak for din kommentar.
Hvis du har fundet nogle fejl i min guide, vil jeg meget gerne høre, hvor disse er, så jeg kan rette dem.
— Thomas Damgaard 2007-10-08 10:37 #
heh, jeg kan ikke lige huske hvad det var præcist der ikke funkede, men det virkede ihvertfald ikke ;-).
Jeg fulgte den “officielle” guide, den virkede :-)
— pug 2007-10-12 17:44 #