AppArmor/HowTo: Unterschied zwischen den Versionen

Aus Foxwiki
Die Seite wurde neu angelegt: „= AppArmor = === Zum Verständnis dieses Artikels sind folgende Seiten hilfreich: === # [https://wiki.ubuntuusers.de/Pakete_installieren/ Installation von Programmen] # [https://wiki.ubuntuusers.de/Terminal/ Ein Terminal öffnen] # [https://wiki.ubuntuusers.de/mit_Root-Rechten_arbeiten/ mit Root-Rechten arbeiten] top|alt="./apparmor.png" [https://gitlab.com/apparmor/apparmor/ AppArmor] ist ein Sicherheitsframework für Linux.…“
 
K Textersetzung - „= Umgebungsvariablen =“ durch „= Umgebung =“
 
(62 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= AppArmor =
'''AppArmor''' - Sicherheitsframework für Linux


=== Zum Verständnis dieses Artikels sind folgende Seiten hilfreich: ===
== Beschreibung ==
{| class="wikitable options float"
|+ Hilfreiche Vorkenntnisse
|-
! !! Beschreibung
|-
| [https://wiki.ubuntuusers.de/Pakete_installieren/ Installation von Programmen] ||
|-
| [https://wiki.ubuntuusers.de/Terminal/ Ein Terminal öffnen] ||
|-
| [https://wiki.ubuntuusers.de/mit_Root-Rechten_arbeiten/ mit Root-Rechten arbeiten] ||
|}


# [https://wiki.ubuntuusers.de/Pakete_installieren/ Installation von Programmen]
[[File:appArmor.png|mini|600px|link=]]
# [https://wiki.ubuntuusers.de/Terminal/ Ein Terminal öffnen]  
# [https://wiki.ubuntuusers.de/mit_Root-Rechten_arbeiten/ mit Root-Rechten arbeiten]


Als [https://de.wikipedia.org/wiki/Mandatory_Access_Control Mandatory Access Control] (MAC) System kontrolliert es Anwendungen einzeln
* Für diese können in Profilen Zugriffsrechte festgelegt werden, die feiner als die allgemeinen [https://wiki.ubuntuusers.de/Rechte/ Dateirechte] sind
* Neben den [https://wiki.ubuntuusers.de/AppArmor/#regel_default vordefinierten] können [https://wiki.ubuntuusers.de/Archiv/AppArmor/Profile_erstellen/ eigene] Profile aufgestellt werden
* Für jedes Profil kann einer von drei [https://wiki.ubuntuusers.de/AppArmor/#modi Eingriffs-Modi] gesetzt werden


; Zweck
Zweck von AppArmor ist der Schutz von sicherheitskritischen Anwendungen, in erster Linie also Anwendungen/Prozesse mit Netzwerkzugriff, aber auch von z. B. Büroanwendungen, die durch das Laden verseuchter Dokumente u. U. das System kompromittieren könnten


[[Image:Bild1.png|top|alt="./apparmor.png"]]
; Entstehung
AppArmor ist seit Kernel 2.6.36 offiziell [https://kernelnewbies.org/Linux_2_6_36 integriert] Ab [https://wiki.ubuntuusers.de/Gutsy_Gibbon/ Ubuntu 7.10] wird es beim Systemstart geladen
* Das gilt auch für die zugehörigen Profile (Regelsätze)
Von 2005 bis 2007 wurde AppArmor maßgeblich von Novell entwickelt
* Seit 2009 engagiert sich Canonical verstärkt für das Sicherheitsframework, wodurch dann auch die bereits erwähnte Aufnahme in den Linux-Kernel erreicht wurde


[https://gitlab.com/apparmor/apparmor/ AppArmor] ist ein Sicherheitsframework für Linux. Als [https://de.wikipedia.org/wiki/Mandatory_Access_Control Mandatory Access Control] (MAC) System kontrolliert es Anwendungen einzeln. Für diese können in Profilen Zugriffsrechte festgelegt werden, die feiner als die allgemeinen [https://wiki.ubuntuusers.de/Rechte/ Dateirechte] sind. Neben den [https://wiki.ubuntuusers.de/AppArmor/#regel_default vordefinierten] können [https://wiki.ubuntuusers.de/Archiv/AppArmor/Profile_erstellen/ eigene] Profile aufgestellt werden. Für jedes Profil kann einer von drei [https://wiki.ubuntuusers.de/AppArmor/#modi Eingriffs-Modi] gesetzt werden.
; SELinux
AppArmor wurde als Alternative zum als schwer konfigurierbar geltenden [https://de.wikipedia.org/wiki/SELinux SELinux] konzipiert
* Von den "großen" Linux-Distributionen verwendet neben Ubuntu noch openSUSE in der Standardinstallation das Framework


Zweck von AppArmor ist der Schutz von sicherheitskritischen Anwendungen, in erster Linie also Anwendungen/Prozesse mit Netzwerkzugriff, aber auch von z.B. Büroanwendungen, die durch das Laden verseuchter Dokumente u.U. das System kompromittieren könnten.
=== Schutz durch AppArmor ===
AppArmor wird automatisch geladen
* Möchte man eine neue Regel laden, so muss man dies von Hand erledigen
* Grundsätzlich sollte jedes Programm, das eine Angriffsfläche bietet, durch AppArmor geschützt werden
* Eine Auflistung der nicht profilierten Online-Anwendungen erhält man durch ein AppArmor-Werkzeug, das man im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]] aufruft


AppArmor ist seit Kernel 2.6.36 offiziell [https://kernelnewbies.org/Linux_2_6_36 integriert] Ab [https://wiki.ubuntuusers.de/Gutsy_Gibbon/ Ubuntu 7.10] wird es beim Systemstart geladen. Das gilt auch für die zugehörigen Profile (Regelsätze).
sudo aa-unconfined


Von 2005 bis 2007 wurde AppArmor maßgeblich von Novell entwickelt. Seit 2009 engagiert sich Canonical verstärkt für das Sicherheitsframework, wodurch dann auch die bereits erwähnte Aufnahme in den Linux-Kernel erreicht wurde.
Dieses ermittelt mittels [https://wiki.ubuntuusers.de/netstat/ netstat], welche Programme offene Netzwerk-Sockets (TCP/UDP) besitzen und ob sie ein AppArmor-Profil besitzen
* Eine Ausgabe kann folgendermaßen aussehen


AppArmor wurde als Alternative zum als schwer konfigurierbar geltenden [https://de.wikipedia.org/wiki/SELinux SELinux] konzipiert. Von den "großen" Linux-Distributionen verwendet neben Ubuntu noch openSUSE in der Standardinstallation das Framework.
5460 /usr/sbin/avahi-daemon not confined
5460 /usr/sbin/avahi-daemon not confined
5806 /sbin/dhclient3 not confined
18367 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (enforce)'


== Installation ==
Man sieht hier drei Dienste, von denen nur einer geschützt wird (<tt>cups</tt>)
* Man besitzt also zwei ungeschützte Dienste: <tt>avahi-daemon</tt> und <tt>dhclient3</tt>. <tt>avahi-daemon</tt> wird wahrscheinlich doppelt gelistet, weil es sowohl auf TCP wie auch UDP lauscht
* Diese beiden Dienste sind standardmäßig auf Ubuntu installiert
* Sie sind nur aus dem lokalen Netzwerk, aber nicht aus dem Internet zu erreichen und gelten deshalb als sicher und nicht ausnutzbar
* Mehr dazu kann man im Artikel [https://wiki.ubuntuusers.de/Offene_Ports/ Offene Ports] lesen
* Paranoide werden wahrscheinlich trotzdem eine Regel dafür haben wollen, aber nach derzeitigem Kenntnisstand ist dies nicht erforderlich


Seit 2007 ist AppArmor mit Hilfswerkzeugen in der Standardinstallation von Ubuntu enthalten. Ansonsten kann es über die folgenden Pakete nachinstalliert werden [https://wiki.ubuntuusers.de/AppArmor/#source-1 [1]]:* '''apparmor'''
Sollte aa-unconfined weitere Dienste anzeigen, wie zum Beispiel [https://wiki.ubuntuusers.de/Privoxy/ Privoxy] oder [https://wiki.ubuntuusers.de/Tor/ Tor], sollte man diese von AppArmor schützen lassen
* Als Anmerkung sei noch gesagt, dass aa-unconfined mit großer Wahrscheinlichkeit nur Dienste anzeigen wird und nicht normale Internetanwendungen (wie zum Beispiel einen Browser)
* Das bedeutet aber nicht, dass diese nicht geschützt werden sollten
* Wie bereits gesagt ist die aa-unconfined-Liste nur ein kleiner Ausschnitt der schützenswerten Anwendungen und in keinem Fall vollständig


Auch Windows-Anwendungen über [https://wiki.ubuntuusers.de/Wine/ Wine] lassen sich mit AppArmor kontrollieren
* Ausführliche Hinweise dazu finden sich unter [https://gitlab.com/apparmor/apparmor/wikis/AppArmorWine AppArmorWine] und [https://forum.ubuntuusers.de/topic/apparmor-profil-fuer-wine/ im Forum]


 
== Installation ==
Befehl zum Installieren der Pakete:  
Seit 2007 ist AppArmor mit Hilfswerkzeugen in der Standardinstallation von Ubuntu enthalten
 
* Ansonsten kann es über die folgenden Pakete nachinstalliert werden [https://wiki.ubuntuusers.de/AppArmor/#source-1 [1]]:* '''apparmor'''
sudo apt-get install apparmor  
sudo apt-get install apparmor


Oder mit [https://wiki.ubuntuusers.de/apturl/ apturl] installieren, Link: [apt://apparmor apt://apparmor]
Oder mit [https://wiki.ubuntuusers.de/apturl/ apturl] installieren, Link: [apt://apparmor apt://apparmor]


=== Hilfsprogramme ===
=== Hilfsprogramme ===
 
Die Hilfsprogramme zu AppArmor sind im Paket '''apparmor-utils''', enthalten, das man manuell nachinstallieren muss
Die Hilfsprogramme zu AppArmor sind im Paket* '''apparmor-utils'''
sudo apt-get install apparmor-utils
 
 
 
Befehl zum Installieren der Pakete:
 
sudo apt-get install apparmor-utils  
 
Oder mit [https://wiki.ubuntuusers.de/apturl/ apturl] installieren, Link: [apt://apparmor-utils apt://apparmor-utils]
 
enthalten, welches man manuell nachinstallieren muss.


Wer <tt>DENIED</tt> Nachrichten in der Desktopumgebung erhalten möchte, muss zusätzlich das Paket* '''apparmor-notify''' (''universe'')
Wer <tt>DENIED</tt> Nachrichten in der Desktopumgebung erhalten möchte, muss zusätzlich das Paket* '''apparmor-notify''' (''universe'')
sudo apt-get install apparmor-notify


=== Weitere Regelsätze ===
AppArmor Profile für diverse Programme
# apt install apparmor-profiles apparmor-profiles-extra


== Syntax ==
<syntaxhighlight lang="bash" highlight="1" line>


Befehl zum Installieren der Pakete:
</syntaxhighlight>
 
sudo apt-get install apparmor-notify
 
Oder mit [https://wiki.ubuntuusers.de/apturl/ apturl] installieren, Link: [apt://apparmor-notify apt://apparmor-notify]
 
installieren. Dies ist normalerweise nur notwendig, wenn man ein Programm oder selber erstellte Profile sehr gezielt beobachten möchte. Bei normaler Nutzung des Rechners wird das Paket nicht benötigt.
 
=== weitere Regelsätze ===
 
In der Installation sind nur sehr wenige Regeln enthalten. Ein größerer Regelsatz kann über die Pakete* '''apparmor-profiles'''
* '''apparmor-profiles-extra''' (''universe'')
 
 
 
Befehl zum Installieren der Pakete:
 
sudo apt-get install apparmor-profiles apparmor-profiles-extra


Oder mit [https://wiki.ubuntuusers.de/apturl/ apturl] installieren, Link: [apt://apparmor-profiles,apparmor-profiles-extra apt://apparmor-profiles,apparmor-profiles-extra]
=== Optionen ===
 
=== Parameter ===
installiert werden. Darin sind eine Reihe von AppArmor Profilen für diverse Programme enthalten.
=== Umgebung ===
 
=== Rückgabewert ===
== Verzeichnisstruktur ==
== Anwendung ==
 
; Hinweis
Globale und Systemeinstellungen sind in '''/etc/apparmor''' gespeichert. Die Anwendungsprofile sowie mehrere vordefinierte Unterverzeichnisse befinden sich in '''/etc/apparmor.d/'''. Eine ausführliche Darstellung der Verzeichnisstruktur nebst Inhalten ist unter [https://gitlab.com/apparmor/apparmor/wikis/Policy_Layout Policy Layout] verfügbar.
: Alle Befehle zur Steuerung von AppArmor müssen mit Root-Rechten[https://wiki.ubuntuusers.de/AppArmor/#source-3 [3]] aufgerufen werden!
 
=== disable und force-complain ===
 
Enthält '''/etc/apparmor.d/disable''' eine Verknüpfung zu einem Profil, so wird dieses nicht automatisch geladen. Ähnlich sorgen Verknüpfungen unter '''/etc/apparmor.d/force-complain''' dafür, dass Profile nur im <tt>complain</tt>-Modus geladen werden ([https://wiki.ubuntuusers.de/AppArmor/#AppArmor-Modi-flags siehe unten]).
 
== Benutzung ==
 
=== Hinweis: ===
 
Alle Befehle zur Steuerung von AppArmor müssen mit Root-Rechten[https://wiki.ubuntuusers.de/AppArmor/#source-3 [3]] aufgerufen werden!  


=== AppArmor Utilities ===
=== AppArmor Utilities ===
Nach der Installation von '''apparmor-utils''' stehen folgende Kommandozeilen-Werkzeuge zur Verfügung


Nach der Installation von '''apparmor-utils''' stehen folgende Kommandozeilen-Werkzeuge zur Verfügung:
{| class="wikitable sortable options big"  
 
|-  
 
! Utility !! Beschreibung
{| style="border-spacing:0;width:17cm;"
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-enabled</tt>
|| Utility  
|| simple Abfrage, ob AppArmor aktiviert ist
|| Beschreibung  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-status</tt>
|| <tt>aa-enabled</tt>  
|| Überblick über die geladenen AppArmor-Profile mit Angabe des Modus
|| simple Abfrage, ob AppArmor aktiviert ist  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-disable</tt>
|| <tt>aa-status</tt>  
|| Ein AppArmor Profile deaktivieren
|| Überblick über die geladenen AppArmor-Profile mit Angabe des Modus  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-teardown</tt>
|| <tt>aa-disable</tt>  
|| Alle AppArmor Profile entladen, d.&nbsp;h.&nbsp;aus dem Speichern entfernen, so dass keine Profile in der laufenden Sitzung mehr aktiv sind
|| Ein AppArmor Profile deaktivieren.
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-exec</tt>
|| <tt>aa-teardown</tt>  
|| Eine Anwendung mit einem speziellen, anzugebenden AppArmor Profil starten
|| Alle AppArmor Profile entladen, d.h. aus dem Speichern entfernen, so dass keine Profile in der laufenden Sitzung mehr aktiv sind.
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-unconfined</tt>
|| <tt>aa-exec</tt>  
|| Ausgabe der Prozesse mit Netzwerkzugriff ohne Profil
|| Eine Anwendung mit einem speziellen, anzugebenden AppArmor Profil starten.
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-audit</tt>
|| <tt>aa-unconfined</tt>  
|| Profil in den Audit-Modus versetzen
|| Ausgabe der Prozesse mit Netzwerkzugriff ohne Profil  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-complain</tt>
|| <tt>aa-audit</tt>  
|| Profil in den Complain-Modus versetzen
|| Profil in den Audit-Modus versetzen  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-enforce</tt>
|| <tt>aa-complain</tt>  
|| Profil in den Enforce-Modus versetzen
|| Profil in den Complain-Modus versetzen  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-autodep</tt>
|| <tt>aa-enforce</tt>  
|| Erstellung eines Basis-Profils im Complain-Modus
|| Profil in den Enforce-Modus versetzen  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-genprof</tt>
|| <tt>aa-autodep</tt>  
|| Erstellung eines Basis-Profils mit interaktiver Ergänzung von Regeln und abschließender Versetzung des Profils in den Enforce-Modus
|| Erstellung eines Basis-Profils im Complain-Modus  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-logprof</tt>
|| <tt>aa-genprof</tt>  
|| interaktive Ergänzung von Regeln anhand der Einträge in '''/var/log/syslog'''
|| Erstellung eines Basis-Profils mit interaktiver Ergänzung von Regeln und abschließender Versetzung des Profils in den Enforce-Modus  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-cleanprof</tt>
|| <tt>aa-logprof</tt>  
|| automatisches Aufräumen eines Profils
|| interaktive Ergänzung von Regeln anhand der Einträge in '''/var/log/syslog'''  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>aa-easyprof</tt>
|| <tt>aa-cleanprof</tt>  
|| Einfaches Erstellen eines Profils
|| automatisches Aufräumen eines Profils  
* Mit <tt>aa-easyprof</tt> estellte Profile sind gegebenenfalls weniger restriktiv als mit <tt>aa-genprof</tt> oder <tt>aa-logprof</tt> erstellte Profile
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>aa-easyprof</tt>  
|| <tt>aa-mergeprof</tt>
|| Einfaches Erstellen eines Profils. Mit <tt>aa-easyprof</tt> estellte Profile sind gegebenenfalls weniger restriktiv als mit <tt>aa-genprof</tt> oder <tt>aa-logprof</tt> erstellte Profile.
|| AppArmor Profile zusammenführen
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>aa-mergeprof</tt>  
|| <tt>aa-decode</tt>
|| AppArmor Profile zusammenführen.
|| Decodiert einen String in Hexadezimaldarstellung aus dem AppArmor Log in einen ASCII-String
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>aa-decode</tt>  
|| <tt>aa-features-abi</tt>
|| Decodiert einen String in Hexadezimaldarstellung aus dem AppArmor Log in einen ASCII-String.
|| Extrahieren, Validieren und Ändern der AppArmor Feature ABI
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>aa-features-abi</tt>  
|| <tt>aa-remove-unknown</tt>
|| Extrahieren, Validieren und Ändern der AppArmor Feature ABI  
|| Unbekannte AppArmor Profile entfernen
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>aa-remove-unknown</tt>  
|| <tt>aa-update-browser</tt>
|| Unbekannte AppArmor Profile entfernen  
|| Apparmor Profile für Browser aktualisieren
|- style="border:none;padding:0.049cm;"
|| <tt>aa-update-browser</tt>  
|| Apparmor Profile für Browser aktualisieren.
|-
|-
|}
|}
Im Idealfall nutzt man AppArmor ohne es zu bemerken, da Regeln die entsprechenden Anwendungen schützen, aber nicht beeinträchtigen. Um zu überprüfen, ob AppArmor installiert und aktiviert ist, dient folgender Befehl im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]]:
Im Idealfall nutzt man AppArmor ohne es zu bemerken, da Regeln die entsprechenden Anwendungen schützen, aber nicht beeinträchtigen
* Um zu überprüfen, ob AppArmor installiert und aktiviert ist, dient folgender Befehl im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]]


aa-enabled  
aa-enabled


Einen weiterführenden Überblick über den aktuellen Status von AppArmor erhält man mit folgendem Befehl:
Einen weiterführenden Überblick über den aktuellen Status von AppArmor erhält man mit folgendem Befehl


sudo aa-status  
sudo aa-status


=== AppArmor Modi (flags) ===
=== AppArmor Modi (flags) ===
AppArmor kennt drei Modi für jedes einzelne Profil


AppArmor kennt drei Modi für jedes einzelne Profil:
{| class="wikitable sortable options"
|-
! Modus !! Beschreibung
|-
|| <tt>complain</tt>
|| "Lernmodus": Aktionen, die gegen die Regeln verstoßen, werden nur geloggt und nicht verboten
* Das Profil enthält die Kennzeichnung <tt>flags=(complain)</tt>
|-
|| <tt>enforce</tt>
|| "Zwangsmodus": Aktionen, die gegen die Regeln verstoßen, werden geloggt und verboten
* Das Profil enthält die Kennzeichnung <tt>flags=(enforce)</tt>
|-
|| <tt>audit</tt>
|| "Prüfmodus": Alle Regelanwendungen und Regelverstöße werden geloggt
* Das Profil enthält die Kennzeichnung <tt>flags=(audit)</tt>
|-
|}


Profile werden somit folgendermaßen geladen


{| style="border-spacing:0;width:17cm;"
sudo aa-complain PROFIL <nowiki># für den "Complain"-Modus</nowiki>
|- style="border:none;padding:0.049cm;"
sudo aa-enforce PROFIL <nowiki># für den "Enforce"-Modus</nowiki>
|| Modus
sudo aa-audit PROFIL <nowiki># für den "Audit"-Modus </nowiki>
|| Beschreibung
|- style="border:none;padding:0.049cm;"
|| <tt>complain</tt>  
|| "Lernmodus": Aktionen, die gegen die Regeln verstoßen, werden nur geloggt und nicht verboten. Das Profil enthält die Kennzeichnung <tt>flags=(complain)</tt>.
|- style="border:none;padding:0.049cm;"
|| <tt>enforce</tt>  
|| "Zwangsmodus": Aktionen, die gegen die Regeln verstoßen, werden geloggt und verboten. Das Profil enthält die Kennzeichnung <tt>flags=(enforce)</tt>.
|- style="border:none;padding:0.049cm;"
|| <tt>audit</tt>  
|| "Prüfmodus": Alle Regelanwendungen und Regelverstöße werden geloggt. Das Profil enthält die Kennzeichnung <tt>flags=(audit)</tt>.
|-
|}
Profile werden somit folgendermaßen geladen:


sudo aa-complain PROFIL      <nowiki># für den "Complain"-Modus</nowiki>
Möchte man alle Profile auf einmal aktivieren, so geschieht dies mit diesem Befehl
sudo aa-enforce PROFIL      <nowiki># für den "Enforce"-Modus</nowiki>
sudo aa-audit PROFIL        <nowiki># für den "Audit"-Modus </nowiki>


Möchte man alle Profile auf einmal aktivieren, so geschieht dies mit diesem Befehl:
sudo aa-complain /etc/apparmor.d/* <nowiki># für den "Complain"-Modus"</nowiki>
sudo aa-enforce /etc/apparmor.d/* <nowiki># für den "Enforce"-Modus </nowiki>


sudo aa-complain /etc/apparmor.d/*    <nowiki># für den "Complain"-Modus"</nowiki>
Das [https://wiki.ubuntuusers.de/Logdateien/ Logging] erfolgt dabei sowohl in der Syslog '''/var/log/syslog''' als auch in erweiterter Form in der Kernel-Log '''/var/log/kern.log'''
sudo aa-enforce /etc/apparmor.d/*      <nowiki># für den "Enforce"-Modus </nowiki>
* Die '''/var/log/syslog''' ist dabei jedoch standardmäßig die ausschlaggebende, die auch von den AppArmor-Utils '''aa-logprof''' und '''aa-genprof''' benutzt wird


Das [https://wiki.ubuntuusers.de/Logdateien/ Logging] erfolgt dabei sowohl in der Syslog '''/var/log/syslog''' als auch in erweiterter Form in der Kernel-Log '''/var/log/kern.log'''. Die '''/var/log/syslog''' ist dabei jedoch standardmäßig die ausschlaggebende, die auch von den AppArmor-Utils '''aa-logprof''' und '''aa-genprof''' benutzt wird. Möchte man sich von Hand anschauen, was AppArmor loggt, eignet sich [https://wiki.ubuntuusers.de/tail/ tail] durch Ausführung von
Möchte man sich von Hand anschauen, was AppArmor loggt, eignet sich [https://wiki.ubuntuusers.de/tail/ tail] durch Ausführung von
tail -F /var/log/syslog | grep "apparmor"


tail -F /var/log/syslog | grep "apparmor"
bzw


bzw.
tail -F /var/log/kern.log | grep "apparmor"


tail -F /var/log/kern.log | grep "apparmor"
[https://wiki.ubuntuusers.de/AppArmor/#regel_default]


[https://wiki.ubuntuusers.de/AppArmor/#regel_default ⚓︎] Die Regelsätze befinden sich im Verzeichnis '''/etc/apparmor.d/'''. Die Regeln haben dabei die Struktur "pfad.zur.datei.dateiname". Es ist also der Dateipfad enthalten, allerdings durch einen Punkt anstatt eines Slashs getrennt, der letzte Teil gibt den Namen des Programms/Dienstes/... an.
Die Regelsätze befinden sich im Verzeichnis '''/etc/apparmor.d/'''
* Die Regeln haben dabei die Struktur "pfad.zur.datei.dateiname"
* Es ist also der Dateipfad enthalten, allerdings durch einen Punkt anstatt eines Slashs getrennt, der letzte Teil gibt den Namen des Programms/Dienstes/ an


=== Deaktivieren und Reaktivieren ===
=== Deaktivieren und Reaktivieren ===
Die Steuerung von AppArmor erfolgt als [https://wiki.ubuntuusers.de/Dienste/ Dienst]
* Um diesen komplett zu stoppen, dient nicht wie bei anderen Diensten üblich der Befehl <tt>stop</tt>, dieser leert nur den Cache
* Um AppArmor komplett zu stoppen, muss der folgende Befehl eingegeben werden


Die Steuerung von AppArmor erfolgt als [https://wiki.ubuntuusers.de/Dienste/ Dienst]. Um diesen komplett zu stoppen, dient nicht wie bei anderen Diensten üblich der Befehl <tt>stop</tt>, dieser leert nur den Cache. Um AppArmor komplett zu stoppen, muss der folgende Befehl eingegeben werden:
sudo aa-teardown


sudo aa-teardown
Der Neustart inkl.&nbsp;Laden alle aktiven Profile erfolgt mit


Der Neustart inkl. Laden alle aktiven Profile erfolgt mit:
sudo systemctl reload apparmor.service
 
sudo systemctl reload apparmor.service  


=== AppArmor Notify ===
=== AppArmor Notify ===
Hat man das Paket '''aa-notify''' installiert, kann man die Benachrichtigung für DENIED-Messages aktivieren
* Dazu dient folgender Befehl im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]]


Hat man das Paket '''aa-notify''' installiert, kann man die Benachrichtigung für DENIED-Messages aktivieren. Dazu dient folgender Befehl im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]]:
aa-notify -p


aa-notify -p
Die Benachrichtigung kann man testen mit


Die Benachrichtigung kann man testen mit:
sudo tcpdump -i enp0s31f6 -n -s 0 -w /foo
 
sudo tcpdump -i enp0s31f6 -n -s 0 -w /foo  


(enp0s31f6 ist das Tcpip-Interface, das man mit ifconfig findet)
(enp0s31f6 ist das Tcpip-Interface, das man mit ifconfig findet)


=== Profile bearbeiten ===
=== Profile bearbeiten ===
Grundsätzlich ist es möglich, von Hand bestehende Profile zu bearbeiten oder neue zu erstellen
* Es handelt es sich um normale Textdateien


Grundsätzlich ist es möglich, von Hand bestehende Profile zu bearbeiten oder neue zu erstellen. Es handelt es sich um normale Textdateien.
; Achtung
 
Wer das Editieren von Hand beabsichtigt, sollte genau wissen, was er tut! Es besteht eine erhöhte Gefahr, dass das Programm, welches durch das editierte Profil gesichert ist, entweder nicht mehr ausreichend gesichert ist oder auch, dass die Sicherung zu restriktiv ist, so dass das Programm nicht mehr richtig ablaufen kann!
=== Achtung! ===
 
Wer das Editieren von Hand beabsichtigt, sollte genau wissen, was er tut! Es besteht eine erhöhte Gefahr, dass das Programm, welches durch das editierte Profil gesichert ist, entweder nicht mehr ausreichend gesichert ist oder auch, dass die Sicherung zu restriktiv ist, so dass das Programm nicht mehr richtig ablaufen kann!  


==== Profilaufbau ====
==== Profilaufbau ====
 
Eine Profil-Datei ist dabei prinzipiell wie folgt aufgebaut
Eine Profil-Datei ist dabei prinzipiell wie folgt aufgebaut:


vergrößern
vergrößern


 
{| class="wikitable sortable options"  
{| style="border-spacing:0;width:7.253cm;"
|-  
|- style="border:none;padding:0.049cm;"
|| 1
|| 1
  2
  2
  3
  3
Zeile 260: Zeile 272:


/pfad/zur/anwendung {
/pfad/zur/anwendung {
  <nowiki>#include <abstractions/base></nowiki>
<nowiki>#include <abstractions/base></nowiki>
  [...]
[...]
  capability sys_admin,
capability sys_admin
  [...]
[...]
  <nowiki># Kommentar</nowiki>
<nowiki># Kommentar</nowiki>
  /usr/lib/gconv/** r,
/usr/lib/gconv/** r
  /proc/meminfo r,
/proc/meminfo r
  /bin/basename rmix,
/bin/basename rmix
  [...]
[...]
}
}
|-
|-
|}
|}
* Mit dem Befehl <tt><nowiki>#include</nowiki></tt> können andere (grundlegende) Regelsätze eingebunden werden.
* Mit dem Befehl <tt><nowiki>#include</nowiki></tt> können andere (grundlegende) Regelsätze eingebunden werden
* In allen Profilen ist grundsätzlich die Datei '''/etc/apparmor.d/tunables/global''' mit <tt><nowiki>#include</nowiki></tt> eingebunden, die wiederum weitere Dateien aus diesem Verzeichnis enthält, in denen u.a. Variablen wie <tt>@{HOME}</tt> (für alle [https://wiki.ubuntuusers.de/Homeverzeichnis/ Homeverzeichnisse]) oder <tt>@{PROC}</tt> (für das Verzeichnis '''/proc/''') definiert sind.
* In allen Profilen ist grundsätzlich die Datei '''/etc/apparmor.d/tunables/global''' mit <tt><nowiki>#include</nowiki></tt> eingebunden, die wiederum weitere Dateien aus diesem Verzeichnis enthält, in denen u.a.&nbsp;Variablen wie <tt>@{HOME}</tt> (für alle [https://wiki.ubuntuusers.de/Homeverzeichnis/ Homeverzeichnisse]) oder <tt>@{PROC}</tt> (für das Verzeichnis '''/proc/''') definiert sind
* Nach der Angabe des Pfades zur Anwendung, für die das Profil erstellt ist, stehen sämtliche Regeln innerhalb von geschweiften Klammern. Jede Zeile endet mit einem Komma - mit Ausnahme von Kommentaren, <tt><nowiki>#include</nowiki></tt>-Anweisungen, mit denen sogenannten <tt>abstractions</tt> eingebunden werden, und Kind-Profile (näheres dazu weiter unten).
* Nach der Angabe des Pfades zur Anwendung, für die das Profil erstellt ist, stehen sämtliche Regeln innerhalb von geschweiften Klammern
* Mit dem Befehl <tt>capability XYZ</tt> werden grundlegende Eigenschaften/Merkmale definiert. Siehe dazu die entsprechende [https://manpages.ubuntu.com/manpages/jammy/en/man7/capabilities.7.html Manpage] sowie [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#Capability%20rules Capability rules]
* Jede Zeile endet mit einem Komma - mit Ausnahme von Kommentaren, <tt><nowiki>#include</nowiki></tt>-Anweisungen, mit denen sogenannten <tt>abstractions</tt> eingebunden werden, und Kind-Profile (näheres dazu weiter unten)
* <tt>/PFAD/ZU/DATEI OPTION</tt> setzt die Berechtigungen für das jeweilige Verzeichnis bzw. die jeweilige Hilfsanwendung. Dabei ist die Verwendung des Jokers <tt><nowiki>*</nowiki></tt> erlaubt, zwei <tt><nowiki>**</nowiki></tt> bedeuten "inkl. aller Unterverzeichnisse" (extended globbing). Beispiele dazu:
* Mit dem Befehl <tt>capability XYZ</tt> werden grundlegende Eigenschaften/Merkmale definiert
* Siehe dazu die entsprechende [https://manpages.ubuntu.com/manpages/jammy/en/man7/capabilities.7.html Manpage] sowie [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#Capability%20rules Capability rules]
* <tt>/PFAD/ZU/DATEI OPTION</tt> setzt die Berechtigungen für das jeweilige Verzeichnis bzw.&nbsp;die jeweilige Hilfsanwendung
* Dabei ist die Verwendung des Jokers <tt><nowiki>*</nowiki></tt> erlaubt, zwei <tt><nowiki>**</nowiki></tt> bedeuten "inkl.&nbsp;aller Unterverzeichnisse" (extended globbing)
* Beispiele dazu


 
{| class="wikitable sortable options"  
 
|-  
 
|| <tt>/ordner/datei</tt>
{| style="border-spacing:0;width:15.75cm;"
|| gilt für diese spezifische Datei '''datei''' in Verzeichnis '''/ordner'''
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>/ordner/datei</tt>  
|| <tt>/ordner/*</tt>
|| gilt für diese spezifische Datei '''datei''' in Verzeichnis '''/ordner'''  
|| gilt für alle ''Dateien'' im Verzeichnis '''/ordner'''
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>/ordner/*</tt>  
|| <tt>/ordner/a*</tt>
|| gilt für alle ''Dateien'' im Verzeichnis '''/ordner'''  
|| gilt für alle Dateien im Verzeichnis, die mit "a" beginnen
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>/ordner/a*</tt>  
|| <tt>/ordner/*.png</tt>
|| gilt für alle Dateien im Verzeichnis, die mit "a" beginnen  
|| gilt für alle Dateien mit der Endung '''.png'''
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>/ordner/*.png</tt>  
|| <tt>/ordner/[^.]*</tt>
|| gilt für alle Dateien mit der Endung '''.png'''  
|| gilt für alle Dateien in '''/ordner''' mit Ausnahme derjenigen, die mit einem "." beginnen
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>/ordner/[^.]*</tt>  
|| <tt>/ordner/</tt>
|| gilt für alle Dateien in '''/ordner''' mit Ausnahme derjenigen, die mit einem "." beginnen  
|| gilt für das spezifische Verzeichnis '''/ordner'''
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>/ordner/</tt>  
|| <tt>/ordner/*/</tt>
|| gilt für das spezifische Verzeichnis '''/ordner'''  
|| gilt für jedes ''Verzeichnis'' in '''/ordner'''
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>/ordner/*/</tt>  
|| <tt>/ordner/**</tt>
|| gilt für jedes ''Verzeichnis'' in '''/ordner'''  
|| gilt für jede ''Datei'' oder jedes ''Verzeichnis'' in oder unterhalb von '''/ordner'''
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>/ordner/**</tt>  
|| <tt>/ordner/**/</tt>
|| gilt für jede ''Datei'' oder jedes ''Verzeichnis'' in oder unterhalb von '''/ordner'''  
|| gilt für jedes ''Verzeichnis'' in oder unterhalb von '''/ordner'''
|- style="border:none;padding:0.049cm;"
|| <tt>/ordner/**/</tt>  
|| gilt für jedes ''Verzeichnis'' in oder unterhalb von '''/ordner'''  
|-
|-
|}
|}
Weitere Hinweise und Details finden sich unter [https://gitlab.com/apparmor/apparmor/wikis/QuickProfileLanguage#File_Globbing File Globbing].
Weitere Hinweise und Details finden sich unter [https://gitlab.com/apparmor/apparmor/wikis/QuickProfileLanguage#File_Globbing File Globbing]


==== Berechtigungen ====
==== Berechtigungen ====
 
Grundsätzlich gilt: Eine Anwendung mit AppArmor-Profil darf nur, was im Profil durch entsprechende Regeln explizit erlaubt wird
Grundsätzlich gilt: Eine Anwendung mit AppArmor-Profil darf nur, was im Profil durch entsprechende Regeln explizit erlaubt wird. Wenn z.B. in einem Profil keine Lese- oder Schreib-Regel für das Home-Verzeichnis existiert, wird jeglicher Zugriff der betreffenden Anwendung auf dieses Verzeichnis blockiert.
* Wenn z.&nbsp;B.&nbsp;in einem Profil keine Lese- oder Schreib-Regel für das Home-Verzeichnis existiert, wird jeglicher Zugriff der betreffenden Anwendung auf dieses Verzeichnis blockiert


===== Attribute =====
===== Attribute =====
Darüber hinaus gibt es drei zusätzliche Attribute


Darüber hinaus gibt es drei zusätzliche Attribute:
{| class="wikitable sortable options"  
 
|-  
 
|| Attribut
{| style="border-spacing:0;width:17cm;"
|| Beschreibung
|- style="border:none;padding:0.049cm;"
|-  
|| Attribut  
|| <tt>audit</tt>
|| Beschreibung  
|| alle Anwendungen der Regel werden grundsätzlich geloggt
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>audit</tt>  
|| <tt>owner</tt>
|| alle Anwendungen der Regel werden grundsätzlich geloggt  
|| Berechtigung wird nur erteilt, wenn die Datei bzw.&nbsp;das Verzeichnis im Besitz des Benutzers ist
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>owner</tt>  
|| <tt>deny</tt>
|| Berechtigung wird nur erteilt, wenn die Datei bzw. das Verzeichnis im Besitz des Benutzers ist  
|| der Zugriff auf die Datei bzw.&nbsp;das Verzeichnis wird explizit verboten
|- style="border:none;padding:0.049cm;"
|| <tt>deny</tt>  
|| der Zugriff auf die Datei bzw. das Verzeichnis wird explizit verboten  
|-
|-
|}
|}
<tt>deny</tt> ist sinnvoll, wenn etwa für das Home-Verzeichnis Lese- und Schreibberechtigung durch eine entsprechende Regel erteilt wurde, aber besonders sicherheitskritische Verzeichnisse/Dateien geschützt werden sollen. Beispiel:
<tt>deny</tt> ist sinnvoll, wenn etwa für das Home-Verzeichnis Lese- und Schreibberechtigung durch eine entsprechende Regel erteilt wurde, aber besonders sicherheitskritische Verzeichnisse/Dateien geschützt werden sollen
 
Beispiel
 
{| class="wikitable sortable options"  
{| style="border-spacing:0;width:9.793cm;"
|-  
|- style="border:none;padding:0.049cm;"
|| 1
|| 1
|| audit deny @{HOME}/.config/autostart/** wl,
|| audit deny @{HOME}/.config/autostart/** wl
 


|-
|-
|}
|}
===== Netzwerkberechtigungen =====
===== Netzwerkberechtigungen =====
AppArmor kann einer Anwendung den Netzwerkzugriff allgemein oder auch sehr spezifisch erlauben oder verbieten
* Typische Beispiele


AppArmor kann einer Anwendung den Netzwerkzugriff allgemein oder auch sehr spezifisch erlauben oder verbieten. Typische Beispiele:
{| class="wikitable sortable options"  
 
|-  
 
{| style="border-spacing:0;width:15.51cm;"
|- style="border:none;padding:0.049cm;"
|| 1
|| 1
2
2
Zeile 361: Zeile 370:
5
5
6
6
|| network,                     <nowiki># Netzwerkzugriff wird generell erlaubt</nowiki>
|| network, <nowiki># Netzwerkzugriff wird generell erlaubt</nowiki>
deny network,               <nowiki># Netzwerkzugriff wird generell verboten </nowiki>
deny network, <nowiki># Netzwerkzugriff wird generell verboten </nowiki>
network tcp,                 <nowiki># TCP-Verbindungen werden erlaubt</nowiki>
network tcp, <nowiki># TCP-Verbindungen werden erlaubt</nowiki>
network udp,                 <nowiki># UDP-Verbindungen werden erlaubt</nowiki>
network udp, <nowiki># UDP-Verbindungen werden erlaubt</nowiki>
network inet stream,         <nowiki># IPv4 TCP-Verbindungen werden erlaubt</nowiki>
network inet stream, <nowiki># IPv4 TCP-Verbindungen werden erlaubt</nowiki>
network inet6 dgram,         <nowiki># IPv6 UDP-Verbindungen werden erlaubt</nowiki>
network inet6 dgram, <nowiki># IPv6 UDP-Verbindungen werden erlaubt</nowiki>
|-
|-
|}
|}
Weitere Details unter [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#Network_rules Network rules].
Weitere Details unter [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#Network_rules Network rules]


===== Dateizugriffsberechtigungen =====
===== Dateizugriffsberechtigungen =====
In AppArmor gibt es folgende Berechtigungen


In AppArmor gibt es folgende Berechtigungen:
{| class="wikitable sortable options"  
 
|-  
 
| colspan="2" | Dateizugriffsberechtigungen in AppArmor-Profilen
{| style="border-spacing:0;width:9.126cm;"
|-  
|- style="border:none;padding:0.049cm;"
|| Option
| colspan="2" | Dateizugriffsberechtigungen in AppArmor-Profilen  
|| Beschreibung
|- style="border:none;padding:0.049cm;"
|-  
|| Option  
|| <tt>r</tt>
|| Beschreibung  
|| Lesezugriff ist erlaubt
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>r</tt>  
|| <tt>w</tt>
|| Lesezugriff ist erlaubt  
|| Schreibzugriff ist erlaubt
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>w</tt>  
|| <tt>a</tt>
|| Schreibzugriff ist erlaubt  
|| Dateiinhalte können hinzugefügt werden
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>a</tt>  
|| <tt>l</tt>
|| Dateiinhalte können hinzugefügt werden  
|| Es ist erlaubt, einen Link zu erstellen
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>l</tt>  
|| <tt>k</tt>
|| Es ist erlaubt, einen Link zu erstellen  
|| Datei kann gesperrt werden (lockfile)
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>k</tt>  
|| <tt>m</tt>
|| Datei kann gesperrt werden (lockfile)  
|| Es darf der Aufruf von [https://manpages.ubuntu.com/manpages/jammy/en/man2/mmap.2.html mmap] erfolgen
|- style="border:none;padding:0.049cm;"
|-  
|| <tt>m</tt>  
|| <tt>x</tt>
|| Es darf der Aufruf von [https://manpages.ubuntu.com/manpages/jammy/en/man2/mmap.2.html mmap] erfolgen  
|| Hilfsanwendung darf ausgeführt werden
|- style="border:none;padding:0.049cm;"
|| <tt>x</tt>  
|| Hilfsanwendung darf ausgeführt werden  
|-
|-
|}
|}
Die Option <tt>x</tt> kann nur in den folgenden Kombinationen verwendet werden:
Die Option <tt>x</tt> kann nur in den folgenden Kombinationen verwendet werden


 
{| class="wikitable sortable options"  
{| style="border-spacing:0;width:17cm;"
|-  
|- style="border:none;padding:0.049cm;"
| colspan="3" | Ausführungsberechtigungen in AppArmor-Profilen
| colspan="3" | Ausführungsberechtigungen in AppArmor-Profilen  
|-  
|- style="border:none;padding:0.049cm;"
|| Option
|| Option  
|| englisch für
|| englisch für  
|| Beschreibung
|| Beschreibung  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>ux</tt>
|| <tt>ux</tt>  
|| unconfined execute mode
|| unconfined execute mode  
|| Hilfsanwendung ohne AppArmor-Überwachung ausführen
|| Hilfsanwendung ohne AppArmor-Überwachung ausführen  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>Ux</tt>
|| <tt>Ux</tt>  
|| unconfined execute – scrub the environment
|| unconfined execute – scrub the environment  
|| wie <tt>ux</tt> mit Bereinigen der Umgebung
|| wie <tt>ux</tt> mit Bereinigen der Umgebung  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>ix</tt>
|| <tt>ix</tt>  
|| inherit execute mode
|| inherit execute mode  
|| Hilfsanwendung erbt die Berechtigungen der Hauptanwendung
|| Hilfsanwendung erbt die Berechtigungen der Hauptanwendung  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>px</tt>
|| <tt>px</tt>  
|| discrete Profile execute mode
|| discrete Profile execute mode  
|| setzt die Definition eines eigenen Profils für die Hilfsanwendung voraus
|| setzt die Definition eines eigenen Profils für die Hilfsanwendung voraus  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>Px</tt>
|| <tt>Px</tt>  
|| Discrete Profile execute mode – scrub the environment
|| Discrete Profile execute mode – scrub the environment  
|| wie <tt>px</tt> mit Bereinigen der Umgebung
|| wie <tt>px</tt> mit Bereinigen der Umgebung  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>cx</tt>
|| <tt>cx</tt>  
|| Execute and transition to a child profile
|| Execute and transition to a child profile  
|| Ausführen der Hilfsanwendung über ein Kind-Profil innerhalb des Profils der Hauptanwendung
|| Ausführen der Hilfsanwendung über ein Kind-Profil innerhalb des Profils der Hauptanwendung  
|-  
|- style="border:none;padding:0.049cm;"
|| <tt>Cx</tt>
|| <tt>Cx</tt>  
|| Execute and transition to a child profile – scrub the environment
|| Execute and transition to a child profile – scrub the environment  
|| wie <tt>cx</tt> mit Bereinigen der Umgebung
|| wie <tt>cx</tt> mit Bereinigen der Umgebung  
|-
|-
|}
|}
Für die Ausführungsberechtigungen sind folgende Hinweise zu beachten:* Die Benutzung von <tt>ux</tt> wird nicht empfohlen, sofern nicht unbedingt notwendig. Eine mit <tt>ux</tt> ausgeführte Hilfsanwendung wird von AppArmor nicht kontrolliert bzw. "eingesperrt" und kann somit u.U. eine erhebliche Lücke in ein ansonsten sicheres Profil der Hauptanwendung reißen.
Für die Ausführungsberechtigungen sind folgende Hinweise zu beachten:* Die Benutzung von <tt>ux</tt> wird nicht empfohlen, sofern nicht unbedingt notwendig
* Auch die Benutzung von <tt>Ux</tt> wird nicht empfohlen. Zwar wird hier ein sog. [https://stackoverflow.com/questions/5835664/how-does-apparmor-do-environment-scrubbing "environment scrubbing"] durchgeführt (d.h. ein Bereinigen der Umgebung, indem [https://wiki.ubuntuusers.de/Umgebungsvariable/ Umgebungsvariable] wie <tt>LD_PRELOAD</tt> entfernt werden). Ansonsten gilt jedoch dieselbe Problematik wie unter <tt>ux</tt>.
* Eine mit <tt>ux</tt> ausgeführte Hilfsanwendung wird von AppArmor nicht kontrolliert bzw. "eingesperrt" und kann somit u.&nbsp;U.&nbsp;eine erhebliche Lücke in ein ansonsten sicheres Profil der Hauptanwendung reißen
* Erheblich sicherer ist die Verwendung von <tt>ix</tt>. Eine damit ausgeführte Hilfsanwendung erbt die Berechtigungen der Hauptanwendung, darf also nicht mehr, aber auch nicht weniger als diese. Dies kann problematisch sein, wenn die Hilfsanwendung mehr Rechte benötigt als die Hauptanwendung oder wenn die Rechte der Hilfsanwendung gezielt beschränkt werden sollen.
* Auch die Benutzung von <tt>Ux</tt> wird nicht empfohlen
* Erheblich flexibler ist diesbezüglich die Verwendung von <tt>px</tt> (bzw. <tt>Px</tt>). Voraussetzung ist, dass für die Hilfsanwendung ein eigenes AppArmor-Profil definiert ist, in dem die Berechtigungen deutlich von denen der jeweiligen Hauptanwendung abweichen können, und auf das auch andere Hauptanwendungen zugreifen können.
* Zwar wird hier ein sog. [https://stackoverflow.com/questions/5835664/how-does-apparmor-do-environment-scrubbing "environment scrubbing"] durchgeführt (d.&nbsp;h.&nbsp;ein Bereinigen der Umgebung, indem [https://wiki.ubuntuusers.de/Umgebungsvariable/ Umgebungsvariable] wie <tt>LD_PRELOAD</tt> entfernt werden)
* Noch flexibler ist die Verwendung von <tt>cx</tt> (bzw. <tt>Cx</tt>). Hier wird für die Hilfsanwendung ein lokales Profil innerhalb des Profils der Hauptanwendung angelegt. Der Vorteil gegenüber <tt>px</tt> ist, dass dadurch unterschiedliche Berechtigungen für die Hilfsanwendung festgelegt werden können, je nachdem, durch welche Hauptanwendung sie aufgerufen wird. Beispiel: Erstellt man z.B. ein AppArmor-Profil für den Browser Google Chrome, werden u.a. als Hilfsanwendungen [https://wiki.ubuntuusers.de/xdg-open/ xdg-open] und '''xdg-settings''' benötigt, die über entsprechende Kind-Profile eingebunden werden können. Die Syntax für das Profil '''/etc/apparmor.d/opt.google.chrome.chrome''' sieht dann auszugsweise folgendermaßen aus: <br/>vergrößern
* Ansonsten gilt jedoch dieselbe Problematik wie unter <tt>ux</tt>
* Erheblich sicherer ist die Verwendung von <tt>ix</tt>
* Eine damit ausgeführte Hilfsanwendung erbt die Berechtigungen der Hauptanwendung, darf also nicht mehr, aber auch nicht weniger als diese
* Dies kann problematisch sein, wenn die Hilfsanwendung mehr Rechte benötigt als die Hauptanwendung oder wenn die Rechte der Hilfsanwendung gezielt beschränkt werden sollen
* Erheblich flexibler ist diesbezüglich die Verwendung von <tt>px</tt> (bzw. <tt>Px</tt>)
* Voraussetzung ist, dass für die Hilfsanwendung ein eigenes AppArmor-Profil definiert ist, in dem die Berechtigungen deutlich von denen der jeweiligen Hauptanwendung abweichen können, und auf das auch andere Hauptanwendungen zugreifen können
* Noch flexibler ist die Verwendung von <tt>cx</tt> (bzw. <tt>Cx</tt>)
* Hier wird für die Hilfsanwendung ein lokales Profil innerhalb des Profils der Hauptanwendung angelegt
* Der Vorteil gegenüber <tt>px</tt> ist, dass dadurch unterschiedliche Berechtigungen für die Hilfsanwendung festgelegt werden können, je nachdem, durch welche Hauptanwendung sie aufgerufen wird
* Beispiel: Erstellt man z.&nbsp;B.&nbsp;ein AppArmor-Profil für den Browser Google Chrome, werden u.&nbsp;a.&nbsp;als Hilfsanwendungen [https://wiki.ubuntuusers.de/xdg-open/ xdg-open] und '''xdg-settings''' benötigt, die über entsprechende Kind-Profile eingebunden werden können
* Die Syntax für das Profil '''/etc/apparmor.d/opt.google.chrome.chrome''' sieht dann auszugsweise folgendermaßen aus: <br/>vergrößern


 
{| class="wikitable sortable options"  
 
|-  
 
|| 1
{| style="border-spacing:0;width:10.005cm;"
|- style="border:none;padding:0.049cm;"
|| 1
  2
  2
  3
  3
Zeile 496: Zeile 509:
/opt/google/chrome/chrome {
/opt/google/chrome/chrome {
[...]
[...]
/opt/google/chrome/xdg-settings Cx,
/opt/google/chrome/xdg-settings Cx
[...]
[...]
/usr/bin/xdg-open Cx,
/usr/bin/xdg-open Cx
/usr/bin/xdg-settings Cx,
/usr/bin/xdg-settings Cx


[...]
[...]


  profile /opt/google/chrome/xdg-settings {
profile /opt/google/chrome/xdg-settings {


    /bin/dash r,
/bin/dash r
    /bin/grep rix,
/bin/grep rix
    /bin/readlink rix,
/bin/readlink rix
    [...]
[...]
  }
}


  profile /usr/bin/xdg-open {
profile /usr/bin/xdg-open {
    <nowiki>#include <abstractions/base></nowiki>
<nowiki>#include <abstractions/base></nowiki>


    /bin/dash r,
/bin/dash r
    /etc/X11/cursors/oxy-white.theme r,
/etc/X11/cursors/oxy-white.theme r
    [...]
[...]
  }
}


  profile /usr/bin/xdg-settings {
profile /usr/bin/xdg-settings {


    /bin/cat rix,
/bin/cat rix
    /bin/dash r,
/bin/dash r
    [...]
[...]
  }
}
}
}
|-
|-
|}
|}
* Als weitere Variante mit <tt>cx</tt> und <tt>Cx</tt> ist eine sog. "named profile transition" möglich. Hier wird ein Kind-Profil namentlich explizit definiert. Sollen in dem obigen Beispiel keine separaten Kind-Profile für '''/opt/google/chrome/xdg-settings''' und '''/usr/bin/xdg-settings''' erstellt werden, könnte etwa ein gemeinsames Kind-Profil namens ''gemeinsame_xdg_settings'' definiert werden, auf das die Hilfsanwendungen mit einem Pfeilsymbol verweisen. Die Syntax ändert sich dann in:<br/>vergrößern
* Als weitere Variante mit <tt>cx</tt> und <tt>Cx</tt> ist eine sog. "named profile transition" möglich
* Hier wird ein Kind-Profil namentlich explizit definiert
* Sollen in dem obigen Beispiel keine separaten Kind-Profile für '''/opt/google/chrome/xdg-settings''' und '''/usr/bin/xdg-settings''' erstellt werden, könnte etwa ein gemeinsames Kind-Profil namens ''gemeinsame_xdg_settings'' definiert werden, auf das die Hilfsanwendungen mit einem Pfeilsymbol verweisen
* Die Syntax ändert sich dann in:<br/>vergrößern


 
{| class="wikitable sortable options"  
 
|-  
 
|| 1
{| style="border-spacing:0;width:14.026cm;"
|- style="border:none;padding:0.049cm;"
|| 1
  2
  2
  3
  3
Zeile 557: Zeile 570:
/opt/google/chrome/chrome {
/opt/google/chrome/chrome {
[...]
[...]
/opt/google/chrome/xdg-settings Cx -> gemeinsame_xdg_settings,
/opt/google/chrome/xdg-settings Cx -> gemeinsame_xdg_settings
[...]
[...]
/usr/bin/xdg-settings Cx -> gemeinsame_xdg_settings,
/usr/bin/xdg-settings Cx -> gemeinsame_xdg_settings


[...]
[...]


  profile gemeinsame_xdg_settings {
profile gemeinsame_xdg_settings {


    /bin/dash r,
/bin/dash r
    /bin/grep rix,
/bin/grep rix
    /bin/readlink rix,
/bin/readlink rix
    [...]
[...]
  }
}
}
}
|-
|-
|}
|}
Ein weiteres interessantes Beispiel einer "named profile transition" enthält die abstraction '''/etc/apparmor.d/abstractions/ubuntu-browsers.d/java'''.
Ein weiteres interessantes Beispiel einer "named profile transition" enthält die abstraction '''/etc/apparmor.d/abstractions/ubuntu-browsers.d/java'''


===== Abstractions =====
===== Abstractions =====
 
Im Verzeichnis '''/etc/apparmor.d/abstractions''' befinden sich eine Vielzahl von vorgefertigten Regelsätzen, den sog. "abstractions"
Im Verzeichnis '''/etc/apparmor.d/abstractions''' befinden sich eine Vielzahl von vorgefertigten Regelsätzen, den sog. "abstractions". Sie enthalten Regeln, die typischerweise bei der Erstellung eines AppArmor-Profils von vielen Anwendungen benötigt werden. Durch Einbinden über den "<tt><nowiki>#include</nowiki></tt>" - Befehl kann die Profilerstellung deutlich vereinfacht werden. Die jeweiligen abstractions werden - wenn benötigt - bei der Regelerstellung bzw. beim Optimierung des Profils mit '''aa-logprof''' angeboten. Folgende Hinweise sollten dabei beachtet werden:* In vielen abstractions sind andere abstractions über <tt><nowiki>#include</nowiki></tt> eingebunden, und in diese wiederum oft andere abstractions. Durch diese mehrstufige Verschachtelung ist es - insbesondere bei der Verwendung mehrerer abstractions - häufig sehr schwierig, die effektiven Berechtigungen zu durchschauen, die man sich dadurch eingehandelt hat. Es besteht daher die Gefahr, dass auf diese Weise einer Anwendung mehr Rechte als nötig oder beabsichtigt erteilt werden. Das ist ein potentielles Sicherheitsrisiko.
* Sie enthalten Regeln, die typischerweise bei der Erstellung eines AppArmor-Profils von vielen Anwendungen benötigt werden
* Hinzu kommt, dass es bei der Verwendung mehrerer abstractions mitunter zu konkurrierenden Berechtigungen kommen kann, was beim Laden des Profils mit einer entsprechenden Fehlermeldung (z.B. "... conflicting permissions...") quittiert wird.
* Durch Einbinden über den "<tt><nowiki>#include</nowiki></tt>" - Befehl kann die Profilerstellung deutlich vereinfacht werden
* Aus diesen Gründen ist es ratsam, sich bei der Verwendung von abstractions in Zurückhaltung zu üben. Wird von aa-logprof eine spezifische Regel und als Alternative eine oder mehrere abstractions angeboten, sollte man die Regel bevorzugen, auch wenn dies die Profilerstellung etwas mühsamer macht.
* Die jeweiligen abstractions werden - wenn benötigt - bei der Regelerstellung bzw. &nbsp;Folgende Hinweise sollten dabei beachtet werden:* In vielen abstractions sind andere abstractions über <tt><nowiki>#include</nowiki></tt> eingebunden, und in diese wiederum oft andere abstractions
* Nichtsdestotrotz sind eine Reihe von abstractions sehr sinnvoll. Da den meisten Anwendungen Lese- und Schreibzugriff auf das Homeverzeichnis gewährt werden muss, ist es z.B. sinnvoll, zur Absicherung sicherheitskritischer Dateien oder Verzeichnisse das Profil mit "<tt><nowiki>#include <abstractions/private-files></nowiki></tt>" (oder u.U. in einer erweiterten Form mit "<tt><nowiki>#include <abstractions/private-files-strict></nowiki></tt>") zu ergänzen.
* Durch diese mehrstufige Verschachtelung ist es - insbesondere bei der Verwendung mehrerer abstractions - häufig sehr schwierig, die effektiven Berechtigungen zu durchschauen, die man sich dadurch eingehandelt hat
 
* Es besteht daher die Gefahr, dass auf diese Weise einer Anwendung mehr Rechte als nötig oder beabsichtigt erteilt werden
 
* Das ist ein potentielles Sicherheitsrisiko
* Hinzu kommt, dass es bei der Verwendung mehrerer abstractions mitunter zu konkurrierenden Berechtigungen kommen kann, was beim Laden des Profils mit einer entsprechenden Fehlermeldung (z.B. "...&nbsp;conflicting permissions...") quittiert wird
* Aus diesen Gründen ist es ratsam, sich bei der Verwendung von abstractions in Zurückhaltung zu üben
* Wird von aa-logprof eine spezifische Regel und als Alternative eine oder mehrere abstractions angeboten, sollte man die Regel bevorzugen, auch wenn dies die Profilerstellung etwas mühsamer macht
* Nichtsdestotrotz sind eine Reihe von abstractions sehr sinnvoll
* Da den meisten Anwendungen Lese- und Schreibzugriff auf das Homeverzeichnis gewährt werden muss, ist es z.&nbsp;B.&nbsp;sinnvoll, zur Absicherung sicherheitskritischer Dateien oder Verzeichnisse das Profil mit "<tt><nowiki>#include <abstractions/private-files></nowiki></tt>" (oder u.&nbsp;U.&nbsp;in einer erweiterten Form mit "<tt><nowiki>#include <abstractions/private-files-strict></nowiki></tt>") zu ergänzen


==== Generelle Hinweise zur Profilbearbeitung ====
==== Generelle Hinweise zur Profilbearbeitung ====
Das manuelle Editieren eines AppArmor-Profils sollte die Ausnahme darstellen
* In der Praxis erfolgt das Hinzufügen von Regeln zu einem Profil mit Hilfe von <tt>aa-logprof</tt>
* Eine manuelle Nachbearbeitung beschränkt sich daher im wesentlichen auf drei Fälle:# Es sollte überprüft werden, ob man nicht mit <tt>aa-logprof</tt> versehentlich die gefährlichen Ausführungsmodi <tt>ux</tt> und <tt>Ux</tt> gewählt hat
# Es macht bei umfangreichen Profilen u.U
* Sinn, zum Zwecke einer besseren Übersichtlichkeit die Regeln zu gruppieren bzw.&nbsp;anders zu sortieren oder auch ggfs.&nbsp;einzelne Regeln mit einer zusätzlichen Kommentarzeile (beginnend mit einem <tt><nowiki>#</nowiki></tt>) zu erläutern
# Es ist zu überprüfen, ob möglicherweise einzelne Regeln nachträglich modifiziert werden sollten, z.&nbsp;B.&nbsp;indem eine generelle Lese- und Schreibberechtigung für das Homeverzeichnis durch "<tt>deny</tt>"-Regeln für einzelne Unterverzeichnisse/Dateien eingeschränkt wird


Das manuelle Editieren eines AppArmor-Profils sollte die Ausnahme darstellen. In der Praxis erfolgt das Hinzufügen von Regeln zu einem Profil mit Hilfe von <tt>aa-logprof</tt>. Eine manuelle Nachbearbeitung beschränkt sich daher im wesentlichen auf drei Fälle:# Es sollte überprüft werden, ob man nicht mit <tt>aa-logprof</tt> versehentlich die gefährlichen Ausführungsmodi <tt>ux</tt> und <tt>Ux</tt> gewählt hat.
Generell nicht manuell bearbeitet werden sollten die mit Ubuntu standardmäßig mitgelieferten und mit '''apparmor-profiles''' zusätzlich installierten Profile in '''/etc/apparmor.d''', da alle Modifizierungen (auch über aa-logprof) bei einem Update dieser Profile über die Paketverwaltung verloren gehen
# Es macht bei umfangreichen Profilen u.U. Sinn, zum Zwecke einer besseren Übersichtlichkeit die Regeln zu gruppieren bzw. anders zu sortieren oder auch ggfs. einzelne Regeln mit einer zusätzlichen Kommentarzeile (beginnend mit einem <tt><nowiki>#</nowiki></tt>) zu erläutern.
* Für diesen Zweck stehen stattdessen in '''/etc/apparmor.d/local''' jeweils leere "Unterprofile" zur Verfügung, die mit "<tt><nowiki>#include</nowiki></tt>" in das zugehörige Profil eingebunden sind
# Es ist zu überprüfen, ob möglicherweise einzelne Regeln nachträglich modifiziert werden sollten, z.B. indem eine generelle Lese- und Schreibberechtigung für das Homeverzeichnis durch "<tt>deny</tt>"-Regeln für einzelne Unterverzeichnisse/Dateien eingeschränkt wird.
* Alle hier manuell hinzugefügten Berechtigungen oder "<tt>deny</tt>"-Regeln bleiben bei einem Update des betreffenden Profils erhalten
* Diese Empfehlung gilt natürlich nicht für selbsterstellte Profile


=== Weitere Profile beziehen ===
Ubuntu bringt bereits für ein paar Programme Profile mit, wobei diese jedoch teilweise [https://wiki.ubuntuusers.de/AppArmor/#disable-und-force-complain deaktiviert] sein könnten
* Um nun weitere Profile zu beziehen kann man* Pakete mit weiteren Regeln installieren (siehe [https://wiki.ubuntuusers.de/AppArmor/#weitere-Regelsaetze Abschnitt Installation])
* fremde Profile übernehmen
* selber Profile selber erstellen


Es sollte aber bedacht werden, dass diese Regeln nicht blind übernommen werden sollen/können, sondern den individuellen Bedürfnissen angepasst werden müssen


Generell nicht manuell bearbeitet werden sollten die mit Ubuntu standardmäßig mitgelieferten und mit '''apparmor-profiles''' zusätzlich installierten Profile in '''/etc/apparmor.d''', da alle Modifizierungen (auch über aa-logprof) bei einem Update dieser Profile über die Paketverwaltung verloren gehen. Für diesen Zweck stehen stattdessen in '''/etc/apparmor.d/local''' jeweils leere "Unterprofile" zur Verfügung, die mit "<tt><nowiki>#include</nowiki></tt>" in das zugehörige Profil eingebunden sind. Alle hier manuell hinzugefügten Berechtigungen oder "<tt>deny</tt>"-Regeln bleiben bei einem Update des betreffenden Profils erhalten. Diese Empfehlung gilt natürlich nicht für selbsterstellte Profile.
Im Internet kursieren noch zahlreiche weitere Profile für AppArmor, doch es sollte immer überlegt werden, wie vertrauenswürdig die Quelle ist und wie kompetent im Erstellen von Profilen
 
* Außerdem sind diese Regeln meist nicht auf die eigenen Bedürfnisse angepasst, sondern müssen nachträglich feinjustiert werden
== Schutz durch AppArmor ==
* Auch hier gilt, dass keine Profile blind übernommen werden sollten
 
AppArmor wird automatisch geladen. Möchte man eine neue Regel laden, so muss man dies von Hand erledigen. Grundsätzlich sollte jedes Programm, das eine Angriffsfläche bietet, durch AppArmor geschützt werden. Eine Auflistung der nicht profilierten Online-Anwendungen erhält man durch ein AppArmor-Werkzeug, das man im Terminal[https://wiki.ubuntuusers.de/AppArmor/#source-2 [2]] aufruft:
 
sudo aa-unconfined
 
Dieses ermittelt mittels [https://wiki.ubuntuusers.de/netstat/ netstat], welche Programme offene Netzwerk-Sockets (TCP/UDP) besitzen und ob sie ein AppArmor-Profil besitzen. Eine Ausgabe kann folgendermaßen aussehen:
 
5460 /usr/sbin/avahi-daemon not confined
5460 /usr/sbin/avahi-daemon not confined
5806 /sbin/dhclient3 not confined
18367 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (enforce)'
 
Man sieht hier drei Dienste, von denen nur einer geschützt wird (<tt>cups</tt>). Man besitzt also zwei ungeschützte Dienste: <tt>avahi-daemon</tt> und <tt>dhclient3</tt>. <tt>avahi-daemon</tt> wird wahrscheinlich doppelt gelistet, weil es sowohl auf TCP wie auch UDP lauscht. Diese beiden Dienste sind standardmäßig auf Ubuntu installiert. Sie sind nur aus dem lokalen Netzwerk, aber nicht aus dem Internet zu erreichen und gelten deshalb als sicher und nicht ausnutzbar. Mehr dazu kann man im Artikel [https://wiki.ubuntuusers.de/Offene_Ports/ Offene Ports] lesen. Paranoide werden wahrscheinlich trotzdem eine Regel dafür haben wollen, aber nach derzeitigem Kenntnisstand ist dies nicht erforderlich.
 
Sollte aa-unconfined weitere Dienste anzeigen, wie zum Beispiel [https://wiki.ubuntuusers.de/Privoxy/ Privoxy] oder [https://wiki.ubuntuusers.de/Tor/ Tor], sollte man diese von AppArmor schützen lassen. Als Anmerkung sei noch gesagt, dass aa-unconfined mit großer Wahrscheinlichkeit nur Dienste anzeigen wird und nicht normale Internetanwendungen (wie zum Beispiel einen Browser). Das bedeutet aber nicht, dass diese nicht geschützt werden sollten. Wie bereits gesagt ist die aa-unconfined-Liste nur ein kleiner Ausschnitt der schützenswerten Anwendungen und in keinem Fall vollständig.
 
Auch Windows-Anwendungen über [https://wiki.ubuntuusers.de/Wine/ Wine] lassen sich mit AppArmor kontrollieren. Ausführliche Hinweise dazu finden sich unter [https://gitlab.com/apparmor/apparmor/wikis/AppArmorWine AppArmorWine] und [https://forum.ubuntuusers.de/topic/apparmor-profil-fuer-wine/ im Forum].
 
== Woher weitere Profile beziehen? ==
 
Ubuntu bringt bereits für ein paar Programme Profile mit, wobei diese jedoch teilweise [https://wiki.ubuntuusers.de/AppArmor/#disable-und-force-complain deaktiviert] sein könnten. Um nun weitere Profile zu beziehen kann man* Pakete mit weiteren Regeln installieren (siehe [https://wiki.ubuntuusers.de/AppArmor/#weitere-Regelsaetze Abschnitt Installation])
* fremde Profile übernehmen
* selber Profile selber erstellen.


=== Fehlerbehebung ===
== Konfiguration ==
=== Verzeichnisstruktur ===
Globale und Systemeinstellungen sind in '''/etc/apparmor''' gespeichert
* Die Anwendungsprofile sowie mehrere vordefinierte Unterverzeichnisse befinden sich in '''/etc/apparmor.d/'''
* Eine ausführliche Darstellung der Verzeichnisstruktur nebst Inhalten ist unter [https://gitlab.com/apparmor/apparmor/wikis/Policy_Layout Policy Layout] verfügbar


=== ''disable'' und ''force-complain'' ===
Enthält '''/etc/apparmor.d/disable''' eine Verknüpfung zu einem Profil, so wird dieses nicht automatisch geladen. Ähnlich sorgen Verknüpfungen unter '''/etc/apparmor.d/force-complain''' dafür, dass Profile nur im <tt>complain</tt>-Modus geladen werden ([https://wiki.ubuntuusers.de/AppArmor/#AppArmor-Modi-flags siehe unten])


Es sollte aber bedacht werden, dass diese Regeln nicht blind übernommen werden sollen/können, sondern den individuellen Bedürfnissen angepasst werden müssen.
=== Dateien ===
<noinclude>


Im Internet kursieren noch zahlreiche weitere Profile für AppArmor, doch es sollte immer überlegt werden, wie vertrauenswürdig die Quelle ist und wie kompetent im Erstellen von Profilen. Außerdem sind diese Regeln meist nicht auf die eigenen Bedürfnisse angepasst, sondern müssen nachträglich feinjustiert werden. Auch hier gilt, dass keine Profile blind übernommen werden sollten.
== Anhang ==
=== Siehe auch ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
==== Dokumentation ====
===== Man-Pages =====
===== Info-Pages =====
==== Links ====
===== Projekt =====
# [https://gitlab.com/apparmor/apparmor/ AppArmor]
#* [https://gitlab.com/apparmor/apparmor/wikis/home/ Wiki]
#* [https://gitlab.com/apparmor/apparmor/wikis/Documentation Dokumentation]
#* [https://gitlab.com/apparmor/apparmor/wikis/FAQ FAQ]


== Links ==
===== Weblinks =====
# https://wiki.ubuntuusers.de/AppArmor/
# [https://wiki.ubuntu.com/AppArmor AppArmor-Übersichtsseite] Im englischen Ubuntu-Wiki
# [https://help.ubuntu.com/community/AppArmor Using AppArmor] Eintrag im englischen Wiki der Ubuntu-Community
# [https://wiki.kairaven.de/open/os/linux/apparmor AppArmor mit Ubuntu nutzen]- Einführung von Kai Raven


* [https://gitlab.com/apparmor/apparmor/wikis/home/ Homepage der AppArmor-Entwickler] mit ausführlicher
</noinclude>
** [https://gitlab.com/apparmor/apparmor/wikis/Documentation Dokumentation] und
[[Kategorie:AppArmor]]
** [https://gitlab.com/apparmor/apparmor/wikis/FAQ FAQ]
* [https://wiki.ubuntu.com/AppArmor AppArmor-Übersichtsseite]im englischen Ubuntu-Wiki, enthält Infos zu allen unterstützen Ubuntu-Versionen plus Server-Guides für die LTS-Versionen
* [https://help.ubuntu.com/community/AppArmor Using AppArmor]- Eintrag im englischen Wiki der Ubuntu-Community
* [https://wiki.kairaven.de/open/os/linux/apparmor AppArmor mit Ubuntu nutzen]- Einführung von Kai Raven

Aktuelle Version vom 8. September 2024, 11:33 Uhr

AppArmor - Sicherheitsframework für Linux

Beschreibung

Hilfreiche Vorkenntnisse
Beschreibung
Installation von Programmen
Ein Terminal öffnen
mit Root-Rechten arbeiten

Als Mandatory Access Control (MAC) System kontrolliert es Anwendungen einzeln

  • Für diese können in Profilen Zugriffsrechte festgelegt werden, die feiner als die allgemeinen Dateirechte sind
  • Neben den vordefinierten können eigene Profile aufgestellt werden
  • Für jedes Profil kann einer von drei Eingriffs-Modi gesetzt werden
Zweck

Zweck von AppArmor ist der Schutz von sicherheitskritischen Anwendungen, in erster Linie also Anwendungen/Prozesse mit Netzwerkzugriff, aber auch von z. B. Büroanwendungen, die durch das Laden verseuchter Dokumente u. U. das System kompromittieren könnten

Entstehung

AppArmor ist seit Kernel 2.6.36 offiziell integriert Ab Ubuntu 7.10 wird es beim Systemstart geladen

  • Das gilt auch für die zugehörigen Profile (Regelsätze)

Von 2005 bis 2007 wurde AppArmor maßgeblich von Novell entwickelt

  • Seit 2009 engagiert sich Canonical verstärkt für das Sicherheitsframework, wodurch dann auch die bereits erwähnte Aufnahme in den Linux-Kernel erreicht wurde
SELinux

AppArmor wurde als Alternative zum als schwer konfigurierbar geltenden SELinux konzipiert

  • Von den "großen" Linux-Distributionen verwendet neben Ubuntu noch openSUSE in der Standardinstallation das Framework

Schutz durch AppArmor

AppArmor wird automatisch geladen

  • Möchte man eine neue Regel laden, so muss man dies von Hand erledigen
  • Grundsätzlich sollte jedes Programm, das eine Angriffsfläche bietet, durch AppArmor geschützt werden
  • Eine Auflistung der nicht profilierten Online-Anwendungen erhält man durch ein AppArmor-Werkzeug, das man im Terminal[2] aufruft
sudo aa-unconfined

Dieses ermittelt mittels netstat, welche Programme offene Netzwerk-Sockets (TCP/UDP) besitzen und ob sie ein AppArmor-Profil besitzen

  • Eine Ausgabe kann folgendermaßen aussehen
5460 /usr/sbin/avahi-daemon not confined
5460 /usr/sbin/avahi-daemon not confined
5806 /sbin/dhclient3 not confined
18367 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (enforce)'

Man sieht hier drei Dienste, von denen nur einer geschützt wird (cups)

  • Man besitzt also zwei ungeschützte Dienste: avahi-daemon und dhclient3. avahi-daemon wird wahrscheinlich doppelt gelistet, weil es sowohl auf TCP wie auch UDP lauscht
  • Diese beiden Dienste sind standardmäßig auf Ubuntu installiert
  • Sie sind nur aus dem lokalen Netzwerk, aber nicht aus dem Internet zu erreichen und gelten deshalb als sicher und nicht ausnutzbar
  • Mehr dazu kann man im Artikel Offene Ports lesen
  • Paranoide werden wahrscheinlich trotzdem eine Regel dafür haben wollen, aber nach derzeitigem Kenntnisstand ist dies nicht erforderlich

Sollte aa-unconfined weitere Dienste anzeigen, wie zum Beispiel Privoxy oder Tor, sollte man diese von AppArmor schützen lassen

  • Als Anmerkung sei noch gesagt, dass aa-unconfined mit großer Wahrscheinlichkeit nur Dienste anzeigen wird und nicht normale Internetanwendungen (wie zum Beispiel einen Browser)
  • Das bedeutet aber nicht, dass diese nicht geschützt werden sollten
  • Wie bereits gesagt ist die aa-unconfined-Liste nur ein kleiner Ausschnitt der schützenswerten Anwendungen und in keinem Fall vollständig

Auch Windows-Anwendungen über Wine lassen sich mit AppArmor kontrollieren

Installation

Seit 2007 ist AppArmor mit Hilfswerkzeugen in der Standardinstallation von Ubuntu enthalten

  • Ansonsten kann es über die folgenden Pakete nachinstalliert werden [1]:* apparmor
sudo apt-get install apparmor

Oder mit apturl installieren, Link: [apt://apparmor apt://apparmor]

Hilfsprogramme

Die Hilfsprogramme zu AppArmor sind im Paket apparmor-utils, enthalten, das man manuell nachinstallieren muss

sudo apt-get install apparmor-utils

Wer DENIED Nachrichten in der Desktopumgebung erhalten möchte, muss zusätzlich das Paket* apparmor-notify (universe)

sudo apt-get install apparmor-notify

Weitere Regelsätze

AppArmor Profile für diverse Programme

# apt install apparmor-profiles apparmor-profiles-extra

Syntax

Optionen

Parameter

Umgebung

Rückgabewert

Anwendung

Hinweis
Alle Befehle zur Steuerung von AppArmor müssen mit Root-Rechten[3] aufgerufen werden!

AppArmor Utilities

Nach der Installation von apparmor-utils stehen folgende Kommandozeilen-Werkzeuge zur Verfügung

Utility Beschreibung
aa-enabled simple Abfrage, ob AppArmor aktiviert ist
aa-status Überblick über die geladenen AppArmor-Profile mit Angabe des Modus
aa-disable Ein AppArmor Profile deaktivieren
aa-teardown Alle AppArmor Profile entladen, d. h. aus dem Speichern entfernen, so dass keine Profile in der laufenden Sitzung mehr aktiv sind
aa-exec Eine Anwendung mit einem speziellen, anzugebenden AppArmor Profil starten
aa-unconfined Ausgabe der Prozesse mit Netzwerkzugriff ohne Profil
aa-audit Profil in den Audit-Modus versetzen
aa-complain Profil in den Complain-Modus versetzen
aa-enforce Profil in den Enforce-Modus versetzen
aa-autodep Erstellung eines Basis-Profils im Complain-Modus
aa-genprof Erstellung eines Basis-Profils mit interaktiver Ergänzung von Regeln und abschließender Versetzung des Profils in den Enforce-Modus
aa-logprof interaktive Ergänzung von Regeln anhand der Einträge in /var/log/syslog
aa-cleanprof automatisches Aufräumen eines Profils
aa-easyprof Einfaches Erstellen eines Profils
  • Mit aa-easyprof estellte Profile sind gegebenenfalls weniger restriktiv als mit aa-genprof oder aa-logprof erstellte Profile
aa-mergeprof AppArmor Profile zusammenführen
aa-decode Decodiert einen String in Hexadezimaldarstellung aus dem AppArmor Log in einen ASCII-String
aa-features-abi Extrahieren, Validieren und Ändern der AppArmor Feature ABI
aa-remove-unknown Unbekannte AppArmor Profile entfernen
aa-update-browser Apparmor Profile für Browser aktualisieren

Im Idealfall nutzt man AppArmor ohne es zu bemerken, da Regeln die entsprechenden Anwendungen schützen, aber nicht beeinträchtigen

  • Um zu überprüfen, ob AppArmor installiert und aktiviert ist, dient folgender Befehl im Terminal[2]
aa-enabled

Einen weiterführenden Überblick über den aktuellen Status von AppArmor erhält man mit folgendem Befehl

sudo aa-status

AppArmor Modi (flags)

AppArmor kennt drei Modi für jedes einzelne Profil

Modus Beschreibung
complain "Lernmodus": Aktionen, die gegen die Regeln verstoßen, werden nur geloggt und nicht verboten
  • Das Profil enthält die Kennzeichnung flags=(complain)
enforce "Zwangsmodus": Aktionen, die gegen die Regeln verstoßen, werden geloggt und verboten
  • Das Profil enthält die Kennzeichnung flags=(enforce)
audit "Prüfmodus": Alle Regelanwendungen und Regelverstöße werden geloggt
  • Das Profil enthält die Kennzeichnung flags=(audit)

Profile werden somit folgendermaßen geladen

sudo aa-complain PROFIL # für den "Complain"-Modus
sudo aa-enforce PROFIL # für den "Enforce"-Modus
sudo aa-audit PROFIL # für den "Audit"-Modus 

Möchte man alle Profile auf einmal aktivieren, so geschieht dies mit diesem Befehl

sudo aa-complain /etc/apparmor.d/* # für den "Complain"-Modus"
sudo aa-enforce /etc/apparmor.d/* # für den "Enforce"-Modus 

Das Logging erfolgt dabei sowohl in der Syslog /var/log/syslog als auch in erweiterter Form in der Kernel-Log /var/log/kern.log

  • Die /var/log/syslog ist dabei jedoch standardmäßig die ausschlaggebende, die auch von den AppArmor-Utils aa-logprof und aa-genprof benutzt wird

Möchte man sich von Hand anschauen, was AppArmor loggt, eignet sich tail durch Ausführung von

tail -F /var/log/syslog | grep "apparmor"

bzw

tail -F /var/log/kern.log | grep "apparmor"

[1]

Die Regelsätze befinden sich im Verzeichnis /etc/apparmor.d/

  • Die Regeln haben dabei die Struktur "pfad.zur.datei.dateiname"
  • Es ist also der Dateipfad enthalten, allerdings durch einen Punkt anstatt eines Slashs getrennt, der letzte Teil gibt den Namen des Programms/Dienstes/ an

Deaktivieren und Reaktivieren

Die Steuerung von AppArmor erfolgt als Dienst

  • Um diesen komplett zu stoppen, dient nicht wie bei anderen Diensten üblich der Befehl stop, dieser leert nur den Cache
  • Um AppArmor komplett zu stoppen, muss der folgende Befehl eingegeben werden
sudo aa-teardown

Der Neustart inkl. Laden alle aktiven Profile erfolgt mit

sudo systemctl reload apparmor.service

AppArmor Notify

Hat man das Paket aa-notify installiert, kann man die Benachrichtigung für DENIED-Messages aktivieren

  • Dazu dient folgender Befehl im Terminal[2]
aa-notify -p

Die Benachrichtigung kann man testen mit

sudo tcpdump -i enp0s31f6 -n -s 0 -w /foo

(enp0s31f6 ist das Tcpip-Interface, das man mit ifconfig findet)

Profile bearbeiten

Grundsätzlich ist es möglich, von Hand bestehende Profile zu bearbeiten oder neue zu erstellen

  • Es handelt es sich um normale Textdateien
Achtung

Wer das Editieren von Hand beabsichtigt, sollte genau wissen, was er tut! Es besteht eine erhöhte Gefahr, dass das Programm, welches durch das editierte Profil gesichert ist, entweder nicht mehr ausreichend gesichert ist oder auch, dass die Sicherung zu restriktiv ist, so dass das Programm nicht mehr richtig ablaufen kann!

Profilaufbau

Eine Profil-Datei ist dabei prinzipiell wie folgt aufgebaut

vergrößern

1
2
3
4
5
6
7
8
9

10 11 12 13

#include <tunables/global>

/pfad/zur/anwendung {

#include <abstractions/base>
[...]
capability sys_admin
[...]
# Kommentar
/usr/lib/gconv/** r
/proc/meminfo r
/bin/basename rmix
[...]

}

  • Mit dem Befehl #include können andere (grundlegende) Regelsätze eingebunden werden
  • In allen Profilen ist grundsätzlich die Datei /etc/apparmor.d/tunables/global mit #include eingebunden, die wiederum weitere Dateien aus diesem Verzeichnis enthält, in denen u.a. Variablen wie @{HOME} (für alle Homeverzeichnisse) oder @{PROC} (für das Verzeichnis /proc/) definiert sind
  • Nach der Angabe des Pfades zur Anwendung, für die das Profil erstellt ist, stehen sämtliche Regeln innerhalb von geschweiften Klammern
  • Jede Zeile endet mit einem Komma - mit Ausnahme von Kommentaren, #include-Anweisungen, mit denen sogenannten abstractions eingebunden werden, und Kind-Profile (näheres dazu weiter unten)
  • Mit dem Befehl capability XYZ werden grundlegende Eigenschaften/Merkmale definiert
  • Siehe dazu die entsprechende Manpage sowie Capability rules
  • /PFAD/ZU/DATEI OPTION setzt die Berechtigungen für das jeweilige Verzeichnis bzw. die jeweilige Hilfsanwendung
  • Dabei ist die Verwendung des Jokers * erlaubt, zwei ** bedeuten "inkl. aller Unterverzeichnisse" (extended globbing)
  • Beispiele dazu
/ordner/datei gilt für diese spezifische Datei datei in Verzeichnis /ordner
/ordner/* gilt für alle Dateien im Verzeichnis /ordner
/ordner/a* gilt für alle Dateien im Verzeichnis, die mit "a" beginnen
/ordner/*.png gilt für alle Dateien mit der Endung .png
/ordner/[^.]* gilt für alle Dateien in /ordner mit Ausnahme derjenigen, die mit einem "." beginnen
/ordner/ gilt für das spezifische Verzeichnis /ordner
/ordner/*/ gilt für jedes Verzeichnis 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

Weitere Hinweise und Details finden sich unter File Globbing

Berechtigungen

Grundsätzlich gilt: Eine Anwendung mit AppArmor-Profil darf nur, was im Profil durch entsprechende Regeln explizit erlaubt wird

  • Wenn z. B. in einem Profil keine Lese- oder Schreib-Regel für das Home-Verzeichnis existiert, wird jeglicher Zugriff der betreffenden Anwendung auf dieses Verzeichnis blockiert
Attribute

Darüber hinaus gibt es drei zusätzliche Attribute

Attribut Beschreibung
audit alle Anwendungen der Regel werden grundsätzlich geloggt
owner Berechtigung wird nur erteilt, wenn die Datei bzw. das Verzeichnis im Besitz des Benutzers ist
deny der Zugriff auf die Datei bzw. das Verzeichnis wird explizit verboten

deny ist sinnvoll, wenn etwa für das Home-Verzeichnis Lese- und Schreibberechtigung durch eine entsprechende Regel erteilt wurde, aber besonders sicherheitskritische Verzeichnisse/Dateien geschützt werden sollen Beispiel

1 audit deny @{HOME}/.config/autostart/** wl
Netzwerkberechtigungen

AppArmor kann einer Anwendung den Netzwerkzugriff allgemein oder auch sehr spezifisch erlauben oder verbieten

  • Typische Beispiele
1

2 3 4 5 6

network, # Netzwerkzugriff wird generell erlaubt

deny network, # Netzwerkzugriff wird generell 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

Weitere Details unter Network rules

Dateizugriffsberechtigungen

In AppArmor gibt es folgende Berechtigungen

Dateizugriffsberechtigungen in AppArmor-Profilen
Option Beschreibung
r Lesezugriff ist erlaubt
w Schreibzugriff ist erlaubt
a Dateiinhalte können hinzugefügt werden
l Es ist erlaubt, einen Link zu erstellen
k Datei kann gesperrt werden (lockfile)
m Es darf der Aufruf von mmap erfolgen
x Hilfsanwendung darf ausgeführt werden

Die Option x kann nur in den folgenden Kombinationen verwendet werden

Ausführungsberechtigungen in AppArmor-Profilen
Option englisch für Beschreibung
ux unconfined execute mode Hilfsanwendung ohne AppArmor-Überwachung ausführen
Ux unconfined execute – scrub the environment wie ux mit Bereinigen der Umgebung
ix inherit execute mode Hilfsanwendung erbt die Berechtigungen der Hauptanwendung
px discrete Profile execute mode setzt die Definition eines eigenen Profils für die Hilfsanwendung voraus
Px Discrete Profile execute mode – scrub the environment wie px mit Bereinigen der Umgebung
cx Execute and transition to a child profile Ausführen der Hilfsanwendung über ein Kind-Profil innerhalb des Profils der Hauptanwendung
Cx Execute and transition to a child profile – scrub the environment wie cx mit Bereinigen der Umgebung

Für die Ausführungsberechtigungen sind folgende Hinweise zu beachten:* Die Benutzung von ux wird nicht empfohlen, sofern nicht unbedingt notwendig

  • Eine mit ux ausgeführte Hilfsanwendung wird von AppArmor nicht kontrolliert bzw. "eingesperrt" und kann somit u. U. eine erhebliche Lücke in ein ansonsten sicheres Profil der Hauptanwendung reißen
  • Auch die Benutzung von Ux wird nicht empfohlen
  • Zwar wird hier ein sog. "environment scrubbing" durchgeführt (d. h. ein Bereinigen der Umgebung, indem Umgebungsvariable wie LD_PRELOAD entfernt werden)
  • Ansonsten gilt jedoch dieselbe Problematik wie unter ux
  • Erheblich sicherer ist die Verwendung von ix
  • Eine damit ausgeführte Hilfsanwendung erbt die Berechtigungen der Hauptanwendung, darf also nicht mehr, aber auch nicht weniger als diese
  • Dies kann problematisch sein, wenn die Hilfsanwendung mehr Rechte benötigt als die Hauptanwendung oder wenn die Rechte der Hilfsanwendung gezielt beschränkt werden sollen
  • Erheblich flexibler ist diesbezüglich die Verwendung von px (bzw. Px)
  • Voraussetzung ist, dass für die Hilfsanwendung ein eigenes AppArmor-Profil definiert ist, in dem die Berechtigungen deutlich von denen der jeweiligen Hauptanwendung abweichen können, und auf das auch andere Hauptanwendungen zugreifen können
  • Noch flexibler ist die Verwendung von cx (bzw. Cx)
  • Hier wird für die Hilfsanwendung ein lokales Profil innerhalb des Profils der Hauptanwendung angelegt
  • Der Vorteil gegenüber px ist, dass dadurch unterschiedliche Berechtigungen für die Hilfsanwendung festgelegt werden können, je nachdem, durch welche Hauptanwendung sie aufgerufen wird
  • Beispiel: Erstellt man z. B. ein AppArmor-Profil für den Browser Google Chrome, werden u. a. als Hilfsanwendungen xdg-open und xdg-settings benötigt, die über entsprechende Kind-Profile eingebunden werden können
  • Die Syntax für das Profil /etc/apparmor.d/opt.google.chrome.chrome sieht dann auszugsweise folgendermaßen aus:
    vergrößern
1
2
3
4
5
6
7
8
9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

# Last Modified: Sat Feb 16 18:28:03 2013

#include <tunables/global>

/opt/google/chrome/chrome { [...] /opt/google/chrome/xdg-settings Cx [...] /usr/bin/xdg-open Cx /usr/bin/xdg-settings Cx

[...]

profile /opt/google/chrome/xdg-settings {
/bin/dash r
/bin/grep rix
/bin/readlink rix
[...]
}
profile /usr/bin/xdg-open {
#include <abstractions/base>
/bin/dash r
/etc/X11/cursors/oxy-white.theme r
[...]
}
profile /usr/bin/xdg-settings {
/bin/cat rix
/bin/dash r
[...]
}

}

  • Als weitere Variante mit cx und Cx ist eine sog. "named profile transition" möglich
  • Hier wird ein Kind-Profil namentlich explizit definiert
  • Sollen in dem obigen Beispiel keine separaten Kind-Profile für /opt/google/chrome/xdg-settings und /usr/bin/xdg-settings erstellt werden, könnte etwa ein gemeinsames Kind-Profil namens gemeinsame_xdg_settings definiert werden, auf das die Hilfsanwendungen mit einem Pfeilsymbol verweisen
  • Die Syntax ändert sich dann in:
    vergrößern
1
2
3
4
5
6
7
8
9

10 11 12 13 14 15 16 17 18

#include <tunables/global>

/opt/google/chrome/chrome { [...] /opt/google/chrome/xdg-settings Cx -> gemeinsame_xdg_settings [...] /usr/bin/xdg-settings Cx -> gemeinsame_xdg_settings

[...]

profile gemeinsame_xdg_settings {
/bin/dash r
/bin/grep rix
/bin/readlink rix
[...]
}

}

Ein weiteres interessantes Beispiel einer "named profile transition" enthält die abstraction /etc/apparmor.d/abstractions/ubuntu-browsers.d/java

Abstractions

Im Verzeichnis /etc/apparmor.d/abstractions befinden sich eine Vielzahl von vorgefertigten Regelsätzen, den sog. "abstractions"

  • Sie enthalten Regeln, die typischerweise bei der Erstellung eines AppArmor-Profils von vielen Anwendungen benötigt werden
  • Durch Einbinden über den "#include" - Befehl kann die Profilerstellung deutlich vereinfacht werden
  • Die jeweiligen abstractions werden - wenn benötigt - bei der Regelerstellung bzw.  Folgende Hinweise sollten dabei beachtet werden:* In vielen abstractions sind andere abstractions über #include eingebunden, und in diese wiederum oft andere abstractions
  • Durch diese mehrstufige Verschachtelung ist es - insbesondere bei der Verwendung mehrerer abstractions - häufig sehr schwierig, die effektiven Berechtigungen zu durchschauen, die man sich dadurch eingehandelt hat
  • Es besteht daher die Gefahr, dass auf diese Weise einer Anwendung mehr Rechte als nötig oder beabsichtigt erteilt werden
  • Das ist ein potentielles Sicherheitsrisiko
  • Hinzu kommt, dass es bei der Verwendung mehrerer abstractions mitunter zu konkurrierenden Berechtigungen kommen kann, was beim Laden des Profils mit einer entsprechenden Fehlermeldung (z.B. "... conflicting permissions...") quittiert wird
  • Aus diesen Gründen ist es ratsam, sich bei der Verwendung von abstractions in Zurückhaltung zu üben
  • Wird von aa-logprof eine spezifische Regel und als Alternative eine oder mehrere abstractions angeboten, sollte man die Regel bevorzugen, auch wenn dies die Profilerstellung etwas mühsamer macht
  • Nichtsdestotrotz sind eine Reihe von abstractions sehr sinnvoll
  • Da den meisten Anwendungen Lese- und Schreibzugriff auf das Homeverzeichnis gewährt werden muss, ist es z. B. sinnvoll, zur Absicherung sicherheitskritischer Dateien oder Verzeichnisse das Profil mit "#include <abstractions/private-files>" (oder u. U. in einer erweiterten Form mit "#include <abstractions/private-files-strict>") zu ergänzen

Generelle Hinweise zur Profilbearbeitung

Das manuelle Editieren eines AppArmor-Profils sollte die Ausnahme darstellen

  • In der Praxis erfolgt das Hinzufügen von Regeln zu einem Profil mit Hilfe von aa-logprof
  • Eine manuelle Nachbearbeitung beschränkt sich daher im wesentlichen auf drei Fälle:# Es sollte überprüft werden, ob man nicht mit aa-logprof versehentlich die gefährlichen Ausführungsmodi ux und Ux gewählt hat
  1. Es macht bei umfangreichen Profilen u.U
  • Sinn, zum Zwecke einer besseren Übersichtlichkeit die Regeln zu gruppieren bzw. anders zu sortieren oder auch ggfs. einzelne Regeln mit einer zusätzlichen Kommentarzeile (beginnend mit einem #) zu erläutern
  1. Es ist zu überprüfen, ob möglicherweise einzelne Regeln nachträglich modifiziert werden sollten, z. B. indem eine generelle Lese- und Schreibberechtigung für das Homeverzeichnis durch "deny"-Regeln für einzelne Unterverzeichnisse/Dateien eingeschränkt wird

Generell nicht manuell bearbeitet werden sollten die mit Ubuntu standardmäßig mitgelieferten und mit apparmor-profiles zusätzlich installierten Profile in /etc/apparmor.d, da alle Modifizierungen (auch über aa-logprof) bei einem Update dieser Profile über die Paketverwaltung verloren gehen

  • Für diesen Zweck stehen stattdessen in /etc/apparmor.d/local jeweils leere "Unterprofile" zur Verfügung, die mit "#include" in das zugehörige Profil eingebunden sind
  • Alle hier manuell hinzugefügten Berechtigungen oder "deny"-Regeln bleiben bei einem Update des betreffenden Profils erhalten
  • Diese Empfehlung gilt natürlich nicht für selbsterstellte Profile

Weitere Profile beziehen

Ubuntu bringt bereits für ein paar Programme Profile mit, wobei diese jedoch teilweise deaktiviert sein könnten

  • Um nun weitere Profile zu beziehen kann man* Pakete mit weiteren Regeln installieren (siehe Abschnitt Installation)
  • fremde Profile übernehmen
  • selber Profile selber erstellen

Es sollte aber bedacht werden, dass diese Regeln nicht blind übernommen werden sollen/können, sondern den individuellen Bedürfnissen angepasst werden müssen

Im Internet kursieren noch zahlreiche weitere Profile für AppArmor, doch es sollte immer überlegt werden, wie vertrauenswürdig die Quelle ist und wie kompetent im Erstellen von Profilen

  • Außerdem sind diese Regeln meist nicht auf die eigenen Bedürfnisse angepasst, sondern müssen nachträglich feinjustiert werden
  • Auch hier gilt, dass keine Profile blind übernommen werden sollten

Fehlerbehebung

Konfiguration

Verzeichnisstruktur

Globale und Systemeinstellungen sind in /etc/apparmor gespeichert

  • Die Anwendungsprofile sowie mehrere vordefinierte Unterverzeichnisse befinden sich in /etc/apparmor.d/
  • Eine ausführliche Darstellung der Verzeichnisstruktur nebst Inhalten ist unter Policy Layout verfügbar

disable und force-complain

Enthält /etc/apparmor.d/disable eine Verknüpfung zu einem Profil, so wird dieses nicht automatisch geladen. Ähnlich sorgen Verknüpfungen unter /etc/apparmor.d/force-complain dafür, dass Profile nur im complain-Modus geladen werden (siehe unten)

Dateien

Anhang

Siehe auch

Dokumentation

Man-Pages
Info-Pages

Links

Projekt
  1. AppArmor
Weblinks
  1. https://wiki.ubuntuusers.de/AppArmor/
  2. AppArmor-Übersichtsseite Im englischen Ubuntu-Wiki
  3. Using AppArmor Eintrag im englischen Wiki der Ubuntu-Community
  4. AppArmor mit Ubuntu nutzen- Einführung von Kai Raven