Komplett verschlüsselte ArchLinux Grundinstallation mit LUKS und LVM

Auf einem Notebook sind oft private Daten, welche nicht in andere Hände geraten sollen. Deshalb habe ich mein Notebook komplett verschlüsselt. Ich muss mir dann keine Gedanken machen, wenn ich mein Notebook verliere oder es gestohlen wird. Diese Installation legt Logical Volumes auf einer mit LUKS verschlüsselten Partition an.

Ist mein Notebook dafür geeignet?

Neuere Prozessoren verfügen über eine AES Befehlssatzerweiterung mit welcher AES Verschlüsselungen und Entschlüsselungen erheblich beschleunigt werden.

Folgendermassen kann man feststellen, ob eine CPU die AES Befehlssatzerweiterung kennt:

grep -q aes /proc/cpuinfo  && echo Dein Prozessor kennt die AES Befehlssatzerweiterung!

Prüfen, ob das Modul dafür geladen ist:

$ lsmod | grep aes
aesni_intel            43154  18
aes_x86_64              7508  1 aesni_intel
aes_generic            26138  2 aesni_intel,aes_x86_64
cryptd                  8741  6 ghash_clmulni_intel,aesni_intel

Informationen zu diesem Modul anzeigen:

$ modinfo aesni_intel            
filename:       /lib/modules/3.4.4-2-ARCH/kernel/arch/x86/crypto/aesni-intel.ko.gz
alias:          aes
license:        GPL
description:    Rijndael (AES) Cipher Algorithm, Intel AES-NI instructions optimized
alias:          x86cpu:vendor:*:family:*:model:*:feature:*0099*
depends:        cryptd,aes-x86_64,aes_generic
intree:         Y
vermagic:       3.4.4-2-ARCH SMP preempt mod_unload modversions

Eine Liste, welche Programme die AES Befehlssatzerweiterung nutzen können, gibt es bei Wikipedia.

Natürlich kann diese Installation auch bei allen anderen Geräten vorgenommen werden, welche die AES Befehlssatzerweiterung nicht kennen.

ArchLinux herunterladen und auf einen USB-Stick kopieren

Die aktuellste Verion von ArchLinux findet man hier: http://archlinux.puzzle.ch/iso/latest/
Ich bevorzuge das “netinstall-dual” Image, weil dort beide Architekturen (x64 und x86_64) vorhanden sind und alle Pakete direkt vom Internet bezogen werden können.

ISO-Image herunterladen:

$ wget http://archlinux.puzzle.ch/iso/latest/archlinux-2011.08.19-netinstall-dual.iso

Prüfsummen herunterladen:

$ wget http://archlinux.puzzle.ch/iso/latest/sha1sums.txt

ISO-Image mit den Prüfsummen überprüfen:

$ sha1sum --check sha1sums.txt 2> /dev/null | grep OK

Die Ausgabe soll so aussehen:

archlinux-2011.08.19-netinstall-dual.iso: OK

Jetzt kopiert man das Bootfähige ISO-Image auf einen USB-Stick (/dev/sdb enstpricht dem USB-Stick)

$ sudo dd if=archlinux-2011.08.19-netinstall-dual.iso of=/dev/sdb

Sendet man in einem anderen Fenster das Signal 10 (SIGUSR1) an den dd-Prozess, schreibt dd den Zwischenstand auf die Standardausgabe.

$ sudo pkill -USR1 dd

ArchLinux starten

Man bootet vom USB-Stick. Der Username lautet root und benötigt kein Passwort. Ich nutze gerne den vi-Modus in der Shell um effizienter arbeiten zu können:

$ set -o vi

Dann muss noch das Tastaturlayout angepasst werden:

$ km

Als Keymap verwende ich (für die Schweiz) i386/quertz/de_CH-latin1.map.gz und für die Console Font default8x16.psfu.gz.

Festplatten vorbereiten

Wir benötigen zwei Partitionen: Eine Boot-Partition und eine Partition die verschlüsselt wird. Die verschlüsselte Partition wird mit dem Logical Volume Manager (LVM) in mehrere Logical Volumes (LVs) unterteilt.

Partitionierungstool cfdisk starten:

# cfdisk

Mit d werden alle Partitionen gelöscht und dann mit n eine neue angelegt. Die erste Partition ist die Boot-Partition und soll 100MB gross sein. Diese ist Bootbar und vom Type Linux (83). Die zweite Partition ist vom Type Linux LVM (8E) und ist so gross wie der Rest der Platte. Mit W werden die Änderungen gespeichert und mit q wird cfdisk beendet. Am Schluss soll das etwa so aussehen (/dev/sda entspricht der Festplatte):

sda1  Boot  Primary  Linux      100MB
sda2        Primary  Linux LVM  500GB

Festplatte verschlüsseln

Mit cryptsetup kann man die Festplatte verschlüsseln.

# cryptsetup -c aes-xts-plain -y -s 512 luksFormat /dev/sda2

Man wird aufgefordert ein Passwort zweimal einzugeben.

Jetzt kann man die Festplatte entschlüsseln:

# cryptsetup luksOpen /dev/sda2 luks

Im Verzeichnis /dev/mapper/ ist die Festplatte jetzt unter luks verfügbar.

Logical Volume Manager einrichten

Jetzt legt man ein neues Physical Volume (PV) an:

# pvcreate /dev/mapper/luks

Das kann mit pvs und pvdisplay kontrolliert werden.

Danach wird die Volume Group (VG) erstellt:

# vgcreate rootvg /dev/sda2

Das kann mit vgs und vgdisplay kontrolliert werden.

Nun werden mit lvcreate neue Logical Volumes (LVs) angelegt:

# lvcreate -n swap -L 4G -C y rootvg
# lvcreate -n root -L 25G rootvg
# lvcreate -n var  -L 5G  rootvg
# lvcreate -n home -l 100%FREE rootvg

Mit -n kann man dem Logical Volume einen Namen geben. Die Option -C steht für contiguous und stellt sicher, dass die Datenblöcke direkt nacheinander liegen (damit ist das swappen schneller). Mit -L kann man eine fixe Grösse angeben und mit -l ist es möglich die verbleibenden LogicalExtents zu verwenden. Das kann mit lvs und lvdisplay kontrolliert werden.

Netzwerk herstellen

Hat man ein Netzwerkkabel, schliesst man das an und bezieht eine IP-Adresse per DHCP:

# dhclient eth0
# ping archlinux.puzzle.ch

Hat man kein Netzwerkkabel, kann man mit dem wpa_supplicant eine Verbindung über das WLAN herstellen:

# wpa_passphrase deine_essid dein_passwort | tee wpa.cfg
# wpa_supplicant -i wlan0 -c wpa.cfg -B
# dhclient wlan0
# ping archlinux.puzzle.ch

Jetzt ist man parat für die eigentliche Installation.

ArchLinux installieren

0) Setup starten

# /arch/setup

Mit OK bestätigen.

1) Select Source

Select: core-remote
Mirror: http://archlinux.puzzle.ch

Oder einen Mirror aus deiner Nähe auswählen.

2) Set Editor

Select: vi (advanced)

Falls Du vi nicht beherrscht, kannst du nano auswählen.

3) Set clock

1: Select region and timezone
- Europa / Zürich
2: Set time and date
- UTC = Weltzeit
- NTP # Gleicht die Zeit mit einem NTP-Server ab
3: Return

Natürlich an deine Umgebung anpassen. Wenn die Uhr per NTP abgegleicht wird, stimmt sie genau.

4) Prepare Hard Drive(s)

3: Manually Configure block devices, filesystems and mountpoints
- Partition Access Method: dev
- Filesysteme folgendermassen auswählen und konfigurieren:
- Device                      FS Type    Mountpoint   Label
  /dev/sda1                   ext2       /boot        boot
  /dev/mapper/rootvg-swap     swap                    swap
  /dev/mapper/rootvg-root     ext4       /            root
  /dev/mapper/rootvg-var      ext4       /var         var
  /dev/mapper/rootvg-home     ext4       /home        home
- Done
5: Return

Die Filesysteme wurden jetzt angelegt und können verwendet werden.

5) Select Packages

- Bootloader: grub (GRUB bootloader)
- Packages: base

Weitere Pakete können nach der Installation installiert werden.

6) Install Packages

- OK und warten...
- Continue

Die Pakete werden vom ausgewählten Spiegelserver heruntergeladen und installiert. Dies kan eine Weile dauern.

7) Configure System
Datei: /etc/rc.conf

LOCALE="de_CH.UTF-8"
USELVM="yes"
HOSTNAME="eris"

Datei: /etc/fstab

/dev/sda1                /boot  ext2  defaults  0  1
/dev/mapper/rootvg-root  /      ext4  defaults  0  1
/dev/mapper/rootvg-swap  swap   swap  defaults  0  0
/dev/mapper/rootvg-home  /home  ext4  defaults  0  1
/dev/mapper/rootvg-var   /var   ext4  defaults  0  1
tmpfs                    /tmp   tmpfs nodev,nosuid  0  0

Alle Logical Volumes sind bereits automatisch schön eigetragen.

Datei: /etc/mkinitcpio.conf

HOOKS="base udev autodetect pata scsi sata usb usbinput keymap encrypt lvm2 filesystems fsck"

Die Hooks usb und usbinput werden für USB-Tastaturen verwendet. Der Hook keymap wird verwendet, damit man das richtige Tastaturlayout hat. Der Hook encrypt wird zum Entschlüsseln verwendet und lvm2 wird für den Logical Volume Manager benötigt. Wichtig ist, dass man encrypt vor dem lvm2 Hook einfügt.

Datei: /etc/hosts

127.0.0.1       localhost.localdomain   localhost eris

Der Hostname sollte bereits eingetragen sein.

Root-Passwort
Das Root-Passwort mussman zweimal eingeben.

Mit Done beendet man diesen Schritt der Installation.

8) Install Bootloader
Bei der Kernel-Zeile muss man Änderungen vornehmen, damit ArchLinux booten kann:

kernel /vmlinuz-linux cryptdevice=/dev/sda2:rootvg root=/dev/mapper/rootvg-root ro lang=de locale=de_CH.UTF-8

Die Partition /dev/sda2 steht für die LUKS verschlüsselte Partition und rootvg ist der Name der angelegten Volume Group.
Der Bootloader wird in /dev/sda installiert:

Install in /dev/sda

9) Exit Install

OK

ArchLinux wurde jetzt installiert und kann gebootet werden:

# reboot

Viel Spass mit dem komplett verschlüsselten ArchLinux!

Links und weitere Informationen

6 thoughts on “Komplett verschlüsselte ArchLinux Grundinstallation mit LUKS und LVM”

  1. Guter Einstiegs ins Thema ..
    Leider ist Arch bleeding edge .. was bedeutet, dass viele der hiesigen Schritte überholt sind. Kein AIF, kein Grub Legacy.

    Ich musste nach den Schritten hier noch Grub2-bios von CD aus installieren.

    Ach, und danke; endlich mal einer, der mir sagt, wie ich mit diesen checksum files umgehe. 😉

    Reply
    • Hey querwurzelt

      Ja, ich weiss. Seit heute ist der grafische Installer (AIF) nicht mehr vorhanden und Grub ist jetzt auch in Version 2 im Core-Repository.

      Aber es freut mich, dass ich helfen konnte.

      Viel Spass
      Emanuel

      Reply
  2. Ich habe bei der Vorbereitung von LVM nicht /dev/sda2 für vgcreate verwenden können und dann aufgrund des man-Eintrags /dev/mapper/luks wie bei pgcreate davor verwendet. Funktioniert nun bestens, vielen Dank für die Anleitung!

    Reply
  3. Anleitung gefunden, verstanden, konnte es anwenden ohne Probleme.

    Frage: ich boote eine Live-CD (partedmagic)
    dann muss ich ja: modprobe dm-crypt laden
    danach cryptsetup luksOpen /dev/sdx2 luks
    Passwort eingeben.

    Danach dauert es aber ewig.
    Unter Arch direkt dauert es ein paar Sekunden und er bootet weiter. Was mache ich falsch?

    Anregung: Eventuell bald umschreiben wie es ohne AIF geht (sind ja nur ein paar Befehle (pacstrap)) und eventuell auch noch zur Vereinfachung: netcfg für WLAN Verbindung

    Ich bedanke mich sehr für die tolle Anleitung 🙂 Konnte meine Partition direkt verschlüsseln.

    Reply
    • Hallo Nesc

      Schön, dass Dir die Anleitung geholfen hat.

      Das mit der Live-CD wäre schon richtig. Ist das Modul auch richtig geladen? Was sagt “$ lsmod | grep dm_crypt”? Nach der ewigen Zeit, hat es dann funktioniert oder geht es gar nicht?

      Sobald ich mal Arch mit AIF installiere, werde ich auch die Anleitung anpassen bzw. eine neue schreiben. Zudem habe ich jetzt die Grundkonfiguration hier beschrieben: http://emanuelduss.ch/2012/07/arch-linux-grundkofiguration/. Im Abschnitt zu netcfg wird auch WLAN WPA2 mit netcfg beschrieben.

      Freut mich Dir geholfen zu haben und dass deine Daten nun komplett verschlüsselt sind.

      LG
      Emanuel

      Reply

Leave a Comment