Termine planen, Nachrichten austauschen, Kundendaten verwalten, am besten auch vom Smartphone aus. Das alles und noch viel mehr sollen moderne ... (mehr)

Vollschutz

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 »da0« , die erste IDE-Festplatte »ad0« .

Diese Platte soll komplett verschlüsselt werden. Die Kapazität der Platte ist keinen besonderen Beschränkungen unterworfen.

USB-Stick bei SCSI-Systemen: »da1« oder bei IDE-Systemen »da0« .

Abhängig vom verwendeten System erhält der USB-Stick unterschiedliche Gerätenamen: Bei SCSI ist dies »da1« , bei IDE »da0« , weil USB-Sticks wie SCSI-Geräte behandelt werden. Die Kapazität des USB-Sticks sollte mindestens 2 GByte betragen.

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« .

Abbildung 3: Aufruf der Fixit-Shell.

Vorsicht: Sackgasse

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.

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2021