Dm-crypt
Festplatte verschlüsseln
Eine komplett verschlüsselte Festplatte kann in vielen Fällen sinnvoll sein. Zum Beispiel kann es sehr schnell passieren, dass der private Laptop mit den privaten Daten irgendwo liegen gelassen oder geklaut wird. In solchen Fällen ist es immer besser, wenn niemand auf die Daten zugreifen kann.
Für alle folgenden Schritte wird keine Haftung übernommen! Es wird empfohlen, vorher ein komplettes Backup aller wichtigen Daten zu erstellen.
Partitionslayout festlegen
Die Festplatte (in meinem Fall /dev/sda) sollte für alle folgenden Schritte folgendermaßen partitioniert sein:
/dev/sda1 -> /boot (32-64MB, bis zu 100MB) /dev/sda2 -> swap (je nach Größe des Arbeitsspeichers, 1,2 x Arbeitsspeicher) /dev/sda3 -> / (10-15GB, ggf. 20?) /dev/sda4 -> /home
Die Größe der einzelnen Partitionen kann variieren.
Crypto-Devices anlegen
Das Ver- und Entschlüsseln wird über das Kryptographie-Modul des Devicemappers des Kernels abgewickelt. Dieser stellt uns ein virtuelles Device zu Verfügung, über das auf die verschlüsselten Partitionen zugegriffen werden kann. Den Verschlüsselungsalgorithmus, die Größe des Schlüssels und viele weitere Dinge die die Verschlüsselung beeinflussen, können selber festgelegt werden. Nähere Informationen zu den verfügbaren Parametern gibt es hier auf der Seite von dm-crypt [1] Informationen über die Geschwindigkeit der einzelnen Algorithmen gibt es hier [2] übersichtlich dargestellt. Für die folgenden Verschlüsselung wurde der AES-Algorithmus mit SHA-256 als Hash und mit einer Schlüssellänge von 256 Bit gewählt.
Anlegen des Crypto-Devices:
# cryptsetup luksFormat /dev/sda3 --cipher aes-cbc-essiv:sha256 --verify-passphrase --key-size 256 -> Passwort zweimal eingeben. ACHTUNG: Das Passwort sollte ausreichend lang sein, also mindestens 16 stellig.
Hinweis: Da das Passwort während des Bootvorgangs abgefragt wird steht noch keine deutsche Tastaturbelegung zur Verfügung. Es stehen also keine Umlaute (ä;ö;ü;ß) zur Verfügung und Sonderzeichen sowie y und z befinden sich auf anderen Tasten. Um Probleme zu vermeiden sollte das Passwort mit der amerikanischen Tastaturbelegung erstellt werden.
Öffnen des eben erstellten Crypto-Devices:
# mkdir /mnt/root # cryptsetup luksOpen /dev/sda3 root -> Passwort eingeben
Formatieren und mounten der Partition:
# mke2fs -j /dev/mapper/root (mit ext3) # mount /dev/mapper/root /mnt/root
Für die home-Partition wollen wir kein extra Passwort verwenden, sondern ein Keyfile, damit wir nicht bei jedem Start des Systems zwei Passwörter eingeben müssen. Das Keyfile für die Home-Partition legen wir in /crypto/home.key ab. Allerdings ist es sehr wichtig dieses Keyfile zu sichern. Sollte die Root-Partition einmal beschädigt und nicht wiederherstellbar sein, ist die Home-Partition mit allen Daten ebenfalls verloren. Eine andere Möglichkeit wäre es auch hier eine 16-stelliges Passwort zu benutzen, dieses in der /etc/crypttab anzugeben und es an einem sehr sicheren Ort aufzubewahren. So muss das Passwort nicht auf einem physikalischen Datenträger abgelegt werden. Man kann es sich entweder merken oder z.B. in einem Bankschließfach ablegen ;)
Das Keyfile erstellen wir uns zufällig, indem wir einen 2048 Byte großen Block aus /dev/urandom kopieren.
# mkdir /mnt/root/crypto # dd if=/dev/urandom of=/mnt/root/crypto/home.key bs=1k count=2
Anlegen des Crypto-Devices:
# cryptsetup luksFormat /dev/sda4 /mnt/root/crypto/home.key --cipher aes-cbc-essiv:sha256 --key-size 256
# cryptsetup luksOpen /dev/sda4 home --key-file /mnt/root/crypto/home.key
Formatieren und mounten der Partition:
# mke2fs -j /dev/mapper/home (mit ext3) # mkdir /mnt/root/home # mount /dev/mapper/home /mnt/root/home
ArchLinux installieren
Zuerst müssen wir noch unsere Boot-Partition erstellen und mounten.
# mke2fs /dev/sda1 # mkdir /mnt/root/boot # mount /dev/sda1 /mnt/root/boot
Um eine Verbindung zum Internet aufbauen zu können, muss eine IP-adresse beim Router angefragt werden.
# dhcpcd eth0
Jetzt kopieren wir alle wichtigen Dateien für das System in unsere verschlüsselte root-Partition.
# /arch/quickinst ftp /mnt/root ftp://ftp.archlinux.org/current/os/i686
bzw.
# /arch/quickinst ftp /mnt/root ftp://ftp.archlinux.org/current/os/x86_64
Nun brauchen wir für das neue System auch noch einen Kernel.
# /mnt/root/usr/bin/pacman.static -r /mnt/root --config /tmp/pacman.conf -S kernel26
Und damit wir das System nachher auch bequem starten können einen Bootloader, in diesem Fall nehmen wir Grub.
Zuerst mounten wir alle wichtigen Systemverzeichnisse,
# mount -o bind /dev /mnt/root/dev # mount -o bind /proc /mnt/root/proc # mount -o bind /sys /mnt/root/sys
und wechseln mit chroot das Root-Verzeichnis.
# chroot /mnt/root /bin/bash
Schnell Grub installieren.
# install-grub /dev/sda /dev/sda1
Damit dürfte das System im Prinzip schon einsatzbereit sein. Das initrd-image erkennt automatisch die verschlüsselte Partition und fragt nach dem Passwort. Sollte das nicht der Fall sein, muss noch mit mkinitcpio ein neues initrd-image erstellt werden, welches den hook für "encrypt" enthält. Dieser hook sollte in jedem Fall vor "filesystem" stehen. Dazu die Konfigurationsdatei /etc/mkinitcpio.conf bearbeiten und mit dem Befehl mkinitcpio das neue Image erzeugen.
Den hook encrypt einfügen.
# nano /etc/mkinitcpio.conf
und dann das Image neu schreiben.
# mkinitcpio -g /boot/kernel26.img
Konfiguration anpassen
Damit unser System auch die Home-Partition korrekt einbindet und die Swap-Partition bei jedem Start mit einem neuen zufälligen Schlüssel verschlüsselt, müssen wir noch einige Konfigurationsdateien anpassen.
Zuerst öffnen wir /etc/crypttab und tragen unsere Home-Partition samt Schlüssel, der ja auf der Root-Partition in /crypto/home.key liegt, ein.
# nano /etc/crypttab
# NAME SOURCE DEVICE PASSWORD OPTIONS home /dev/sda4 /crypto/home.key ....
Damit wird bei jedem Systemstart die Home-Partition automatisch geöffnet. Jetzt können wir /dev/mapper/home ganz normal in unsere fstab-Datei eintragen, damit /home auch korrekt gemountet wird.
# nano /etc/fstab
# <file system> <dir> <type> <options> <dump> <pass> /dev/sda1 /boot ext2 defaults 0 0 /dev/mapper/root / ext3 defaults 0 0 /dev/mapper/home /home ext3 defaults 0 0
Hier muss noch darauf geachtet werden, dass die Swap-Partition entweder auskommentiert oder gelöscht wird. Die Verschlüsselung der Swap-Partition erfolgt nun innerhalb des rc.local Startscriptes.
# nano /etc/rc.local
Dort fügen wir folgende Zeilen ein:
cryptsetup -c aes-cbc-essiv:sha256 -h sha256 -s 256 -d /dev/urandom create system-swap /dev/sda2 mkswap /dev/mapper/system-swap swapon /dev/mapper/system-swap
Aufräumen & Neustarten
Zum Schluss müssen wir nur noch alle Partitionen wieder unmounten und die Crypto-Container schließen.
# umount /mnt/root/boot /mnt/root/home /mnt/root # cryptsetup luksClose root # cryptsetup luksClose home # rm -r /mnt/root
Jetzt braucht es nur noch einen Restart und es sollte ein komplett verschlüsseltes ArchLinux starten ;)
# shutdown -r now