AppArmor CLI Reference: Debugging Tools (Artikel 149)
Der definitive Werkzeugkasten für AppArmor-Admins. Erfahren Sie den Umgang mit spezialisierten Tools wie aa-decode, aa-exec und aa-unconfined zur Fehlerdiagnose.
# AppArmor CLI Reference: Der Werkzeugkasten für die Fehlersuche
TL;DR / Management Summary Ein Senior Admin verlässt sich nicht nur auf
aa-status. Wenn die Fehlerursache tief im System liegt, kommen spezialisierte Tools zum Einsatz. Wir lernen, wie man hexadezimale Audit-Meldungen mit aa-decode lesbar macht, wie man Programme mit aa-exec testweise in ein Profil zwingt und wie man mit aa-unconfined Sicherheitslücken durch “ungeschützte” Netzwerk-Dämons aufdeckt.
# 1. Einführung & Architektur
Die Tools hinter dem Wizard.
Die meisten AppArmor-Tools sind Perl- oder Python-Skripte, die direkt auf die Kernel-Schnittstelle unter /sys/kernel/security/apparmor/ zugreifen.
# Die Werkzeug-Hierarchie (Mermaid)
graph TD
A[Kernel /sys/...] --> B[AppArmor Utils]
B --> C[Diagnosis: aa-status, aa-unconfined]
B --> D[Manipulation: aa-exec, apparmor_parser]
B --> E[Log Processing: aa-decode, aa-logprof]
B --> F[Automation: aa-autodep]
# 2. Diagnose-Tools im Detail
Sichtbarkeit schaffen.
# aa-status: Die Ist-Analyse
Der erste Befehl bei jedem Problem.
sudo aa-status
# Zeigt: Geladene Profile, Profile im Complain-Mode, Prozesse mit/ohne Profil.
# aa-unconfined: Das Sicherheits-Audit
Findet Prozesse, die Netzwerkports öffnen, aber kein AppArmor-Profil haben.
sudo aa-unconfined --active
# Jeder hier gelistete Prozess ist ein potenzieller Angriffsvektor!
# 3. Log-Analyse Tools
Die Wahrheit aus den Logs lesen.
# aa-decode: Hex-Code übersetzen
Audit-Logs enthalten oft kryptische Pfade in Hexadezimal-Form (z.B. bei Dateinamen mit Sonderzeichen).
# Übergabe der Logzeile an das Tool
echo "name=2f6574632f736861646f77" | aa-decode
# Output: Decoded: /etc/shadow
# 4. Day-2 Operations: Manipulation & Testing
Experimente sicher durchführen.
# aa-exec: Erzwungene Profile
Ideal, um zu testen, ob ein Programm mit einem Profil funktionieren würde, ohne es global zu aktivieren.
# Startet die Bash im Kontext des Nginx-Profils (Vorsicht: sehr restriktiv!)
sudo aa-exec -p /usr/sbin/nginx /bin/bash
# apparmor_parser: Der rohe Weg
Wenn systemd-reload nicht reicht, laden wir Profile manuell in den Kernel.
# Profil laden/ersetzen
sudo apparmor_parser -r /etc/apparmor.d/my.profile
# Profil komplett aus dem Kernel löschen
sudo apparmor_parser -R /etc/apparmor.d/my.profile
# 5. Troubleshooting & “War Stories”
Vermeiden Sie klassische Werkzeug-Fehler.
# Story 1: “Der falsche Pfad im Tool”
Symptom: aa-genprof findet keine Events, obwohl die Applikation blockiert wird.
Ursache: Das Tool sucht standardmäßig in /var/log/audit/audit.log. Auf Systemen ohne auditd landen die Meldungen aber in /var/log/messages oder nur im Journal.
Lösung: Installieren Sie auditd für die beste Tool-Kompatibilität oder nutzen Sie das Flag -f, um den Logpfad anzugeben.
# Story 2: “Das veraltete Cache-Problem”
Symptom: Das Profil wurde auf der Disk geändert, aber der Fehler bleibt bestehen, obwohl der Parser fehlerfrei durchlief.
Ursache: AppArmor nutzt einen binären Cache unter /var/cache/apparmor/. Manchmal wird dieser nicht sauber aktualisiert.
Lösung: Cache löschen und neu parsen:
sudo rm -rf /var/cache/apparmor/*
sudo systemctl restart apparmor
# 6. Fazit & Empfehlung
- Audit: Nutzen Sie
aa-unconfinedwöchentlich, um neue Dienste ohne Profil zu finden. - Debugging: Nutzen Sie
aa-decodebei komplexen Web-Applikationen mit langen URL-Pfaden. - Sicherheit: Geben Sie nur erfahrenen Admins Zugriff auf
aa-exec.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Schnelle Übersicht | aa-status --summary |
| Prozesse ohne Profil | aa-unconfined |
| Profile neu laden | apparmor_parser -r /etc/apparmor.d/* |
| Debugging-Mode | apparmor_parser -d /etc/apparmor.d/profile |
| Hilfe zu Profil-Syntax | man apparmor.d |
| Kernel Interface | ls /sys/kernel/security/apparmor/ |
| Profil-Integrität | `aa-status |
| Hex-Decoding | aa-decode --string <hex> |