AppArmor for Modern Workloads: Containers & Users (Artikel 316)
Strategischer Einsatz von AppArmor in modernen IT-Umgebungen. Erfahren Sie alles über die Isolation von Container-Workloads, den Schutz von Benutzer-Sessions und die Härtung von Microservices.
# AppArmor Strategic: Container-Isolation und User-Sessions
TL;DR / Management Summary Während AppArmor oft für Systemdienste (Artikel 145) genutzt wird, liegt seine wahre Stärke heute in der Container-Orchestrierung und der User-Isolation. Docker, Podman und LXC nutzen AppArmor-Profile als primäre Sicherheitsmauer gegen Container-Escapes. Zudem lernen wir, wie wir mit pam_apparmor jedem Benutzer beim Login ein individuelles Sicherheits-Profil zuweisen, um den Zugriff auf das restliche System radikal einzuschränken.
# 1. Einführung & Architektur
Isolation auf Prozess-Ebene.
AppArmor ist für Container ideal, da es profilbasiert arbeitet. Ein Container-Laufzeit-System weist dem Prozess beim Start ein spezifisches Profil zu.
# Die Container-Isolation (Mermaid)
graph TD
A[Docker / Podman Engine] -->|Start Container| B[App Process]
B --> C{AppArmor Profile: docker-default}
C -->|Allow| D[Access to mapped Volume]
C -->|Deny| E[Access to /etc/shadow on Host]
C -->|Deny| F[Access to Hardware: /dev/mem]
C -->|Deny| G[Access to other Containers]
# 2. AppArmor in Docker & LXC
Die unsichtbare Mauer.
# Docker Default Profile
Standardmäßig nutzt Docker das Profil docker-default. Es verbietet kritische Aktionen wie das Mounten von Dateisystemen oder den Zugriff auf Kernel-Module.
# Prüfung beim Start
docker run --rm -it --security-opt label=disable alpine sh
# (Deaktiviert das Profil - nur für Debugging empfohlen!)
# Custom Profiles für Microservices
Schreiben Sie spezialisierte Profile für Ihre Container, die z.B. nur den Zugriff auf Port 80 und das Daten-Volume erlauben.
# 3. pam_apparmor: User-Sessions einsperren
Sicherheit beim Einloggen.
Mit dem PAM-Modul können Sie erzwingen, dass ein User (z.B. ein externer Dienstleister) sofort nach dem Login in ein restriktives AppArmor-Profil verschoben wird.
# Einrichtung
- Modul laden: In
/etc/pam.d/sshdodercommon-session:session optional pam_apparmor.so - Profil zuordnen: In
/etc/apparmor.d/pam/Profile für User-Rollen definieren.
# 4. Day-2 Operations: Auditing Container Escapes
Angriffe erkennen.
Verstöße von Containern tauchen im Host-Log auf. Da der Typ meist docker-default ist, lassen sie sich leicht filtern.
# Suche nach Container-Blockaden im Host-Log
sudo grep "apparmor=\"DENIED\"" /var/log/audit/audit.log | grep "docker-default"
# 5. Troubleshooting & “War Stories”
Wenn der Container ‘stumm’ bleibt.
# Story 1: “Der hängende Monitoring-Agent”
Symptom: Ein Monitoring-Agent im Docker-Container (z.B. Datadog oder Netdata) kann keine Metriken vom Host lesen.
Ursache: Das docker-default Profil verbietet den Zugriff auf /proc und /sys Pfade des Hosts.
Lösung: Erstellen Sie ein Custom-Profil oder nutzen Sie das Flag --security-opt apparmor=unconfined (Vorsicht: riskant!). Besser: Spezifische Pfade im Profil erlauben.
# Story 2: “Das Inode-Problem bei LXC”
Symptom: Ein LXC-Container unter Debian/Arch kann keine neuen Dateien erstellen, obwohl Platz frei ist.
Ursache: Das Standard-LXC-Profil von AppArmor blockiert bestimmte Dateisystem-Operationen, die zur Verwaltung von Kontingenten nötig sind.
Lösung: Nutzen Sie lxc.apparmor.profile = generated in der Container-Konfig, um ein maßgeschneidertes Profil für diesen Container erstellen zu lassen.
# 6. Fazit & Empfehlung
- Pflicht: Nutzen Sie AppArmor-Isolation für jeden produktiven Docker-Host.
- Wahl: Nutzen Sie pam_apparmor, wenn Sie Shared-Systeme (Terminalserver) betreiben, auf denen sich viele User gleichzeitig tummeln.
- Wartung: Testen Sie neue Container-Images immer erst mit dem Standard-Profil. Wenn es Fehler gibt, bauen Sie ein spezifisches Profil, anstatt die Sicherheit komplett abzuschalten.
# Anhang: Cheatsheet
| Aufgabe | Befehl / Parameter |
|---|---|
| Docker Profil nutzen | --security-opt apparmor=<profile> |
| Alle geladenen Profile | aa-status |
| Profil-Meldungen (Host) | `dmesg |
| PAM Integration | pam_apparmor.so |
| LXC Konfig-Eintrag | lxc.apparmor.profile = ... |
| K8s Integration | Annotation: container.apparmor.security.beta.kubernetes.io/... |
| Hilfe zu Profilen | man apparmor |