Strona główna » Blog » SELinux vs AppArmor. Który mechanizm MAC wybrać?

W standardowym modelu uprawnień Linux (DAC) operującym na zasadach Użytkownik, Grupa, Inni, brakuje mechanizmów obronnych adekwatnych do współczesnych zagrożeń, gdzie pojedyncza luka może skutkować przejęciem kontroli nad całym systemem. Rozwiązaniem są systemy Mandatory Access Control (MAC), takie jak SELinux i AppArmor, które, choć dążą do ograniczenia uprawnień procesów, realizują to zadanie w odmienny sposób.

Architektura i Filozofia Działania

Zarówno SELinux, jak i AppArmor, korzystają z LSM (Linux Security Modules), ale ich podejście do identyfikacji obiektów jest kluczem do zrozumienia różnic między nimi.

SELinux: Etykietowanie

SELinux (Security-Enhanced Linux) opiera swoje działanie na etykietowaniu obiektów, gdzie każdy plik, proces, a nawet gniazdo sieciowe, otrzymuje przypisany kontekst bezpieczeństwa, czyli etykietę. System analizuje atrybuty (xattr) w systemie plików, a nie nazwę pliku, co oznacza, że przeniesienie pliku /etc/shadow w inne miejsce nie zmienia jego etykiety shadow_t. Ta precyzja i niezależność od ścieżek, w tym odporność na manipulacje przez dowiązania symboliczne, stanowią kluczową zaletę SELinux.

AppArmor: Ścieżki

AppArmor identyfikuje obiekty na podstawie ich lokalizacji w systemie plików. Działanie opiera się na definiowaniu profilu dla konkretnej binarki, w którym określa się ścieżki dostępu. Prostota tego rozwiązania jest jego główną zaletą –  wiedząc, gdzie aplikacja przechowuje logi i dane, można szybko stworzyć działający profil.

Porównanie techniczne

SELinux i AppArmor to systemy zabezpieczeń, które różnią się pod względem identyfikacji, konfiguracji, domyślnych systemów i granularności. SELinux używa etykiet i złożonej konfiguracji Type Enforcement, podczas gdy AppArmor opiera się na ścieżkach i prostych profilach tekstowych. SELinux jest domyślnie używany w systemach RHEL, Fedora, Rocky i CentOS, a AppArmor w Ubuntu, Debian i openSUSE. SELinux oferuje bardzo wysoką granularność z kontrolą syscalli, a AppArmor zapewnia wysoką granularność z kontrolą dostępu do plików.

Wydajność

Powszechnie uważa się, że mechanizmy MAC znacząco obniżają wydajność systemu. W praktyce jednak obciążenie generowane przez SELinux i AppArmor jest znikome, zwykle poniżej 1-2%, ponieważ weryfikacje odbywają się w strukturach jądra. SELinux może powodować nieco większe obciążenie podczas operacji na dużej liczbie małych plików ze względu na odczyt etykiet z atrybutów xattr. AppArmor, działający na ścieżkach, jest pod tym względem nieco szybszy, ale różnice te są nieznaczne w porównaniu z korzyściami w zakresie bezpieczeństwa, jakie oferują te mechanizmy.

Tryby pracy

SELinux i AppArmor udostępniają trzy stany pracy: aktywną blokadę, tryb diagnostyczny i całkowite wyłączenie. Istotna różnica polega na tym, że SELinux zarządza stanem globalnie dla całego systemu, natomiast AppArmor umożliwia ustawienie trybu indywidualnie dla każdego profilu aplikacji.

Kluczowe komendy

SELinux
  • getenforce / setenforce – Pozwala sprawdzić/zmienić tryb pracy SELinux (Enforcing, Permissive, Disabled).
  • ls -Z / ps -Z – Wyświetla konteksty bezpieczeństwa plików i procesów (np. system_u:object_r:httpd_config_t:s0).
  • semanage fcontext -l – Lista domyślnych kontekstów dla plików i katalogów.
  • chcon -t typ /sciezka – Zmienia kontekst bezpieczeństwa pliku (tymczasowo!).
  • restorecon -v /sciezka – Przywraca domyślny kontekst bezpieczeństwa pliku.

.

AppArmor
  • aa-enforce /sciezka/do/binarki – Przełącza profil aplikacji w tryb egzekwowania. AppArmor zaczyna blokować dostęp do zasobów, zamiast tylko raportować naruszenia.
  • aa-disable /sciezka/do/profilu – Wyłącza profil, ale nie odinstalowuje go. Przydatne, gdy chcesz tymczasowo wyłączyć ochronę konkretnej aplikacji.
  • aa-remove /sciezka/do/profilu – Usuwa profil z systemu. Używaj ostrożnie, bo aplikacja traci ochronę AppArmor.
  • apparmor_status – Bardziej szczegółowy niż aa-status. Pokazuje, które procesy działają pod kontrolą AppArmor i w jakim trybie.

Podsumowanie

Decyzja między SELinux a AppArmor w większości sytuacji opiera się na prostej zasadzie: trzymaj się wybranej dystrybucji. Wybierz SELinux, jeśli korzystasz z systemów „Enterprise” takich jak RHEL, Fedora, Rocky lub AlmaLinux. Zastępowanie go AppArmor w tych systemach jest niepraktyczne i może zaszkodzić stabilności. Wybierz AppArmor, jeśli używasz Ubuntu, Debiana lub openSUSE. Jest wystarczająco skuteczny, aby powstrzymać większość ataków, a jego konfiguracja jest prosta.

Pamiętaj, że niezależnie od wybranego systemu, bezpieczeństwo to ciągły proces, a nie jednorazowa konfiguracja. Wyłączenie mechanizmu MAC z powodu problemów z uruchomieniem usługi jest niedopuszczalne. Profesjonalista powinien przełączyć system w tryb diagnostyczny, analizować logi i odpowiednio dostosować politykę bezpieczeństwa.

Przewijanie do góry