AppArmor/Policy: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „==== Profilaufbau ==== Eine Profil-Datei ist dabei prinzipiell wie folgt aufgebaut vergrößern {| class="wikitable sortable options" |- || 1 2 3 4 5 6 7 8 9 10 11 12 13 || <nowiki>#include <tunables/global></nowiki> /pfad/zur/anwendung { <nowiki>#include <abstractions/base></nowiki> [...] capability sys_admin [...] <nowiki># Kommentar</nowiki> /usr/lib/gconv/** r /proc/meminfo r /bin/basename rmix [...] } |- |} * Mit dem Befehl <tt>…“ |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
== Profilaufbau == | |||
Ein AppArmor-Profil definiert, welche Ressourcen eine konkrete ausführbare Datei verwenden darf. Grundstruktur: | |||
<syntaxhighlight lang="ini" highlight="" line copy> | |||
#include <tunables/global> | |||
/pfad/zur/anwendung { | /pfad/zur/anwendung { | ||
#include <abstractions/base> | |||
[...] | |||
capability sys_admin, | |||
[...] | |||
# Kommentar | |||
/usr/lib/gconv/** r, | |||
/proc/meminfo r, | |||
/bin/basename rmix, | |||
[...] | |||
} | } | ||
</syntaxhighlight> | |||
* ''#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: | |||
{| class="wikitable options big" | |||
! 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: | |||
{| class="wikitable sortable options big" | |||
|- | |||
! 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: | |||
= | <syntaxhighlight lang="ini" line copy> | ||
/var/log/meinprogramm/** rw, | |||
@{HOME}/.meinprogramm/** r, | |||
</syntaxhighlight> | |||
{| class="wikitable sortable options" | === Attribute === | ||
Zusätzlich zu den Zugriffsrechten können Attribute gesetzt werden: | |||
{| class="wikitable sortable options big" | |||
|- | ! 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: | |||
== | <syntaxhighlight lang="ini" highlight="" line copy> | ||
audit deny @{HOME}/.config/autostart/** wl, | |||
</syntaxhighlight> | |||
* Diese Regel verbietet explizit Zugriffe auf Autostart-Dateien, protokolliert aber gleichzeitig jede solche Zugriffsanfrage. | |||
=== | === Netzwerkrechte === | ||
Netzwerkzugriffe werden über eigene Regeln gesteuert: | |||
{| class="wikitable sortable options" | {| class="wikitable sortable options big" | ||
! 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: | |||
<syntaxhighlight lang="ini" line copy> | |||
network inet stream, | |||
deny network inet6 dgram, | |||
</syntaxhighlight> | |||
* IPv4-TCP ist erlaubt, IPv6-UDP wird explizit verboten. | |||
=== Ausführungsmodi === | |||
Die Ausführung von Hilfsanwendungen wird über Kombinationen mit ''x'' gesteuert: | |||
{| class="wikitable sortable options big" | |||
|- | |||
! 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 | |||
* ''px''und''Px'' trennen Rechte der Hilfsanwendung über ein eigenes Profil sauber von der Hauptanwendung | |||
* ''cx''und''Cx'' eignen sich für Kind-Profile, bei denen die Hilfsanwendung je nach Aufrufer unterschiedliche Rechte erhält | |||
Beispiel für eine Kind-Profil-Definition: | |||
<syntaxhighlight lang="ini" highlight="" line copy> | |||
/usr/bin/hauptprogramm { | |||
[...] | |||
/usr/bin/hilfsprogramm Cx -> hilfsprogramm_child, | |||
[...] | |||
profile hilfsprogramm_child { | |||
/etc/hilfsprogramm.conf r, | |||
/var/lib/hilfsprogramm/** rw, | |||
[...] | |||
} | |||
} | } | ||
</syntaxhighlight> | |||
== 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 | |||
<noinclude> | |||
==== | == Anhang == | ||
=== Siehe auch === | |||
<div style="column-count:2"> | |||
<categorytree hideroot=on mode="pages">{{BASEPAGENAME}}</categorytree> | |||
</div> | |||
---- | |||
{{Special:PrefixIndex/{{BASEPAGENAME}}/}} | |||
=== Dokumentation === | |||
<!-- | |||
; Man-Page | |||
; Info-Pages | |||
--> | |||
=== Links === | |||
==== Projekt ==== | |||
==== Weblinks ==== | |||
<!-- | |||
{{DEFAULTSORT:new}} | |||
{{DISPLAYTITLE:new}} | |||
--> | |||
[[Kategorie:AppArmor]] | [[Kategorie:AppArmor]] | ||
</noinclude> | |||
Aktuelle Version vom 12. Dezember 2025, 16:12 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 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