AppArmor ist ein Dienst unter Debian, mit dem man sich zusätzliche Sicherheit schaffen kann. Diese zusätzliche Sicherheit wird dadurch geschaffen, dass Anwendungen / Prozesse in ihren Rechten eingeschränkt werden – genauer gesagt – die Anwendungen / Prozesse haben nur auf diese Verzeichnisse und Dateien Zugriff, auf die sie solche Rechte auch benötigen. In diesem Artikel der Linux Bibel sehen wir uns diese Software etwas genauer an.
Diese Anleitung kann unter Debian genutzt werden und sollte auch unter Ubuntu und darauf basierenden Distributionen funktionieren.
Inhaltsverzeichnis
Voraussetzungen schaffen
Über die Paket-Verwaltung installieren Sie folgende Pakete „apparmor apparmor-profiles apparmor-profiles-extra apparmor-utils„.
Nach der Installation gilt es AppArmor mit dem System von Beginn an automatisch starten zu lassen. Dafür sehen Sie sich zuerst an, ob es das Verzeichnis „/etc/default/grub.d/“ gibt – am Terminal geben Sie dazu folgenden Befehl ein:
ls /etc/default/grub.d/
Ist das Verzeichnis nicht vorhanden, erstellen Sie dieses als Administrator am Terminal mit dem Befehl:
mkdir -p /etc/default/grub.d
Anschließend und ebenfalls als Administrator am Terminal erstellen wir nun die Konfiguration mit folgendem Befehl:
echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT apparmor=1 security=apparmor"' | tee /etc/default/grub.d/apparmor.cfg
Nun zeigen wir dem Bootloader GRUB seine neue Konfiguration:
update-grub
Anschließend starten Sie den Rechner neu.
AppArmor anpassen
Nach den oben vorgenommenen Anpassungen sollte AppArmor laufen, dies können wir als normaler Benutzer am Terminal mit folgendem Befehl erfragen:
cat /sys/module/apparmor/parameters/enabled
Erhalten wir eine Ausgabe wie die folgende läuft die Software:
Y
Nun können wir uns als Administrator mit folgendem Befehl den Status ansehen:
aa-status
Sehen wir uns die Ausgabe (in diesem Beispiel) als Text an:
apparmor module is loaded.
53 profiles are loaded.
34 profiles are in enforce mode.
/usr/bin/akonadiserver
/usr/bin/evince
/usr/bin/evince-previewer
/usr/bin/evince-previewer//sanitized_helper
/usr/bin/evince-thumbnailer
/usr/bin/evince//sanitized_helper
/usr/bin/man
/usr/bin/pidgin
/usr/bin/pidgin//sanitized_helper
/usr/bin/totem
/usr/bin/totem-audio-preview
/usr/bin/totem-video-thumbnailer
/usr/bin/totem//sanitized_helper
/usr/lib/cups/backend/cups-pdf
/usr/lib/x86_64-linux-gnu/lightdm/lightdm-guest-session
/usr/lib/x86_64-linux-gnu/lightdm/lightdm-guest-session//chromium
/usr/sbin/cups-browsed
/usr/sbin/cupsd
/usr/sbin/cupsd//third_party
/usr/sbin/gpsd
/usr/sbin/haveged
apt-cacher-ng
firejail-default
libreoffice-senddoc
libreoffice-soffice//gpg
libreoffice-xpdfimport
lsb_release
man_filter
man_groff
mariadbd_akonadi
mysqld_akonadi
nvidia_modprobe
nvidia_modprobe//kmod
postgresql_akonadi
19 profiles are in complain mode.
/usr/bin/irssi
avahi-daemon
dnsmasq
dnsmasq//libvirt_leaseshelper
identd
klogd
libreoffice-oosplash
libreoffice-soffice
mdnsd
nmbd
nscd
php-fpm
ping
smbd
smbldap-useradd
smbldap-useradd///etc/init.d/nscd
syslog-ng
syslogd
traceroute
0 profiles are in kill mode.
0 profiles are in unconfined mode.
6 processes have profiles defined.
4 processes are in enforce mode.
/usr/bin/akonadiserver (7219)
/usr/sbin/cups-browsed (1370)
/usr/sbin/cupsd (947)
/usr/sbin/haveged (604)
2 processes are in complain mode.
/usr/sbin/avahi-daemon (611) avahi-daemon
/usr/sbin/avahi-daemon (659) avahi-daemon
0 processes are unconfined but have a profile defined.
0 processes are in mixed mode.
0 processes are in kill mode.
Folgende Ausgabe:
apparmor module is loaded.
bedeutet natürlich das AppArmor ohne Probleme läuft.
53 profiles are loaded
zeigt uns, dass 53 Profile (Regeln für Anwendungen / Prozesse) geladen sind – 53 Anwendungen / Prozesse werden also durch AppArmor eingeschränkt. Nun wird es interessant – es gibt verschiedene Modi in denen Profile laufen können:
- complain – Der Modus, in dem ein Profil lernt, was der Prozess darf und was nicht
- enforce – Dies ist der Idealzustand, der Prozess läuft nach den Regeln des Profils
- audit – Es werden Zugriffe auf Dateien und Verzeichnisse sowie Regelverstöße aufgezeichnet, ideal um zu sehen, worauf eine Software zugreifen können sollte oder will
Nun gehen wir zurück zu unserer Ausgabe:
34 profiles are in enforce mode.
34 Profile laufen im „enforce„-Modus, schränken die darunter verzeichneten Prozesse wie es soll in ihren Rechten ein. Weitere 19 Prozesse laufen im „complain„-Modus, lernen also was sie tun dürfen und was nicht und so weiter und so fort – das Lernen geschieht teilweise automatisch, vor allem kurz nach der Installation.
Nun können wir uns auch ansehen, welche Prozesse nicht geschützt sind:
aa-unconfined
aa-unconfined --paranoid
Diese Liste ist etwas länger:
Vor allem nach dem zweiten Befehl:
Nun, für viele nicht eingeschränkte Prozesse haben wir uns das Paket „apparmor-profiles-extra“ installiert, diese Profile liegen unter „/usr/share/apparmor/extra-profiles/“ und sind nicht aktiviert. Diese lassen sich nun etwa mit dem Befehl:
ls /usr/share/apparmor/extra-profiles/ | less
anzeigen:
Oder natürlich auch im grafischen Dateimanager:
Ein Profil nennt sich so wie der Pfad zu seiner ausführbaren Datei, also für Skype etwa „/usr/bin/skype“ – so nennt sich das Profil „usr.bin.skype„. Möchte ich ein Profil nun aktivieren, um die jeweilige Anwendung einzuschränken, gilt es das dazu passende in das Verzeichnis „/etc/apparmor.d/“ zu kopieren – also für das obige Beispiel:
cp /usr/share/apparmor/extra-profiles/usr.bin.skype /etc/apparmor.d/
Anschließend gilt es das Profil in den jeweiligen Modus zu versetzen – in der Regel sollte es bei bestehenden Profilen genügen diese einfach in den „enforce„-Modus zu versetzen – also (bei nicht laufender Software – hier eben Skype):
aa-enforce /etc/apparmor.d/usr.bin.skype
Nun testet man die Software – in diesem Beispiel eben Skype, funktioniert alles so wie es soll – perfekt. Gibt es mit Funktionen Probleme, beenden Sie die Software, versetzen Sie das Profil in den Lern-Modus (die Software darf beim Ändern in den Lern-Modus nicht laufen):
aa-complain /etc/apparmor.d/usr.bin.skype
Nun starten Sie die Software – in diesem Fall eben Skype und führen alle Funktionen aus – unter anderem eben auch aktivieren der Kamera, speichern von Dateien, Zugriff auf die gewünschten Verzeichnisse, … haben Sie alle Funktionen ausgeführt beenden Sie die Software und versetzen deren Profil wieder in den „enforce„-Modus.
Selbst Profile erstellen
Nun gibt es natürlich etliche Anwendungen, für die es keine Profile gibt, beispielsweise gibt es ein Profil für Firefox unter „/usr/share/apparmor/extra-profiles/“ – es ist aber nicht aktiviert – aber keines für Google Chrome. Möchte man ein solches erstellen – kein Problem, für welche Anwendung oder welchen Prozess auch immer, alles lässt sich selbst anfertigen.
Nehmen wir einmal das Beispiel Google Chrome – als Erstes gilt es zu erfahren, wie sich die ausführbare Datei nennt – ein Blick in das Anwendungsmenü führt meist zum Ziel – hier etwa unter KDE:
In diesem Beispiel nennt sich die Datei „google-chrome-stable“ – hier findet sich auch gleich der Pfad zur ausführbaren Datei – ist dies aber nicht der Fall genügt am Terminal der Befehl:
which google-chrome-stable
Und schon erhält man den Pfad zur ausführbaren Datei, in diesem Fall:
/usr/local/bin/google-chrome-stable
Nun können wir als Administrator ein Profil erstellen:
aa-genprof /usr/local/bin/google-chrome-stable
Der Pfad muss komplett angegeben werden, ansonsten funktioniert die Geschichte nicht. Lassen Sie den Befehl nun laufen und starten die Anwendung ganz normal – also eben im Beispiel Chrome. Nun surfen Sie im Internet, speichern Dateien unter „Downloads„, greifen auf das Verzeichnis „Dokumente“ zu – speichern Sie keine Datei unter Downloads, wird die Software später keine Dateien unter „Downloads“ speichern können. Greifen Sie beispielsweise nicht auf das Verzeichnis „Dokumente“ (oder andere Verzeichnisse) zu, kann die Software dies auch später nicht. Das Profil befindet sich im Lern-Modus – also im „complain„-Modus beim Erstellen.
Haben Sie alles ausgeführt, was Chrome dürfen soll, beenden Sie den Browser, wechseln Sie zurück auf das Terminal und drücken s. Damit beendet AppArmor den „complain„-Modus und zeigt Ihnen am Terminal was Chrome während dieser Zeit getan hat – jede Aktion wird am Terminal der Reihe nach gezeigt – erst eine – diese gilt es nun zu erlauben mit a, mit d wird nicht erlaubt – mehr benötigen Sie in der Regel nicht, anschließend zeigt AppArmor die nächste Aktion die durchgeführt wurde. Ein Beispiel für eine solche Frage:
Profile: /usr/local/bin/google-chrome-stable
Path: /etc/pkcs11/modules
Mode: r
Severity: unknow
Darunter zeigt AppArmor noch eine Legende für alle zu nutzenden Tasten, aber wie schon beschrieben – mehr als a und d brauchen Sie in der Regel nicht. Melder AppArmor das alle Fragen von Ihnen beantwortet wurden speichern Sie das Profil mit s und beenden den „complain„-Modus mit f. Das so erstellte Profil ist automatisch aktiv.
Gibt es nun Probleme starten Sie am einfachsten den „audit“-Modus mit:
aa-audit /usr/local/bin/google-chrome-stable
und starten die Anwendung – hier sehen Sie nun was der Software verboten wird, aber vielleicht doch benötigt wird. Wird es Ihnen zu viel löschen Sie die Datei aus dem Verzeichnis „/etc/apparmor.d/„. Diese Dateien können Sie natürlich auch mit einem Texteditor bearbeiten. Ein kleines Beispiel:
#include <tunables/global>
/usr/bin/firefox flags=(complain) {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/samba>
capability net_bind_service,
/proc/sys/kernel/core_pattern r,
/usr/bin/firefox mr,
/var/cache/samba/gencache.tdb rwk,
/var/{cache,lib}/samba/browse.dat* rw,
/var/{cache,lib}/samba/gencache.dat rw,
/var/{cache,lib}/samba/wins.dat* rw,
/var/{cache,lib}/samba/smb_krb5/ rw,
/var/{cache,lib}/samba/smb_krb5/krb5.conf* rw,
/var/{cache,lib}/samba/smb_tmp_krb5.* rw,
/var/{cache,lib}/samba/sync.* rw,
/var/{cache,lib}/samba/unexpected rw,
/{,var/}run/samba/** rwk,
# Site-specific additions and overrides.
# See local/README for details.
#include <local/usr.bin.firefox>
}
Sie finden die Verzeichnisse und Dateien aufgelistet, dahinter die Rechte:
- r – Lesezugriff
- w – Schreibzugriff
- a – Hinzufügen von Datei-Inhalten
- l – Setzen von Links
- k – Sperren von Dateien
- m – Datei via mmap ins RAM laden
- x – Ausführen von Drittanwendungen
AppArmor deaktivieren
Löschen Sie die erstellte Datei unter „/etc/default/grub.d/“ und führen anschließend ein:
update-grub
aus.
Erstveröffentlichung: Mi 29. Sep 2021, 07:23
Noch keine Reaktion