AppArmor je systém povinného řízení přístupu neboli MAC.
Používá Linux Security Module k omezení programů. AppArmor nastavuje kolekci výchozích aplikačních profilů pro ochranu služeb Linuxu.
Můžete také chránit jakékoli další aplikace spuštěné ve vašem systému vytvořením souborů profilu sami.
V Ubuntu je AppArmor ve výchozím nastavení nainstalován a povolen. Profily apparmor se načtou při spuštění systému.
AppArmor funguje v následujících dvou typech profilových režimů:
- Vynutit – V režimu vynucení začne systém vynucovat pravidla a hlásit pokusy o porušení v syslog nebo auditd (pouze pokud je nainstalován auditd) a operace nebude povolena.
- Stížnost – V režimu stížností systém nevynucuje žádná pravidla. Zaznamená pouze pokusy o porušení.
Další profily lze nalézt v balíčku apparmor-profiles.
Zobrazit stav Apparmoru
Můžete si prohlédnout aktuální stav apparmoru a všech načtených profilů, jak je ukázáno níže:
$ 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.
Pokud zkontrolujeme výše uvedený výstup, uvidíme, že 5 profilů je v režimu Enforce.
To také naznačuje, že dva procesy aktuálně běží v režimu vynucení (kvůli profilům). Například /sbin/dhclient s PID 585 běží v režimu vynucení.
Změnit režim profilu
Chcete-li nastavit profil v režimu stížnosti, nejprve nainstalujte balíček apparmor-utils, pokud ještě není nainstalován.
apt-get install apparmor-utils
Použijte příkaz aa-complain k nastavení profilu v režimu stížnosti. Chcete-li například aktivovat režim stížnosti pro mysqld, proveďte následující.
$ sudo aa-complain /usr/sbin/mysqld Setting /usr/sbin/mysqld to complain mode.
Nyní, když spustíte apparmor_status, uvidíte mysqld v režimu stížnosti.
$ 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.
Profil můžete změnit zpět na vynucovací režim pomocí příkazu aa-enforce, jak je ukázáno níže.
$ sudo aa-enforce /usr/sbin/mysqld Setting /usr/sbin/mysqld to enforce mode.
Soubory profilu AppArmor
Profily AppArmor jsou textové soubory umístěné v adresáři /etc/apparmor.d/.
Soubory jsou pojmenovány podle úplné cesty ke spustitelnému souboru, který profilují, ale místo „/“ se nahradí „.“.
Například příkaz ping se nachází v /bin/ping. Ekvivalentní soubor profilu AppArmor bude pojmenován jako bin.ping
Následuje soubor profilu Apparmor pro usr.sbin.mysqld. /usr/sbin/mysqld je absolutní cesta k binárnímu souboru, kde se tento profil použije.
# 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> }
V souboru profilu komentáře vždy pokračují znakem #. #include lines načte soubor.
Níže jsou uvedeny různé typy pravidel, které se používají v profilech.
- Položky cesty:Obsahuje informace o tom, ke kterým souborům má aplikace povolen přístup.
- Položky schopností:Určuje oprávnění, která smí omezený proces používat.
- Položky sítě:Určuje typ připojení. Například:tcp. V případě sítě s analyzátorem paketů může být síť raw nebo paketová atd.
Ve složených závorkách {} máme další příkazy include a také zahrnuje přístupová oprávnění/režimy [čtení(r)/zápis (w)/spouštění (x) (k) zámek (vyžaduje r nebo w, AppArmor 2.1 a novější)] k různé soubory a adresáře, které zahrnují globování regulárních výrazů a příkazy include ve složených závorkách {}, pomáhají načíst komponenty profilů Novell AppArmor.
Zakázat AppArmor
Pokud nějaký proces funguje podle očekávání a chcete-li ladit, zda jsou toho důvodem profily apparmor, možná budete chtít dočasně zakázat apparmor pro ladění.
# /etc/init.d/apparmor stop * Clearing AppArmor profiles cache [OK]
Provedením výše uvedeného příkazu se pouze vymaže mezipaměť profilů. Pro uvolnění profilu spusťte následující příkaz.
# /etc/init.d/apparmor teardown * Unloading AppArmor profiles [OK]