Um einen Datenträger zu verschlüsseln und darauf FreeBSD zu installieren, muss man schon einen recht großen Aufwand treiben. Aber wer sein System richtig gut schützen will, sollte sich nicht abschrecken lassen. Vor der Konfiguration sollte man sich ein paar Utensilien bereitlegen: Installations-DVD oder -CD und einen qualitativ hochwertigen USB-Stick (Datensicherheit!). Wichtig ist, dass das BIOS des Rechners eine Option anbietet, um vom USB-Stick booten zu können. Falls diese Möglichkeit nicht gegeben ist, kann man sich alternativ auch eine kleine Partition auf der Festplatte einrichten. Ansonsten ist die Vorgehensweise die gleiche. In Tabelle 1 sind die Gerätebezeichnungen zusammengefasst.
Tabelle 1
Übersicht über Gerätebezeichnungen
Gerät | Bemerkung |
---|---|
Festplatte: Eine SCSI-Festplatte mit ID 0 heißt » |
Diese Platte soll komplett verschlüsselt werden. Die Kapazität der Platte ist keinen besonderen Beschränkungen unterworfen. |
USB-Stick bei SCSI-Systemen: » |
Abhängig vom verwendeten System erhält der USB-Stick unterschiedliche Gerätenamen: Bei SCSI ist dies » |
Das folgende Beispiel geht von einer IDE-Festplatte in einem Notebook aus. Die Kapazität beträgt 40 GByte. In Tabelle 2 ist das vorgesehene Layout dargestellt.
Tabelle 2
Layout des Slices <C>ad0s1<C>
Partition | Mountpoint | Kapazität |
---|---|---|
/dev/ad0s1a |
/ (root-directory) |
1 GByte |
/dev/ad0s1b |
Swap |
2 GByte |
/dev/ad0s1d |
/usr |
16 GByte |
/dev/ad0s1e |
/var |
4 GByte |
/dev/ad0s1f |
/tmp |
4 GByte |
/dev/ad0s1g |
/home |
13 GByte |
Der erste Schritt, um eine Festplatte komplett zu verschlüsseln, besteht darin, das System von der Installations-DVD oder -CD zu booten und im Installationsprogramm die sogenannte Fixit-Shell aufzurufen (siehe Abbildung 3). Man erreicht sie durch Auswahl von »sysinstall, fixit
«
und anschließend Option 2 »CDROM/DVD
«
.
Beim Starten der Fixit-Shell wird man mit einem Hinweis konfrontiert, den man nicht ignorieren darf, weil es sonst bei der späteren Installation zu unlösbaren Problemen kommen kann. Die Dateien »/etc/pwd.db
«
, »/etc/spwd.db
«
und »/etc/group
«
müssen mit den Dateien auf dem Installationsmedium symbolisch verlinkt werden. Zur Sicherheit werden die alten Symlinks gelöscht:
Fixit> rm /etc/pwd.db Fixit> rm /etc/spwd.db Fixit> rm /etc/group Fixit> ln -s /mnt2/etc/pwd.db /etc/pwd.db Fixit> ln -s /mnt2/etc/spwd.db /etc/spwd.dbFixit> ln -s /mnt2/etc/group /etc/group
Im nächsten Schritt startet man das Tool »fdisk
«
im interaktiven Modus, um die Festplatte zu partitionieren:
Fixit> fdisk -i /dev/ad0
und erhält dabei das in Listing 1 verkürzt wiedergegebene Protokoll.
Listing 1
Fdisk
Im nächsten Schritt kommt GELI ins Spiel. Damit man das Kernelmodul laden kann, müssen auch hier ein paar zusätzliche Maßnahmen getroffen werden. Dazu erstellt man zwei symbolische Links zum Kernelverzeichnis und zum Verzeichnis zu den Systembibliotheken:
Fixit> ln -s /dist/boot/kernel /boot/kernelFixit> ln -s /dist/lib /lib
Der folgende Befehl lädt das Kernelmodul für GELI:
Fixit> kldload geom_eli
Wie im vorherigen einfacheren Beispiel schon beschrieben, legt man die Datei mit dem Schlüssel für GELI an. Die folgende Kommandofolge zeigt dies:
Fixit> mkdir -p /root/geli Fixit> dd if=/dev/random of=/root/keys/ad0s1.key bs=64 count=1
Das Slice meldet man wie beschrieben bei GELI an, vergibt nach Aufforderung ein Passwort und hängt das Slice mit folgendem Kommando ein:
Fixit> geli init -b -K /root/geli/ad10s1.key -s 4096 -l 256 /dev/ad0s1Fixit> geli attach -k /root/geli/ad10s1.key /dev/ad0s1
Um das Betriebssystem installieren zu können, werden im folgenden Schritt die Labels für die Mount-Punkte angelegt. Dazu schreibt man zunächst ein Standard-Label und editiert es anschließend:
Fixit> bsdlabel -w /dev/ad0s1.eli Fixit> bsdlabel -e /dev/ad0s1.eli
Hier gilt es, den richtigen Treiber zu verwenden: Es ist nicht mehr »/dev/ad0s1
«
, sondern ab jetzt »/dev/ad0s1.eli
«
! Bezugnehmend auf das Layout in Tabelle 1 sieht das Schema so aus:
a: 1G 2 4.2BSD b: 2G * swap c: -- dont edit -- d: 16G * 4.2BSD e: 4G * 4.2BSD f: 4G * 4.2BSD g: * * 4.2BSD
Der Stern bei Partition »g
«
bedeutet, dass der Rest des Slices für Partition »g
«
verwendet werden soll. Den Editor verlässt man mit [Esc][:][q] und fährt mit dem Formatieren der einzelnen Partitionen fort. Ein kleiner Tipp: Es hat sich als vorteilhaft erwiesen, den einzelnen Partitionen ein Label zu geben, damit beim Mounten keine Unklarheiten auftreten:
Fixit> newfs -L ROOT /dev/ad0s1.elia Fixit> newfs -L USR /dev/ad0s1.elid Fixit> newfs -L VAR /dev/ad0s1.elie Fixit> newfs -L TMP /dev/ad0s1.elif Fixit> newfs -L HOME /dev/ad0s1.elig
Auffällig ist jetzt, dass die Gerätenamen ein neues Suffix bekommen haben. Es besteht aus dem Suffix »eli
«
mit einem zusätzlichen Buchstaben, der die Partitionsnummer repräsentiert.
Nach soviel Vorarbeit folgt der eigentliche Installationsvorgang, der größte Sorgfalt verlangt. Dazu legt man ein Verzeichnis auf dem verschlüsselnden Datenträger an und bindet alle Partitionen ein:
Fixit> mkdir /install && cd /install Fixit> mkdir root usr tmp var home Fixit> mount /dev/ad10s1.elia /install Fixit> mount /dev/ad10s1.elid /install/usr Fixit> mount /dev/ad10s1.elie /install/var Fixit> mount /dev/ad10s1.elif /install/tmp Fixit> mount /dev/ad10s1.elig /install/home
Danach kommen die Installationsskripte dran. Zuerst ist allerdings die Umgebungsvariable »DESTDIR
«
zu setzen, damit das Installationsskript die Dateien in das richtige Verzeichnis kopiert. Die Variable »RELEASE
«
repräsentiert das verwendete FreeBSD-Release:
Fixit> export DESTDIR=/install Fixit> cd /dist/$RELEASE/base && ./install.sh Fixit> cd /dist/$RELEASE/kernels && ./install.sh generic Fixit> cd /dist/$RELEASE/manpages && ./install.sh
Nach einer Weile passiert etwas Seltsames. Die Installation bricht mit Fehlermeldungen ab. Zur Beruhigung sei aber gleich vorweg festgestellt, dass das System funktioniert! Diese Fehler werden ausgegeben:
./root/.profile: Can't create 'root/.profile' : Cross-Device link ./root/.cshrc: Can't create 'root/.cshrc' : Cross-Device link tar: Error exit delayed from previous errors
Die Erklärung hierfür ist einfach. Im Archiv sind auch die symbolischen Links gespeichert, die beim Entpacken wieder angelegt werden. Es wird versucht, einen Link vom Verzeichnis des Users »root
«
auf dem Fixit-Datenträger zur Festplatte anzulegen. Dies lässt FreeBSD nicht zu. Da wären die Verantwortlichen gefragt, statt eines Symlinks eine Kopie in die Tar-Datei zu stellen.
Das System ist so nicht bootfähig, was auch in Ordnung ist. Schließlich soll es über einen USB-Stick booten, um den optimalen Schutz zu erhalten. Immer noch in der Fixit-Shell erstellt man einen für das System bootfähigen USB-Stick. Dazu partitioniert und formatiert die folgende Kommandosequenz den Stick:
Fixit> fdisk -BI /dev/da0 Fixit> bsdlabel -B -w /dev/da0s1 Fixit> newfs /dev/da0s1a
Damit man die Systemdaten auf den Stick kopieren kann, mountet man ihn und überträgt anschließend das System:
Fixit> mount /dev/da0s1a /usbstick Fixit> mkdir /usbstick Fixit> mkdir /usbstick/boot Fixit> mkdir /usbstick/boot/geli Fixit> mkdir /usbstick/etc Fixit> cp -Rpv /install/boot/ /usbstick
Der Bootloader von FreeBSD sucht im Verzeichnis »/boot/kernel
«
nach dem Betriebssystemkern. Das Verzeichnis »/usbstick/boot/kernel
«
ist nach dem Kopieren leer. Um einen bootfähigen USB-Stick zu erhalten, löscht man zunächst »/usbstick/boot/kernel
«
und benennt den Ordner mit dem generischen Kernel um:
Fixit> rmdir /usbstick/boot/kernel Fixit> mv /usbstick/boot/GENERIC /usbstick/boot/kernel
Damit GELI die Verschlüsselung und Entschlüsselung überhaupt durchführen kann, muss der Encryption-Key ebenfalls auf den Stick kopiert werden.
Fixit> cp /root/geli/ad0s1.key /usbstick/boot/geli/ad0s1.key
Außerdem ist es notwendig, GELI mitzuteilen, wo es den Schlüssel findet und in welcher Datei er gespeichert ist. Diese Informationen gehören in »/usbstick/boot/loader.conf
«
:
geom_eli_load="YES" geli_ad0s1_keyfile0_load="YES" geli_ad0s1_keyfile0_type="ad0s1:geli_keyfile0"geli_ad0s1_keyfile0_name="/boot/geli/ad0s1.key"
Damit es nicht zu Schwierigkeiten bei der Passworteingabe kommt, ergänzt man die Datei »/usbstick/boot/device.hints
«
um den Eintrag
hint.kbdmux.0.disabled="1"
Abschließend werden sowohl auf dem USB-Stick als auch auf der Festplatte die Dateien »/usbstick/etc/fstab
«
und »/install/etc/fstab
«
überarbeitet: Die Datei »/usbstick/etc/fstab
«
bekommt den Eintrag zum Mounten der Festplattenpartition »a
«
, weil sich hier wichtige Systemdienste befinden:
/dev/ad0s1.elia / ufs rw 1 1
Auf der Festplatte werden in »/install/etc/fstab
«
die Einträge vorgenommen, die dafür sorgen, dass die übrigen Partitionen korrekt gemountet werden:
/dev/ad0s1.elib none swap sw 0 0 /dev/ad0s1.elid /usr ufs rw 2 2 /dev/ad0s1.elie /var ufs rw 2 2 /dev/ad0s1.elif /tmp ufs rw 2 2 /dev/ad0s1.elig /home ufs rw 2 2
Es ist geschafft und das System kann neu gestartet werden. Während dieses Vorgangs wird man nach dem Passwort für das Slice gefragt. Nach Eingabe wird der Bootvorgang fortgesetzt und nach dessen Ende führt man die Administration fort. Diese Schritte sind im Handbuch zu FreeBSD ausführlich erläutert und das Programm »sysinstall
«
leistet wertvolle Dienste.
Schließlich noch ein paar Bemerkungen zu GELI: Es ist schade, dass das Installationsprogramm von FreeBSD nicht schon beim Installationsvorgang die Verschlüsselung eines Slices oder Partition anbietet. Das würde eine Menge Arbeit ersparen. Sehr erfreulich ist die Tatsache, dass sich GELI und ZFS zusammen einsetzen lassen. Diese Option ist besonders interessant, weil die Verschlüsselung in ZFS noch nicht integriert ist, wobei die Entwickler allerdings mit Hochdruck daran arbeiten.