Zum Inhalt springen

AppArmor/Policy

Aus Foxwiki
Version vom 12. Dezember 2025, 16:12 Uhr von DanielZorin (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Profilaufbau

Ein AppArmor-Profil definiert, welche Ressourcen eine konkrete ausführbare Datei verwenden darf. Grundstruktur:

#include <tunables/global>

/pfad/zur/anwendung {
  #include <abstractions/base>
  [...]
  capability sys_admin,
  [...]
  # Kommentar
  /usr/lib/gconv/** r,
  /proc/meminfo r,
  /bin/basename rmix,
  [...]
}
  • #include <tunables/global> bindet globale Variablen wie @{HOME} oder @{PROC} ein
  • Der Pfad /pfad/zur/anwendung legt fest, für welche ausführbare Datei das Profil gilt
  • Alle Regeln stehen innerhalb der geschweiften Klammern nach dem Profilnamen
  • Jede Regelzeile endet mit einem Komma, mit Ausnahme von Kommentaren und #include-Anweisungen.
  • capability XYZ, definiert notwendige Kernel-Capabilities für den Prozess
  • Dateiregeln der Form /PFAD/ZU/DATEI OPTIONEN, legen Zugriffsrechte für Dateien oder Verzeichnisse fest
  • Jokerzeichen * und ** ermöglichen Globbing über Dateien und Verzeichnisse

Typische Beispiele für Dateiglob-Pattern:

Muster Beschreibung
/ordner/datei gilt für die spezifische Datei datei im Verzeichnis /ordner
/ordner/* gilt für alle Dateien im Verzeichnis /ordner
/ordner/a* gilt für alle Dateien im Verzeichnis, deren Name mit a beginnt
/ordner/*.png gilt für alle Dateien mit der Endung .png
/ordner/[^.]* gilt für alle Dateien in /ordner mit Ausnahme derjenigen, die mit . beginnen
/ordner/ gilt für das Verzeichnis /ordner
/ordner/*/ gilt für jedes Unterverzeichnis in /ordner
/ordner/** gilt für jede Datei oder jedes Verzeichnis in oder unterhalb von /ordner
/ordner/**/ gilt für jedes Verzeichnis in oder unterhalb von /ordner

Berechtigungen

Grundprinzip: Ein Prozess mit AppArmor-Profil darf nur, was im Profil explizit erlaubt ist

  • Fehlt z.B. jede Regel für das Home-Verzeichnis, werden Zugriffe auf dieses Verzeichnis blockiert

Dateirechte

Dateizugriffe werden über Einzelbuchstaben kombiniert:

Option Beschreibung
r Lesezugriff auf Datei oder Verzeichnis
w Schreibzugriff (Ändern, Anlegen, Löschen)
a Anhängen an bestehende Datei (Append)
l Erstellen und Auflösen von Links
k Sperren einer Datei (Lockfile)
m Nutzung von Speicherabbildungen (mmap)
x Ausführen einer Hilfsanwendung

Beispiel:

/var/log/meinprogramm/** rw,
@{HOME}/.meinprogramm/** r,

Attribute

Zusätzlich zu den Zugriffsrechten können Attribute gesetzt werden:

Attribut Beschreibung
audit alle Anwendungen der Regel werden protokolliert
owner die Regel gilt nur, wenn der aufrufende Benutzer Besitzer der Datei/des Verzeichnisses ist
deny Zugriff auf Datei/Verzeichnis wird explizit verboten

Beispiel:

audit deny @{HOME}/.config/autostart/** wl,
  • Diese Regel verbietet explizit Zugriffe auf Autostart-Dateien, protokolliert aber gleichzeitig jede solche Zugriffsanfrage.

Netzwerkrechte

Netzwerkzugriffe werden über eigene Regeln gesteuert:

Regel Beschreibung
network, allgemeiner Netzwerkzugriff wird erlaubt
deny network, jeglicher Netzwerkzugriff wird verboten
network tcp, TCP-Verbindungen werden erlaubt
network udp, UDP-Verbindungen werden erlaubt
network inet stream, IPv4-TCP-Verbindungen werden erlaubt
network inet6 dgram, IPv6-UDP-Verbindungen werden erlaubt

Beispiel:

network inet stream,
deny network inet6 dgram,
  • IPv4-TCP ist erlaubt, IPv6-UDP wird explizit verboten.

Ausführungsmodi

Die Ausführung von Hilfsanwendungen wird über Kombinationen mit x gesteuert:

Option englische Bezeichnung Beschreibung
ux unconfined execute mode Hilfsanwendung ohne AppArmor-Einschränkung ausführen
Ux unconfined execute – scrub the environment wie ux, aber mit Bereinigung ausgewählter Umgebungsvariablen
ix inherit execute mode Hilfsanwendung erbt das Profil der aufrufenden Anwendung
px discrete profile execute mode es muss ein separates Profil für die Hilfsanwendung existieren
Px discrete profile execute – scrub the environment wie px mit zusätzlicher Bereinigung der Umgebung
cx execute and transition to a child profile Wechsel in ein Kind-Profil innerhalb des aktuellen Profils
Cx execute and transition to a child profile – scrub the environment wie cx mit Bereinigung der Umgebung
  • ux und Ux nur im Ausnahmefall verwenden, da die Hilfsanwendung ohne zusätzliche Einschränkungen läuft
  • ix ist sinnvoll, wenn Hilfsanwendung exakt dieselben Rechte wie die Hauptanwendung haben soll
  • pxundPx trennen Rechte der Hilfsanwendung über ein eigenes Profil sauber von der Hauptanwendung
  • cxundCx eignen sich für Kind-Profile, bei denen die Hilfsanwendung je nach Aufrufer unterschiedliche Rechte erhält

Beispiel für eine Kind-Profil-Definition:

/usr/bin/hauptprogramm {
  [...]
  /usr/bin/hilfsprogramm Cx -> hilfsprogramm_child,
  [...]

  profile hilfsprogramm_child {
    /etc/hilfsprogramm.conf r,
    /var/lib/hilfsprogramm/** rw,
    [...]
  }
}

Abstractions

Im Verzeichnis /etc/apparmor.d/abstractions befinden sich vorgefertigte Regelsätze (abstractions).

  • Sie bündeln häufig genutzte Rechte (z.B. Desktop, X11, Netzwerk, lokale Konfiguration)
  • Über #include <abstractions/name> können diese Regelsätze in Profile eingebunden werden
  • Dadurch reduziert sich der Umfang einzelner Profile und gemeinsame Regeln werden zentral gepflegt
Hinweis
  • Viele abstractions binden wiederum andere abstractions ein, die effektiven Berechtigungen sind dadurch nicht immer sofort ersichtlich
  • Die Verwendung mehrerer abstractions kann dazu führen, dass einer Anwendung mehr Rechte als nötig eingeräumt werden.
  • Konfliktierende Regeln aus unterschiedlichen abstractions können dazu führen, dass ein Profil nicht geladen werden kann
  • Wenn Werkzeuge zur Profilerstellung wahlweise eine konkrete Regel oder eine abstraction vorschlagen, ist die konkrete Regel in der Regel restriktiver und besser kontrollierbar
  • Zur Absicherung sensibler Bereiche können gezielt spezielle abstractions (z.B. für private Dateien) ergänzt werden

Profilbearbeitung

Neue Regeln werden üblicherweise anhand von Log-Einträgen schrittweise ergänzt

  • Komplexe Profile können über Kommentare und Gruppierung der Regeln besser strukturiert werden

Anlässe für manuelle Anpassungen:

  1. Kontrolle, ob für Hilfsanwendungen versehentlich ux/Ux verwendet wurde
  2. Umstrukturierung des Profils zur besseren Lesbarkeit (Gruppierung nach Pfaden oder Funktion)
  3. Nachträgliche Einschränkung zu weit gefasster Regeln, z.B. durch zusätzliche deny-Regeln für besonders kritische Dateien oder Verzeichnisse


Profile, die durch Paketverwaltung bereitgestellt werden, sollten nicht direkt überschrieben werden

  • Zusätzliche lokale Regeln gehören in die zugehörigen Dateien unter /etc/apparmor.d/local, die in das Hauptprofil eingebunden werden
  • Auf diese Weise bleiben lokale Anpassungen auch bei Updates des Hauptprofils erhalten



Anhang

Siehe auch



Dokumentation

Links

Projekt

Weblinks