AppArmor

Moduł bezpieczeństwa jądra realizujący obowiązkową kontrolę dostępu opartą na ścieżkach plików. Alternatywa dla SELinux, domyślny m.in. w Ubuntu.

AppArmor (Application Armor) to moduł bezpieczeństwa jądra Linuksa (LSM, czyli Linux Security Module), który realizuje obowiązkową kontrolę dostępu (MAC, Mandatory Access Control) w oparciu o ścieżki plików. W praktyce oznacza to, że nawet jeśli proces działa jako root, AppArmor potrafi mu powiedzieć: „wolno ci czytać tylko te pliki, pisać do tamtych i otwierać te porty sieciowe — reszta zablokowana, koniec dyskusji”. To dodatkowa warstwa ochrony nakładana na klasyczne uprawnienia uniksowe, a nie ich zamiennik.

AppArmor działa na zasadzie profili przypisanych do konkretnych programów. Profil to plik tekstowy opisujący, do czego dana aplikacja ma dostęp. Profile leżą zwykle w /etc/apparmor.d/ i mogą pracować w dwóch trybach: enforce (łamanie reguł = blokada akcji) oraz complain (nic nie blokuje, tylko loguje naruszenia — idealne do nauki, co aplikacja naprawdę robi). Kluczowa cecha: AppArmor patrzy na ścieżkę pliku, a nie na etykietę przyklejoną do i-węzła. Dzięki temu profile czyta się jak zwykłą listę reguł, co jest dużo przyjaźniejsze niż system etykiet w SELinux.

Przykład z praktyki

Załóżmy, że masz serwer z Ubuntu i chcesz sprawdzić, co jest chronione. Wpisujesz:

sudo aa-status

Dostajesz listę profili w trybie enforce i complain — często zobaczysz tam profile dla /usr/sbin/mysqld, cups czy tcpdump. Gdy jakaś aplikacja nagle nie może odczytać pliku, a uprawnienia są poprawne, zerknij do logów (dmesg lub journalctl) — szukaj wpisów apparmor="DENIED". Profil tymczasowo przełączysz w tryb complain komendą:

sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld

A z powrotem na ostry rygor: sudo aa-enforce .... Narzędzie aa-logprof pomoże ci wygenerować reguły na podstawie tego, co aplikacja próbowała robić.

Częste błędy i mity

  • „Coś nie działa, więc wyłączę AppArmor” — klasyk. Zanim zrobisz systemctl stop apparmor, najpierw przełącz konkretny profil w complain i przeczytaj logi. Wyłączanie całości to gaszenie pożaru przez zburzenie domu.
  • AppArmor a SELinux — to konkurencyjne rozwiązania tego samego problemu. AppArmor jest domyślny w Ubuntu, Debianie i openSUSE; SELinux króluje w rodzinie Red Hat (Fedora, RHEL). Nie da się sensownie używać obu naraz w pełnym wymiarze.
  • Ścieżkowość bywa pułapką — jeśli plik dostępny jest przez kilka ścieżek (linki, bind mounts), reguła oparta na jednej ścieżce może nie objąć pozostałych.

Pojęcia powiązane: SELinux, LSM (Linux Security Module), MAC (Mandatory Access Control), DAC (Discretionary Access Control), seccomp, capabilities, sandboxing.