AppArmor/Policy
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:
- Kontrolle, ob für Hilfsanwendungen versehentlich ux/Ux verwendet wurde
- Umstrukturierung des Profils zur besseren Lesbarkeit (Gruppierung nach Pfaden oder Funktion)
- 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