FreeBSD bietet ausgezeichnete Möglichkeiten, Daten vor unberechtigten Zugriffen zu schützen. Wenn das Betriebssystem läuft, schützen Zugriffsrechte und vorgeschriebene Zugriffskontrollen (MAC) (siehe Kapitel 17, Verbindliche Zugriffskontrolle) die Daten. Die Zugriffskontrollen des Betriebssystems schützen allerdings nicht vor einem Angreifer, der Zugriff auf den Rechner hat. Der Angreifer kann eine Festplatte einfach in ein anderes System einbauen und dort die Daten analysieren.
Die für FreeBSD verfügbaren kryptografischen
Subsysteme GEOM Based Disk Encryption (gbde)
und geli
sind in der Lage, Daten auf
Dateisystemen auch vor hoch motivierten Angreifern zu
schützen, die über erhebliche Mittel verfügen.
Dieser Schutz ist unabhängig von der Art und Weise, durch
die ein Angreifer Zugang zu einer Festplatte oder zu einem
Rechner erlangt hat. Im Gegensatz zu schwerfälligen
Systemen, die einzelne Dateien verschlüsseln,
verschlüsseln gbde und
geli
transparent ganze Dateisysteme. Auf der
Festplatte werden dabei keine Daten im Klartext gespeichert.
Wechseln sie zu root
Sie benötigen Superuser-Rechte, um gbde einzurichten.
%
su -
Password:Aktivieren Sie gbde(4) in der Kernelkonfigurationsdatei
Fügen Sie folgende Zeile in Ihre Kernelkonfigurationsdatei ein:
options GEOM_BDE
Übersetzen und installieren Sie den FreeBSD-Kernel wie in Kapitel 9, Konfiguration des FreeBSD-Kernels beschrieben.
Starten sie das System neu, um den neuen Kernel zu benutzen.
Alternativ zur Neukompilierung des Kernels können
Sie auch kldload
verwenden, um das
Kernelmodul gbde(4) zu laden:
#
kldload geom_bde
Das folgende Beispiel beschreibt, wie ein Dateisystem
auf einer neuen Festplatte verschlüsselt wird. Das
Dateisystem wird in /private
eingehangen.
Mit gbde könnten auch
/home
und /var/mail
verschlüsselt werden. Die dazu nötigen Schritte
können allerdings in dieser Einführung
nicht behandelt werden.
Installieren der Festplatte
Installieren Sie die Festplatte wie in
Abschnitt 19.3, „Hinzufügen von Laufwerken“ beschrieben. Im Beispiel
verwenden wir die Partition /dev/ad4s1c
.
Die Gerätedateien
/dev/ad0s1
sind Standard-Partitionen des FreeBSD-Systems.*
#
ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1
/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c
/dev/ad0s1a /dev/ad0s1d /dev/ad4Verzeichnis für gbde-Lock-Dateien anlegen
#
mkdir /etc/gbde
Die Lock-Dateien sind für den Zugriff von gbde auf verschlüsselte Partitionen notwendig. Ohne die Lock-Dateien können die Daten nur mit erheblichem manuellen Aufwand wieder entschlüsselt werden (dies wird auch von der Software nicht unterstützt). Jede verschlüsselte Partition benötigt eine gesonderte Lock-Datei.
Vorbereiten der gbde-Partition
Eine von gbde benutzte Partition muss einmalig vorbereitet werden:
#
gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock
gbde(8) öffnet eine Vorlage in Ihrem Editor,
in der Sie verschiedene Optionen einstellen können.
Setzen Sie sector_size
auf
2048
, wenn Sie
UFS1 oder UFS2 benutzen.
gbde(8) fragt dann zweimal eine Passphrase zum Schutz der Daten ab. Die Passphrase muss beides Mal gleich eingegeben werden. Die Sicherheit der Daten hängt alleine von der Qualität der gewählten Passphrase ab. [12]
Mit gbde init
wurde im Beispiel
auch die Lock-Datei /etc/gbde/ad4s1c.lock
angelegt. gbde-Lockdateien
müssen die Dateiendung „.lock“ aufweisen,
damit sie von /etc/rc.d/gbde
, dem
Startskript von gbde, erkannt
werden.
Sichern Sie die Lock-Dateien von gbde immer zusammen mit den verschlüsselten Dateisystemen. Ein entschlossener Angreifer kann die Daten vielleicht auch ohne die Lock-Datei entschlüsseln. Ohne die Lock-Datei können Sie allerdings nicht auf die verschlüsselten Daten zugreifen. Dies ist nur noch mit erheblichem manuellen Aufwand möglich, der weder von gbde(8) noch seinem Entwickler unterstützt wird.
Einbinden der verschlüsselten Partition in den Kernel
#
gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
Das Kommando fragt die Passphrase ab, die Sie
beim Vorbereiten der Partition eingegeben haben. Das
neue Gerät erscheint danach als
/dev/device_name.bde
im
Verzeichnis /dev
:
#
ls /dev/ad*
/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1
/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c
/dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bdeDateisystem auf dem verschlüsselten Gerät anlegen
Wenn der Kernel die verschlüsselte Partition
kennt, können Sie ein Dateisystem auf ihr anlegen.
Benutzen Sie dazu den Befehl newfs(8). Da ein
Dateisystem vom Typ UFS2 sehr viel schneller als eins
vom Typ UFS1 angelegt wird, empfehlen wir Ihnen, die
Option -O2
zu benutzen.
#
newfs -U -O2 /dev/ad4s1c.bde
newfs(8) muss auf einer dem Kernel bekannten
gbde-Partition (einem
Gerät mit dem Namen
laufen.*
.bde
Einhängen der verschlüsselten Partition
Legen Sie einen Mountpunkt für das verschlüsselte Dateisystem an:
#
mkdir /private
Hängen Sie das verschlüsselte Dateisystem ein:
#
mount /dev/ad4s1c.bde /private
Überprüfen des verschlüsselten Dateisystem
Das verschlüsselte Dateisystem sollte jetzt von df(1) erkannt werden und benutzt werden können.
%
df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 1037M 72M 883M 8% /
/devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1f 8.1G 55K 7.5G 0% /home
/dev/ad0s1e 1037M 1.1M 953M 0% /tmp
/dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr
/dev/ad4s1c.bde 150G 4.1K 138G 0% /privateNach jedem Neustart müssen verschlüsselte
Dateisysteme dem Kernel wieder bekannt gemacht werden,
auf Fehler überprüft werden und eingehangen
werden. Die dazu nötigen Befehle müssen als
root
durchgeführt werden.
gbde-Partition im Kernel bekannt geben
#
gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock
Das Kommando fragt nach der Passphrase, die Sie beim Vorbereiten der verschlüsselten gbde-Partition festgelegt haben.
Prüfen des Dateisystems
Das verschlüsselte Dateisystem kann noch nicht
automatisch über /etc/fstab
eingehangen werden. Daher muss es vor dem Einhängen
mit fsck(8) geprüft werden:
#
fsck -p -t ffs /dev/ad4s1c.bde
Einhängen des verschlüsselten Dateisystems
#
mount /dev/ad4s1c.bde /private
Das verschlüsselte Dateisystem steht danach zur Verfügung.
Mit einem Skript können verschlüsselte Dateisysteme automatisch bekannt gegeben, geprüft und eingehangen werden. Wir raten Ihnen allerdings aus Sicherheitsgründen davon ab. Starten Sie das Skript manuell an der Konsole oder in einer ssh(1)-Sitzung.
Zu diesem Zweck existiert ein
rc.d
-Skript, an das über
Einträge in der Datei rc.conf(5)
Argumente übergeben werden können. Dazu ein
Beispiel:
Durch diese Argumente muss beim Systemstart die gbde-Passphrase eingegeben werden. Erst nach Eingabe der korrekten Passphrase wird die gbde-verschlüsselte Partition automatisch in den Verzeichnisbaum eingehängt. Dieses Vorgehen ist insbesondere dann nützlich, wenn Sie gbde auf einem Notebook einsetzen wollen.
gbde(8) benutzt den 128-Bit AES im CBC-Modus, um die Daten eines Sektors zu verschlüsseln. Jeder Sektor einer Festplatte wird mit einem unterschiedlichen AES-Schlüssel verschlüsselt. Mehr Informationen, unter anderem wie die Schlüssel für einen Sektor aus der gegebenen Passphrase ermittelt werden, erhalten Sie in gbde(4).
sysinstall(8) kann nicht mit verschlüsselten
gbde-Geräten umgehen. Vor
dem Start von sysinstall(8) sind alle
-Geräte
zu deaktivieren, da sysinstall(8) sonst bei der
Gerätesuche abstürzt. Das im Beispiel verwendete
Gerät wird mit dem folgenden Befehl deaktiviert:*
.bde
#
gbde detach /dev/ad4s1c
geli
ist als alternative kryptografische
GEOM-Klasse verfügbar und wird derzeit
von Pawel Jakub Dawidek <pjd@FreeBSD.org>
weiterentwickelt. geli
unterscheidet sich von gbde
durch
unterschiedliche Fähigkeiten und einen unterschiedlichen
Ansatz für die Verschlüsselung von Festplatten.
Die wichtigsten Merkmale von geli(8) sind:
Der Einsatz des crypto(9)-Frameworks –
verfügt das System über kryptografische Hardware,
wird diese von geli
automatisch
verwendet.
Die Unterstützung verschiedener kryptografischer Algorithmen (derzeit AES, Blowfish, sowie 3DES).
Die Möglichkeit, die root-Partition zu verschlüsseln. Um auf die verschlüsselte root-Partition zugreifen zu können, muss beim Systemstart die Passphrase eingegeben werden.
geli
erlaubt den Einsatz von zwei
voneinander unabhängigen Schlüsseln (etwa einem
privaten „Schlüssel“ und einem
„Unternehmens-Schlüssel“).
geli
ist durch einfache
Sektor-zu-Sektor-Verschlüsselung sehr schnell.
Die Möglichkeit, Master-Keys zu sichern und wiederherzustellen. Wenn ein Benutzer seinen Schlüssel zerstört, kann er über seinen zuvor gesicherten Schlüssel wieder auf seine Daten zugreifen.
geli
erlaubt es, Platten mit
einem zufälligen Einmal-Schlüssel einzusetzen,
was insbesondere für Swap-Partitionen und
temporäre Dateisysteme interessant ist.
Weitere Informationen zu den Fähigkeiten von
geli
finden Sie in geli(8).
Die folgenden Schritte beschreiben, wie Sie
geli
im FreeBSD-Kernel aktivieren und einen
geli
-Verschlüsselungs-Provider
anlegen können.
Da Sie Ihren Kernel anpassen müssen,
benötigen Sie außerdem
root
-Privilegien.
Aufnahme der geli
-Unterstützung
in Ihre Kernelkonfigurationsdatei
Fügen Sie die folgenden Zeilen in Ihre Kernelkonfigurationsdatei ein:
Bauen und installieren Sie Ihren neuen Kernel wie in Kapitel 9, Konfiguration des FreeBSD-Kernels beschrieben.
Alternativ können Sie aber auch das
geli
-Kernelmodul beim Systemstart laden.
Dazu fügen Sie die folgende Zeile in
/boot/loader.conf
ein:
Ab sofort wird geli(8) vom Kernel unterstützt.
Erzeugen des Master-Keys
Das folgende Beispiel beschreibt, wie Sie eine
Schlüsseldatei erzeugen, die als Teil des
Master-Keys für den Verschlüsselungs-Provider
verwendet wird, der unter /private
in den
Verzeichnisbaum eingehängt („gemountet“)
wird. Diese Schlüsseldatei liefert zufällige
Daten, die für die Verschlüsselung des
Master-Keys benötigt werden. Zusätzlich wird
der Master-Key durch eine Passphrase geschützt. Die
Sektorgröße des Providers beträgt 4 KB.
Außerdem wird beschrieben, wie Sie einen
geli
-Provider aktivieren, ein vom ihm
verwaltetes Dateisystem erzeugen, es mounten, mit ihm
arbeiten und wie Sie es schließlich wieder unmounten
und den Provider deaktivieren.
Um eine bessere Leistung zu erzielen, sollten Sie eine größere Sektorgröße (beispielsweise 4 KB) verwenden.
Der Master-Key wird durch eine Passphrase sowie die
Daten der Schlüsseldatei (die von
/dev/random
stammen) geschützt.
Die Sektorgröße von
/dev/da2.eli
(das als Provider
bezeichnet wird) beträgt 4 KB.
#
dd if=/dev/random of=/root/da2.key bs=64 count=1
#
geli init -s 4096 -K /root/da2.key /dev/da2
Enter new passphrase:
Reenter new passphrase:Es ist nicht zwingend nötig, sowohl eine Passphrase als auch eine Schlüsseldatei zu verwenden. Die einzelnen Methoden können auch unabhängig voneinander eingesetzt werden.
Wird für die Schlüsseldatei der Wert „-“ angegeben, wird dafür die Standardeingabe verwendet. Das folgende Beispiel zeigt, dass Sie auch mehr als eine Schlüsseldatei verwenden können.
#
cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2
Aktivieren des Providers mit dem erzeugten Schlüssel
#
geli attach -k /root/da2.key /dev/da2
Enter passphrase:Dadurch wird die (Normaltext-)Gerätedatei
/dev/
angelegt.da2
.eli
#
ls /dev/da2*
/dev/da2 /dev/da2.eliDas neue Dateisystem erzeugen
#
dd if=/dev/random of=/dev/da2.eli bs=1m
#
newfs /dev/da2.eli
#
mount /dev/da2.eli /private
Das verschlüsselte Dateisystem wird nun von df(1) angezeigt und kann ab sofort eingesetzt werden.
#
df -H
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s1a 248M 89M 139M 38% /
/devfs 1.0K 1.0K 0B 100% /dev
/dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr
/dev/ad0s1d 989M 1.5M 909M 0% /tmp
/dev/ad0s1e 3.9G 1.3G 2.3G 35% /var
/dev/da2.eli 150G 4.1K 138G 0% /privateDas Dateisystem unmounten und den Provider deaktivieren
Wenn Sie nicht mehr mit dem verschlüsselten
Dateisystem arbeiten und die unter /private
eingehängte
Partition daher nicht mehr benötigen, sollten
Sie diese unmounten und den
geli
-Verschlüsselungs-Provider
wieder deaktivieren.
#
umount /private
#
geli detach da2.eli
Weitere Informationen zum Einsatz von geli
finden Sie in geli(8).
geli
verfügt über ein
rc.d
-Skript,
das den Einsatz von geli
deutlich vereinfacht. Es folgt nun ein Beispiel, in dem
geli
über die Datei
rc.conf(5) konfiguriert wird:
Durch diese Einträge wird
/dev/da2
als
geli
-Provider festgelegt. Der Master-Key
befindet sich in /root/da2.key
. Beim
Aktivieren des geli
-Providers wird keine
Passphrase abgefragt (beachten Sie, dass dies nur dann
möglich ist, wenn Sie geli
mit dem
Parameter -P
initialisieren). Wird das
System heruntergefahren, wird der
geli
-Provider zuvor deaktiviert.
Weitere Informationen zur Konfiguration der
rc.d
-Skripten
finden Sie im Abschnitt rc.d des Handbuchs.
[12] Die Auswahl einer sicheren und leicht zu merkenden Passphrase wird auf der Webseite Diceware Passphrase beschrieben.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.