AppArmor ist ein Mandatory Access Control- oder MAC-System.
Es verwendet das Linux-Sicherheitsmodul, um Programme einzuschränken. AppArmor richtet eine Sammlung von Standardanwendungsprofilen ein, um Linux-Dienste zu schützen.
Sie können auch alle anderen Anwendungen schützen, die auf Ihrem System ausgeführt werden, indem Sie selbst Profildateien erstellen.
In Ubuntu ist AppArmor standardmäßig installiert und aktiviert. Die Apparmor-Profile werden beim Systemstart geladen.
AppArmor arbeitet in den folgenden zwei Arten von Profilmodi:
- Durchsetzen – Im Durchsetzungsmodus beginnt das System mit der Durchsetzung der Regeln und meldet die Verletzungsversuche in syslog oder auditd (nur wenn auditd installiert ist) und der Betrieb wird nicht zugelassen.
- Beschweren – Im Beschwerdemodus erzwingt das System keine Regeln. Es werden nur die Verletzungsversuche protokolliert.
Weitere Profile finden Sie im Paket apparmor-profiles.
Apparmor-Status anzeigen
Sie können den aktuellen Status von apparmor und allen geladenen Profilen wie folgt anzeigen:
$ sudo apparmor_status apparmor module is loaded. 5 profiles are loaded. 5 profiles are in enforce mode. /sbin/dhclient /usr/lib/NetworkManager/nm-dhcp-client.action /usr/lib/connman/scripts/dhclient-script /usr/sbin/mysqld /usr/sbin/tcpdump 0 profiles are in complain mode. 2 processes have profiles defined. 2 processes are in enforce mode. /sbin/dhclient (585) /usr/sbin/mysqld (799) 0 processes are in complain mode. 0 processes are unconfined but have a profile defined.
Wenn wir die obige Ausgabe überprüfen, sehen wir, dass sich 5 Profile im Enforce-Modus befinden.
Dies deutet auch darauf hin, dass derzeit zwei Prozesse im Enforcement-Modus laufen (wegen der Profile). Beispielsweise läuft /sbin/dhclient mit der PID 585 im Erzwingungsmodus.
Profilmodus ändern
Um ein Profil in den Beschwerdemodus zu versetzen, installieren Sie zuerst das Paket apparmor-utils, falls es noch nicht installiert ist.
apt-get install apparmor-utils
Verwenden Sie den Befehl aa-complain, um ein Profil in den Beschwerdemodus zu versetzen. Gehen Sie beispielsweise wie folgt vor, um den Beschwerdemodus für mysqld zu aktivieren.
$ sudo aa-complain /usr/sbin/mysqld Setting /usr/sbin/mysqld to complain mode.
Wenn Sie jetzt apparmor_status ausführen, sehen Sie mysqld im Beschwerdemodus.
$ sudo apparmor_status apparmor module is loaded. 5 profiles are loaded. 4 profiles are in enforce mode. /sbin/dhclient /usr/lib/NetworkManager/nm-dhcp-client.action /usr/lib/connman/scripts/dhclient-script /usr/sbin/tcpdump 1 profiles are in complain mode. /usr/sbin/mysqld 2 processes have profiles defined. 1 processes are in enforce mode. /sbin/dhclient (585) 1 processes are in complain mode. /usr/sbin/mysqld (799) 0 processes are unconfined but have a profile defined.
Sie können das Profil mit dem unten gezeigten Befehl aa-enforce wieder in den Erzwingungsmodus zurückversetzen.
$ sudo aa-enforce /usr/sbin/mysqld Setting /usr/sbin/mysqld to enforce mode.
AppArmor-Profildateien
AppArmor-Profile sind Textdateien, die sich im Verzeichnis /etc/apparmor.d/ befinden.
Die Dateien werden nach dem vollständigen Pfad zu der ausführbaren Datei benannt, die sie profilieren, wobei das „/“ durch „.“ ersetzt wird.
Beispielsweise befindet sich der Ping-Befehl in /bin/ping. Die entsprechende AppArmor-Profildatei erhält den Namen bin.ping
Das Folgende ist die Apparmor-Profildatei für usr.sbin.mysqld. /usr/sbin/mysqld ist der absolute Pfad der Binärdatei, auf die dieses Profil angewendet wird.
# cat usr.sbin.mysqld # vim:syntax=apparmor # Last Modified: Tue Jun 19 17:37:30 2007 #include <tunables/global> /usr/sbin/mysqld { #include <abstractions/base> #include <abstractions/nameservice> #include <abstractions/user-tmp> #include <abstractions/mysql> #include <abstractions/winbind> capability dac_override, capability sys_resource, capability setgid, capability setuid, network tcp, /etc/hosts.allow r, /etc/hosts.deny r, /etc/mysql/*.pem r, /etc/mysql/conf.d/ r, /etc/mysql/conf.d/* r, /etc/mysql/*.cnf r, /usr/lib/mysql/plugin/ r, /usr/lib/mysql/plugin/*.so* mr, /usr/sbin/mysqld mr, /usr/share/mysql/** r, /var/log/mysql.log rw, /var/log/mysql.err rw, /var/lib/mysql/ r, /var/lib/mysql/** rwk, /var/log/mysql/ r, /var/log/mysql/* rw, /var/run/mysqld/mysqld.pid rw, /var/run/mysqld/mysqld.sock w, /run/mysqld/mysqld.pid rw, /run/mysqld/mysqld.sock w, /sys/devices/system/cpu/ r, # Site-specific additions and overrides. See local/README for details. #include <local/usr.sbin.mysqld> }
In einer Profildatei werden Kommentare immer mit dem Zeichen # fortgesetzt. #include lines lädt die Datei.
Im Folgenden sind die verschiedenen Arten von Regeln aufgeführt, die in Profilen verwendet werden.
- Pfadeinträge:Diese enthalten Informationen darüber, auf welche Dateien die Anwendung zugreifen darf.
- Fähigkeitseinträge:bestimmt die Privilegien, die ein beschränkter Prozess verwenden darf.
- Netzwerkeinträge:bestimmt den Verbindungstyp. Zum Beispiel:TCP. Für einen Paketanalysator kann das Netzwerk roh oder paketiert sein usw.
Innerhalb der geschweiften Klammern {} haben wir andere include-Anweisungen und schließt auch Zugriffsberechtigungen/-modi [read(r)/write (w)/execute (x) (k) lock (erfordert r oder w, AppArmor 2.1 und höher)] ein Verschiedene Dateien und Verzeichnisse, einschließlich Regex-Globbing der Include-Anweisungen in geschweiften Klammern {} helfen beim Laden von Komponenten von Novell AppArmor-Profilen.
AppArmor deaktivieren
Wenn einige Prozesse wie erwartet funktionieren und Sie gerne debuggen möchten, ob Apparmor-Profile der Grund dafür sind, sollten Sie Apparmor möglicherweise vorübergehend zum Debuggen deaktivieren.
# /etc/init.d/apparmor stop * Clearing AppArmor profiles cache [OK]
Durch Ausführen des obigen Befehls wird nur der Profilcache gelöscht. Um das Profil zu entladen, führen Sie den folgenden Befehl aus.
# /etc/init.d/apparmor teardown * Unloading AppArmor profiles [OK]