AppArmor/Policy: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K Textersetzung - „ TCP-“ durch „ TCP-“ |
||
| (3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 6: | Zeile 6: | ||
/pfad/zur/anwendung { | /pfad/zur/anwendung { | ||
#include <abstractions/base> | |||
[...] | |||
capability sys_admin, | |||
[...] | |||
# Kommentar | |||
/usr/lib/gconv/** r, | |||
/proc/meminfo r, | |||
/bin/basename rmix, | |||
[...] | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 62: | Zeile 62: | ||
== Berechtigungen == | == Berechtigungen == | ||
Grundprinzip: Ein Prozess mit AppArmor-Profil darf nur, was im Profil explizit erlaubt ist | Grundprinzip: Ein Prozess mit AppArmor-Profil darf nur, was im Profil explizit erlaubt ist | ||
* Fehlt | * Fehlt beispielsweise jede Regel für das Home-Verzeichnis, werden Zugriffe auf dieses Verzeichnis blockiert | ||
=== Dateirechte === | === Dateirechte === | ||
| Zeile 140: | Zeile 140: | ||
|- | |- | ||
| network tcp, | | network tcp, | ||
| TCP-Verbindungen werden erlaubt | | [[TCP]]-Verbindungen werden erlaubt | ||
|- | |- | ||
| network udp, | | network udp, | ||
| Zeile 208: | Zeile 208: | ||
<syntaxhighlight lang="ini" highlight="" line copy> | <syntaxhighlight lang="ini" highlight="" line copy> | ||
/usr/bin/hauptprogramm { | /usr/bin/hauptprogramm { | ||
[...] | |||
/usr/bin/hilfsprogramm Cx -> hilfsprogramm_child, | |||
[...] | |||
profile hilfsprogramm_child { | |||
/etc/hilfsprogramm.conf r, | |||
/var/lib/hilfsprogramm/** rw, | |||
[...] | [...] | ||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 222: | Zeile 222: | ||
== Abstractions == | == Abstractions == | ||
Im Verzeichnis ''/etc/apparmor.d/abstractions'' befinden sich vorgefertigte Regelsätze ('''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) | * 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 | * Ü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 | * Dadurch reduziert sich der Umfang einzelner Profile und gemeinsame Regeln werden zentral gepflegt | ||
| Zeile 231: | Zeile 231: | ||
* Konfliktierende Regeln aus unterschiedlichen ''abstractions'' können dazu führen, dass ein Profil nicht geladen werden kann | * 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 | * 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 | * Zur Absicherung sensibler Bereiche können gezielt spezielle ''abstractions'' (z. .B. für private Dateien) ergänzt werden | ||
== Profilbearbeitung == | == Profilbearbeitung == | ||
| Zeile 242: | Zeile 242: | ||
# Kontrolle, ob für Hilfsanwendungen versehentlich ''ux''/''Ux'' verwendet wurde | # Kontrolle, ob für Hilfsanwendungen versehentlich ''ux''/''Ux'' verwendet wurde | ||
# Umstrukturierung des Profils zur besseren Lesbarkeit (Gruppierung nach Pfaden oder Funktion) | # Umstrukturierung des Profils zur besseren Lesbarkeit (Gruppierung nach Pfaden oder Funktion) | ||
# Nachträgliche Einschränkung zu weit gefasster Regeln, | # Nachträgliche Einschränkung zu weit gefasster Regeln, beispielsweise durch zusätzliche ''deny''-Regeln für besonders kritische Dateien oder Verzeichnisse | ||
Aktuelle Version vom 4. Juli 2026, 11:51 Uhr
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 beispielsweise 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, beispielsweise 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