#!/coding/blatt
Sammelsurium mit Schwerpunkten Linux & IT-Sicherheit

Arch Linux: libvirt mit AppArmor-Unterstützung installieren

Unter Xubuntu bin ich es gewöhnt, dass das libvirt-Paket direkt mit AppArmor-Unterstützung ausgeliefert und installiert wird. Leider ist das bei Arch Linux nicht der Fall. Da ich auf dieses zusätzliche "Sicherheitsnetz" bei der Ausführung meiner QEMU/ KVM-VMs nicht verzichten möchte, verwende ich nicht das von Arch Linux ausgelieferte libvirt-Paket, sondern kompiliere es mit AppArmor-Unterstützung selbst und installiere es dann manuell mit pacman.

Wie das Ganze genau funktioniert, beschreibe ich in diesem Beitrag.

Folgende Software wurde verwendet:
  • Arch Linux
  • libvirt v8.1.0

libvirt mit AppArmor-Unterstützung kompilieren

Zum Kompilieren werden einige "Entwicklungswerkzeuge" benötigt, die wie folgt installiert werden können:

sudo pacman -Syu
sudo pacman -S base-devel asp devtools
Terminal / Konsole

Als nächstes erstellen wir ein temporäres Build-Verzeichnis und wechseln direkt in das soeben erstellte Verzeichnis:

mkdir /tmp/build
cd /tmp/build
Terminal / Konsole

Die Kompilierung erfolgt mithilfe des Arch Build Systems. Dazu checken wir das libvirt-git-Repository aus, welches die PKGBUILD-Datei enthält.

asp checkout libvirt
asp update
cd libvirt
git pull
cd repos/community-x86_64
Terminal / Konsole

Die PKGBUILD-Datei enthält alle Informationen darüber wie das libvirt-Paket kompiliert werden soll. Die ausgecheckte Datei entspricht dabei dem Stand des libvirt-Pakets aus dem offiziellen Arch-Linux-Repository. Aus diesem Grund müssen wir die Datei entsprechend anpassen, um beim Kompilieren die AppArmor-Unterstützung mit zu kompilieren. Dabei sind folgende Anpassungen vorzunehmen:

  • Als Abhängigkeit in der depends=()-Zeile apparmor hinzufügen.
  • Die Zeile groups=('custombuild') hinzufügen. Später konfigurieren wir pacman noch so, dass Pakete der Gruppe "custombuild" nicht aktualisiert werden. Ansonsten würde pacman unser selbstkompiliertes libvirt-Paket überschreiben, sobald es eine neue libvirt-Version in den offiziellen Paketquellen von Arch Linux gibt.
  • Die folgenden Build-/Kompilierungsoptionen auf enabled setzen:
    • -Dapparmor
    • -Dapparmor_profile
    • -Dsecdriver_apparmor

Die entsprechenden Zeilen in der PKGBUILD-Datei sollten dann in etwa so aussehen:

[...]
groups=('custombuild')
depends=('libpciaccess' 'yajl' 'fuse2' 'gnutls' 'parted' 'libssh' 'libxml2' 'numactl' 'polkit' 'apparmor')
[...]
-Dapparmor=enabled \
-Dapparmor_profiles=enabled \
-Dsecdriver_apparmor=enabled \
[...]
Datei: /tmp/build/libvirt/repos/community-x86_64/PKGBUILD

Nun können wir libvirt mit folgendem Befehl kompilieren:

extra-x86_64-build
Terminal / Konsole

Selbstkompiliertes libvirt-Paket installieren

Nachdem das Paket fertig und ohne ohne Fehler kompiliert wurde, kann es wie folgt mit pacman installiert werden:

sudo pacman -U libvirt-1:8.1.0-4-x86_64.pkg.tar.zst
Terminal / Konsole

Um zu überprüfen, ob AppArmor nun auch wirklich greift, wenn libvirt läuft, können wir den Befehl aa_status auf dem Host-System ausführen. Vorab müsst ihr euer System einmal neustarten. Lasst ihr eure QEMU/KVM-VMs und somit libvirt mit Root-Rechten laufen, wird libvirt im Normalfall bereits beim Systemstart ausgeführt. Andernfalls, wenn ihr eure VMs ohne Root-Rechte ausführt, müsst ihr zuerst einmal eine VM starten, damit libvirt ausgeführt wird. Die Ausgabe des Befehls sollte dann die libvirt-Prozesse im AppArmor-"enforce mode" auflisten:

[...]
2 processes are in enforce mode.
    /usr/bin/virtqemud (884) virtqemud
    /usr/bin/virtlogd (1151) virtqemud
[...]
Ausgabe des Befehls aa_status

pacman konfigurieren

Zuguterletzt müssen wir pacman noch, wie bereits zuvor beschrieben, so konfigurieren, dass unser selbstkompiliertes libvirt-Paket nicht automatisch durch pacman aktualisiert wird. Dazu ist in /etc/pacman.conf folgende Zeile zu ergänzen:

[...]
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
IgnoreGroup = custombuild
[...]
Datei: /etc/pacman.conf

Fazit

Auch unter Arch Linux lässt sich libvirt mit AppArmor absichern. Leider muss man dazu selbst das Paket entsprechend kompilieren und installieren. Außerdem muss man diesen Vorgang immer wiederholen, sobald eine neue libvirt-Version in den offiziellen Arch Linux Paketquellen verfügbar ist.