Startseite>FreeBSD-Jails auf dem Raspberry Pi
Aus Raspberry Pi Geek 06/2014

FreeBSD-Jails auf dem Raspberry Pi

© Stephen Bonk, 123RF

Himbeerknast

Jürgen Dankoweit

Das bekannteste Sicherheitsmerkmal von FreeBSD, die sogenannten Jails, bieten auch auf dem Raspberry Pi ein deutliches Plus an Sicherheit.

README

FreeBSD stellt mit zahlreichen Sicherheitsfunktionen eine Alternative zu den üblichen Linux-Distributionen dar. Jails sorgen für ein Maximum an Sicherheit bei geringem Ressourcenverbrauch und Administrationsaufwand.

Jails gehören zu den herausstechenden Sicherheitsmerkmalen von FreeBSD [1]. Bei einer Jail handelt es sich um eine erweiterte Chroot-Umgebung, wie sie auch Linux und andere Unix-Systeme kennen. Allerdings bietet eine Jail-Umgebung absoluten Schutz vor der Manipulation von Prozessen, die außerhalb derselben laufen. Da eine Jail in einem eigenen Verzeichnisbaum arbeitet, kann ein Prozess innerhalb der Jail nicht auf Verzeichnisse und Dateien außerhalb der Struktur zugreifen, der Elternverzeichnisbaum bleibt unsichtbar. Ebenso verhindert das Prozessgefängnis, dass der Jail-Prozess auf Prozesse und Daten des Hosts einwirkt. Diese Eigenschaft erleichtert das Administrieren von Jails auf einem Raspberry erheblich.

Eines gleich vorweg: Eine Jail erhöht die Sicherheit eines “eingesperrten” Daemons selbst nicht. Weist ein Dienst eine Sicherheitslücke auf, dann tritt diese auch in der Jail-Umgebung auf. Falls ein Angreifer es aber auf diesem Weg schafft, sich Zugang zur Jail zu verschaffen, dann zeigt sich auch das Sicherheitsplus einer solchen Umgebung: Er findet sich in der Jail eingesperrt wieder, der Zugang zum Hostsystem bleibt ihm verwehrt.

Mit diesen Sicherheitseigenschaften bietet sich auch ein Raspberry Pi mit FreeBSD als zentrales Element eines Heimnetzwerks an. Er kann die Rolle eines Einwähl-Routers mit eigenem Web- oder Name-Server (DNS) übernehmen – jeweils in eigenen Jails gesichert. Im Falle einer Sicherheitslücke in den Daemons gelangt der Angreifer nicht an andere wichtige Daten des Hostsystems.

Zur Sache!

Die Erstellung von Jails erfordert einige Zeit und Rechenleistung, da sie das Neukompilieren von Teilen des Betriebssystems voraussetzen. Möchten Sie Ihre Nerven und den Raspberry schonen, sollten Sie diese Aufgabe deshalb mittels Cross-Compiling auf einem leistungsfähigeren FreeBSD-System erledigen. Aber Achtung: Die FreeBSD-Versionen auf dem Raspberry und auf dem Hostsystem müssen identisch sein!

Zu Beginn steht die Planung der Jails: Schließlich begrenzt der Raspberry den Arbeitsspeicher auf 512 MByte, und ein Swap-File auf einer SD-Speicherkarte macht wegen deren niedriger Lese- und Schreibgeschwindigkeit keinen Spaß. Als Faustregel sollten Sie beim Setup etwa 100 MByte SD-Kartenspeicher und 4 MByte Arbeitsspeicher je Jail einplanen.

Das FreeBSD-Basissystem kompilieren und installieren Sie als Root-User auf dem Raspberry Pi, wie bereits im ersten Teil unserer FreeBSD-Reihe beschrieben [2]. Es lohnt sich, die bei der Installation angelegte Arbeitsumgebung zu behalten, da sie für das Aktualisieren und Erstellen neuer Jails immer wieder zum Einsatz kommt.

Haben Sie sie dennoch bereits gelöscht, gibt es zwei Möglichkeiten, um die FreeBSD-Installation von der SD-Karte des Raspberry zurückzuholen. Entweder kopieren Sie das Image der SD-Karte mit folgendem Befehl in ein Arbeitsverzeichnis:

$ dd if=/dev/da0 of=/home/raspberry/rpi.img bs=1m

Alternativ arbeiten Sie direkt auf der SD-Karte, die sie mittels mount /dev/da0s2a /mnt einhängen. Dieser Artikel setzt im weiteren Verlauf auf die erste Methode und arbeitet mit einem Image.

Es folgt das Einhängen des FreeBSD-Slice mit dem Raspberry-Image. Die Shell-Befehle aus Listing 1 erledigen das und setzen die Umgebungsvariable fürs Cross-Kompilieren für die Zielplattform.

Listing 1

 

# cd /home/raspberry
# mdconfig -a -t vnode -f ./rpi.img md0
# mount /dev/md0s2a /mnt
# sh
# export TARGET_ARCH=armv6

Da eine Jail einige Standardwerkzeuge nicht benötigt, wie etwa Compiler und Spiele, erstellen Sie am besten eine Datei /etc/src.conf mit den gewünschten Ausnahmen (Listing 2). Zuvor sollten Sie allerdings die existierende Instanz dieser Datei sichern: Sobald Sie das Hostsystem später neu kompilieren, benötigen Sie sie wieder im Originalzustand.

Listing 2

 

WITHOUT_CDDL="YES"
WITHOUT_CLANG="YES"
WITHOUT_CPP="YES"
WITHOUT_MAN="YES"
WITHOUT_CROSS_COMPILER="YES"
WITHOUT_GAMES="YES"
WITHOUT_ZFS="YES"
WITHOUT_GCC="YES"

Die FreeBSD-Jail soll im Verzeichnis /mnt/home/jails/dns landen, das Sie gegebenenfalls zuvor anlegen müssen. Um die weitere Tipparbeit zu reduzieren, hinterlegen Sie die Pfadangabe zum Jail-Verzeichnis in der Shell-Variablen JAILDIR (Listing 3, Zeile 1). Anschließend starten Sie den Compilerlauf (Zeile 3). Zur Installation der in der Jail benötigten Tools übergeben Sie mit DESTDIR das Zielverzeichnis an Make (Zeile 4). Nach dem erfolgreichen Abschließen aller Schritte schreiben Sie das Image zurück auf die SD-Karte (ab Zeile 5).

Listing 3

 

# export JAILDIR=/mnt/home/jails/dns
# mkdir -p ${JAILDIR}
# make MALLOC_PRODUCTION=yes buildworld
# make DESTDIR=${JAILDIR} DB_FROM_SRC=1 installworld distribution
# umount /mnt
# mdconfig -d -u md0
# dd if=/home/raspberry/rpi.img of=/dev/da0 bs=1m
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland