c't 16/2017
S. 144
Praxis
Desinfec't 2017
Aufmacherbild

Fit für die Zukunft

Desinfec’t via Btrfs erweitern

Bisher konnte man Desinfec’t nur bis zu einem gewissen Grad modifizieren, etwa um kleine Tools nachzuinstallieren. Dank dem hinzugekommenen Btrfs-Dateisystem können Sie Desinfec’t nun beispielsweise zu einem vollständigen Notfallarbeitsplatz inklusive Office-Anwendungen und aktuellen Treibern ausbauen.

Wer das Live-System Desinfec’t auf einem USB-Stick mit Tools aus den Ubuntu-Paketquellen erweitern will, musste bis jetzt immer einen Umweg gehen. Der Grund dafür ist, dass Desinfec’t selbst auf einem USB-Stick nicht veränderbar ist und nach jedem Neustart wieder den Originalzustand herstellt. Damit man Tools dennoch dauerhaft installieren kann, müssen die einzelnen Debian-Pakete auf der beschreibbaren Signatur-Partition liegen. Die Desinfec’t-Startskripte installieren diese dann bei jedem Systemstart im sogenannten OverlayFS, das im Arbeitsspeicher transparent über dem nicht beschreibbaren Root-Dateisystem SquashFS liegt.

Dieser Ansatz klappt in der Regel mit kompakten Tools problemlos – darauf setzen wir auch bei der Installation von Desinfec’t-Updates. Doch will man komplexere Anwendungen nachinstallieren, scheitert das meist an der erlaubten Größe des OverlayFS. Auch die Installation von Treibern für etwa WLAN-Sticks gelingt auf diesem Weg nicht, da die Skripte erst nach dem Start der Netzwerkdienste greifen und der neue Treiber somit zu spät zur Verfügung steht.

Mit Desinfec’t 2017 haben wir diese Probleme gelöst und führen ein gänzlich anderes Konzept ein: Mit ein paar Vorbereitungen installieren Sie Anwendungen, Tools und Treiber ab sofort dauerhaft direkt im System. Dazu setzt Desinfec’t auf das Dateisystem Btrfs, mit dem man Veränderungen in sogenannten Snapshots abspeichern kann. Diese liegen dann in Form von Subvolumes schichtweise über dem nach wie vor unveränderten Original (siehe Kasten). Schlägt eine Modifikation fehl, wechseln Sie einfach zu einem funktionierenden Subvolume zurück.

Zum Kasten: Desinfec’t, Btrfs und Windows 10

Btrfs-Stick erstellen

Standardmäßig setzt ein Desinfec’t-Stick allerdings noch nicht auf Btrfs: Sie müssen ihn erst mit speziellen Optionen erstellen. Damit Desinfec’t mit Btrfs vernünftig läuft, ist ein flinker USB-Stick mit mindestens 32 GByte erforderlich. Dieser Platz ist nötig, da Desinfec’t durch das Anlegen neuer Subvolumes mittels der Snapshot-Funktion wächst. Dank des Copy-on-Write-Ansatz von Btrfs explodiert der Speicherbedarf aber nicht: Nacheinander angelegte Subvolumes bauen aufeinander auf und in neuen werden ausschließlich hinzugekommene Daten neu geschrieben. Dennoch verbrauchen die übereinander gestapelten Schichten teilweise unnötig viel Platz auf dem USB-Stick. Den kann man durch regelmäßiges Aufräumen und Zusammenführen von Zwischenschichten einsparen. Dazu legt man einen neuen Snapshot als Kopie des Originals an und kopiert dann den aktuellen Stand mit einem Tool wie rsync hinein.

Um einen Desinfec’t-Stick mit Btrfs zu erstellen, müssen Sie die Option „Btrfs als Standard nutzen“ explizit anwählen.

Am einfachsten erstellen Sie einen Btrfs-Stick aus einem laufenden Desinfec’t: Dort klicken Sie auf dem Desktop das Icon „Bootfähigen USB-Stick mit Desinfec’t erstellen“ an. Im Anschluss setzen Sie lediglich ein Häkchen bei „Btrfs als Standard nutzen“. Unter Windows nutzen Sie für die Erstellung wie gewohnt die Anwendung „Desinfect2USB“ und geben beim ersten Booten vor der Umwandlung in einen nativen Stick den Parameter „usebtrfs“ an (weitere Infos siehe ct.de/yxdh).

In den folgenden Beispielen erweitern Sie Desinfec’t, erzeugen Snapshots und starten das angepasste System aus einem neuen Subvolume.

Los gehts!

Als erstes Praxisbeispiel aktualisieren Sie Desinfec’t und machen das Update persistent. Dafür installieren Sie es zuerst nach der alten Methode, sodass es aus dem RAM läuft. Dann verweben Sie das Update mit einem neu angelegten Subvolume, damit es dauerhaft in Desinfec’t integriert ist.

So funktioniert ein Btrfs-Stick

Prüfen Sie zuerst, ob das Desinfec’t-Update bereits installiert ist – das sollte in der Regel automatisch geschehen. Steht im Statusfenster oben rechts auf dem Desktop zum Beispiel „Desinfec’t 2017 p2“, hat es geklappt. Steht dort nur „Desinfec’t 2017“, müssen Sie den Update-Vorgang manuell anstoßen. Dafür öffnen Sie zunächst das Terminal, holen das Update aus unserem Repository und machen ein Upgrade von Desinfec’t:

sudo apt-get update

sudo apt-get -y dist-upgrade

Als Nächstes müssen Sie Schreibrechte für den Speicherort der Subvolumes unter /cdrom vergeben und die LZO-Komprimierung für neu geschriebene Dateien aktivieren – das spart Speicherplatz auf dem Stick. Dieser Schritt ist essenziell und für jede Subvolume-Operation in /cdrom nötig. Wenn im Folgenden mal etwas nicht klappt, prüfen Sie, ob Sie den Befehl eingegeben haben. Darüber hinaus sind für nahezu jede Aktion Root-Rechte (sudo) unabdingbar – wenn es hängt, überprüfen Sie auch das:

sudo mount -o remount,rw,:

.compress=lzo /cdrom

Nach dem Drücken der Eingabetaste springt der Cursor lediglich in die nächste Zeile. Das ist die Bestätigung, dass alles geklappt hat. Nun erstellen Sie via Snapshot eine neues Subvolume namens „desinfect-update“:

sudo btrfs subvolume snapshot :

./cdrom /cdrom/desinfect-update

Darauf folgend findet sich unter cdrom/desinfect-update/casper/filesystem.dir eine deckungsgleiche Kopie vom Original-Desinfec’t. Damit Sie die Updates dort installieren können, hängen Sie den Ordner mit den deb-Archiven in das neu angelegte Subvolume:

sudo mount -o bind :

./var/cache/apt/archives :

./cdrom/desinfect-update/casper/:

.filesystem.dir/var/cache/apt/:

.archives

Nun wechseln Sie mit chroot (change root) in das neu angelegte Subvolume desinfect-update und installieren das Debian-Paket dort:

sudo chroot /cdrom/desinfect-update/:

.casper/filesystem.dir

dpkg -i /var/cache/apt/archives/:

.desinfect-meta*.deb

Mit exit verlassen Sie die chroot-Umgebung.

Nun sind Sie fast fertig und müssen nur noch das neue Subvolume mit aktualisiertem Desinfec’t als Standard-Subvolume setzen, damit das Sicherheitstool künftig daraus startet. Dafür brauchen Sie zunächst die ID des neuen Subvolumes, die sich via

sudo btrfs subvolume list /cdrom

Als erste Fingerübung für den Umgang mit Btrfs installieren Sie das aktuelle Desinfec’t-Update dauerhaft. Ob das geklappt hat, erkennen Sie an der Versionsanzeige oben links.

ablesen lässt. Dort steht ganz oben immer das Subvolume desinfect-initial mit der ID 261. Neu angelegte Subvolumes zählt Btrfs jeweils immer um eins hoch. In diesem Beispiel trägt das Subvolume mit dem Desinfec’t-Update die ID 262. Um dieses als neues Standard-Subvolume festzulegen, geben Sie Folgendes ein:

sudo btrfs subvolume set-default :

.262 /cdrom

Nun müssen Sie noch das Update-Paket „desinfect-meta“ aus /opt/desinfect/signatures/deb löschen, damit sich Btrfs und die alte Installationsmethode nicht in die Quere kommen. Das können Sie über den Filemanager machen (sudo thunar). Nach dem Löschen booten Sie Desinfec’t neu und fortan sollte das Sicherheitstool immer in der aktualisierten Version starten. Aus welchem Subvolume Desinfec’t bootet, sehen Sie nach der Eingabe von

cat /proc/mounts | grep /cdrom

unter „subvolid=ID“.

Ubuntu-Pakete installieren

Um zusätzliche Anwendungen, Aktualisierungen und Treiber aus den Ubuntu-Paketquellen nachzuinstallieren, ist etwas mehr Vorarbeit als beim Desinfec’t-Update nötig. Das liegt daran, dass Sie hier Anwendungen direkt in ein Subvolume downloaden und installieren und dafür eine vollständige chroot-Umgebung benötigen. In den folgenden Beispielen rüsten Sie Desinfec’t in einem Rutsch mit LibreOffice aus, aktualisieren Firefox und spielen einen Treiber für einen WLAN-Stick ein. Die folgende Herangehensweise ist exemplarisch für die Nachinstallation und Aktualisierung von Anwendungen und Treibern und muss bei jeder neuen Subvolume-Session von Anfang an durchgeführt werden. Damit sich die folgende Vorarbeit lohnt, empfiehlt es sich, wie in diesem Beispiel gleich mehrere Sachen hinzufügen.

Ausgangspunkt ist der Start aus dem Subvolume desinfect-update. Daraus erzeugen Sie mit der Snapshot-Funktion ein neues Subvolume namens „desinfect-office“ – dieses ist ein direkter Abkömmling von desinfect-update. Damit Ubuntu-Pakete mittels apt-get im neuen Subvolume landen, sind weitere Mounts nötig:

sudo su

mount -o remount,rw,compress=lzo :

./cdrom

btrfs subvolume snapshot /cdrom :

./cdrom/desinfect-office

CHROOT=/cdrom/desinfect-office/:

.casper/filesystem.dir

mount --bind /dev $CHROOT/dev

mount --bind /proc $CHROOT/proc

mount --bind /sys $CHROOT/sys

mount -t devpts devpts $CHROOT:

./dev/pts

mount -t tmpfs tmpfs $CHROOT/tmp

Nun machen Sie Nameserver in der chroot-Umgebung bekannt. Die DNS-Einstellung gelingt via

mount --bind /run/resolvconf/:

.resolv.conf $CHROOT/run/:

.resolvconf/resolv.conf

Jetzt erzeugen Sie noch ein Dummy-Shell-Skript, damit bei der Nachinstallation keine Dienste dazwischenfunken. Das gelingt mit einem Editor wie Scite:

scite $CHROOT/usr/sbin/policy-rc.d

Das Skript umfasst nur zwei Zeilen:

#!/bin/sh

exit 101

Nun speichern Sie die Änderungen, schließen die Datei und machen sie ausführbar:

chmod 0755 $CHROOT/usr/sbin/:

.policy-rc.d

Ein kleines Skript kümmert sich um die Mounts, die DNS-Einstellung und das Dummy-Shell-Skript. Sie installieren und starten es wie folgt:

sudo su

apt-get update

apt-get install desinfect-btrfs-tools

CHROOT=/cdrom/desinfect-office/:

.casper/filesystem.dir

chrootbindmounts mount $CHROOT

Damit Desinfec’t auf die Ubuntu-Paketquellen zugreifen kann, müssen Sie diese via

scite $CHROOT/etc/apt/sources.list

aktivieren. Dafür entfernen Sie in der Liste die Doppelkreuze vor den Einträgen „Main“, „Updates“ und „Security“ und sperren den Zugriff auf das Desinfec’t-Repository mittels eines Doppelkreuzes, sonst könnte es im Folgenden zu Problemen kommen. Speichern und schließen Sie die Datei. Anschließend wechseln Sie per chroot in das Verzeichnis des Subvolumes und aktualisieren die Paketlisten:

chroot $CHROOT

apt-get update

Nun können Sie mittels

apt-get install libreoffice :

.libreoffice-l10n-de

das LibreOffice-Paket installieren. An dieser Stelle müssen Sie nichts aus /opt/desinfect/signatures/deb löschen, da Anwendungen aus den Ubuntu-Paketquellen im Gegensatz zu Desinfec’t-Updates nicht standardmäßig auf der Signatur-Partition landen.

Dank der bisherigen Vorbereitungen aktualisieren Sie auch Firefox ganz einfach:

apt-get install --reinstall firefox :

.firefox-locale-de firefox-locale-en

Dank Btrfs können Sie Desinfec’t um größere Anwendungen erweitern und sich so ein Notfallsystem mit kompletter Office-Umgebung bauen.

Zusätzlich fügen Sie mit dieser Installationsmethode neue Firmware und Treiber hinzu. Das funktioniert aber nur, wenn Desinfec’t im Standardmodus mit 32-Bit-Kernel läuft – was ab Werk der Fall ist. Das folgende Beispiel stattet den in Desinfec’t enthaltenen Treiber für WLAN-Sticks auf Broadcom-Basis für eine erweitere Kompatibilität mit einer proprietären Firmware aus. Alternativ können Sie das Ganze natürlich auch mit passenden Treibern für WLAN-Sticks mit Chips von anderen Herstellern durchspielen:

apt-get install b43-fwcutter :

.firmware-b43-installer

Erkennt Desinfec’t nach dem Neustart Ihren Broadcom-Stick immer noch nicht, können Sie mit den folgenden Befehlen einen proprietären Broadcom-Treiber installieren. Erstellen Sie dafür zuerst eine Datei via

scite /etc/modprobe.d/:

.blacklist-b43.conf

und fügen Sie folgende Zeilen ein:

b43

b43legacy

Anschließend installieren Sie wie folgt den proprietären Broadcom-Treiber:

sudo apt-get install :

.broadcom-sta-source :

.broadcom-sta-common :

.broadcom-sta-dkms

Wenn Sie eine Subvolume-Session aus den Ubuntu-Repositorys beenden und nichts mehr installieren möchten, leiten Sie dies mit dem Befehl apt-get clean ein. Nun verlassen Sie mit exit die chroot-Umgebung. Dann löschen Sie die eingangs angelegte Datei mit

sudo rm $CHROOT/usr/sbin/policy-rc.d

Alternativ erledigen Sie dies und das Lösen der Mounts nach der Eingabe von apt-get clean mit dem Skript aus unseren Btrfs-Tools.

chrootbindmounts umount $CHROOT

Als Nächstes kommentieren Sie noch die Ubuntu-Repositories via

scite $CHROOT/etc/apt/sources.list

aus und reaktivieren die Desinfec’t-Paketquelle. Abschließend legen Sie desinfect-office als Standard fest:

sudo btrfs subvolume set-default 263 :

./cdrom

Jetzt starten Sie Desinfec’t neu – erst dann stehen die eben installierten Anwendungen und Treiber zur Verfügung.

Zurücksetzen

Wenn beim Anpassen etwas schiefgelaufen ist, können Sie mit wenigen Schritten zum Root-Subvolume wechseln, um Desinfec’t in den Originalzustand zurückzuversetzen:

sudo mount -o :

.remount,rw,compress=lzo /cdrom

sudo btrfs subvolume set-default 5 :

./cdrom

Falls Desinfec’t nach einer Modifikation nicht mehr startet, müssen Sie den Umweg über die DVD, einen Desinfec’t-Stick oder eine andere Linux-Distribution gehen. Läuft das System, greifen Sie daraus auf den am Computer angeschlossenen defekten Btrfs-Stick zu, in unserem Fall ist das sdd5, und führen folgende Befehle aus:

mkdir /tmp/btrfs

sudo umount /dev/sdd5

Nun aktivieren Sie auf dem Stick das Root-Subvolume:

sudo mount -o rw /dev/sdd5 /tmp/btrfs

sudo btrfs subvolume set-default 5 :

./tmp/btrfs

sudo umount /tmp/btrfs

Anschließend sollte Desinfec’t wieder laufen und im Originalzustand starten.

Basteln auf eigene Gefahr

Dank Btrfs und unseren Anleitungen können Sie Desinfec’t quasi grenzenlos erweitern. Geht dabei etwas kaputt, wechseln Sie problemlos zu einem funktionierenden Subvolume zurück. Im offiziellen Desinfec’t-Forum (siehe ct.de/yxdh) tauschen sich außerdem Tüftler aus. Also keine Angst und viel Spaß beim Basteln! (des@ct.de)