AppArmor vs SELinux – dwa mechanizmy bezpieczeństwa Linux, które warto znać
Linux od lat kojarzony jest z bezpieczeństwem, ale samo używanie systemu Linux nie oznacza automatycznie bezpiecznej infrastruktury.
Administrator może mieć:
- aktualny system,
- mocne hasła,
- firewall,
- szyfrowanie,
a mimo tego pojedyncza podatna aplikacja może stać się punktem wejścia dla atakującego.
Dlatego w środowiskach profesjonalnych stosuje się dodatkowe warstwy ochrony. Jedną z najważniejszych jest Mandatory Access Control (MAC), czyli obowiązkowa kontrola dostępu.
Najpopularniejszymi rozwiązaniami MAC w Linux są:
- SELinux (Security-Enhanced Linux)
- AppArmor
Oba mechanizmy mają podobny cel:
ograniczyć możliwości procesu nawet wtedy, gdy zostanie on przejęty.
Różnią się jednak filozofią działania, konfiguracją i sposobem zarządzania politykami.
Czym jest Mandatory Access Control?
Tradycyjne uprawnienia Linux działają według modelu:
DAC – Discretionary Access Control
Czyli:
właściciel pliku decyduje, kto ma dostęp.
Przykład:
ls -l /etc/passwd
wynik:
-rw-r--r-- root root
Administrator może zmienić prawa.
Problem:
Jeżeli aplikacja działa z wysokimi uprawnieniami i zostanie przejęta, atakujący może wykorzystać jej dostęp.
MAC dodaje dodatkową warstwę.
Schemat:
Proces
↓
Uprawnienia Linux
↓
SELinux/AppArmor
↓
Kernel
↓
Dostęp przyznany lub zablokowany
Nawet root może zostać ograniczony przez politykę bezpieczeństwa.
SELinux – Security-Enhanced Linux
SELinux został pierwotnie opracowany przez:
National Security Agency
Obecnie jest częścią jądra Linux i jest szeroko stosowany między innymi w:
- Red Hat Enterprise Linux,
- Fedora,
- Rocky Linux,
- AlmaLinux,
- systemach rządowych i korporacyjnych.
Jak działa SELinux?
SELinux wykorzystuje model:
label-based access control
Każdy obiekt posiada specjalną etykietę bezpieczeństwa.
Dotyczy to:
- plików,
- procesów,
- portów,
- użytkowników.
Przykład:
Plik:
/var/www/html/index.html
może mieć etykietę:
httpd_sys_content_t
Proces Apache:
httpd_t
SELinux sprawdza:
Czy proces httpd_t może czytać pliki httpd_sys_content_t?
Jeżeli polityka pozwala:
ALLOW
Jeżeli nie:
DENY
Model SELinux
SELinux działa według zasady:
domyślnie zabraniaj, zezwalaj tylko jawnie.
Przykład:
Apache może:
✅ czytać strony WWW
ale nie może:
❌ czytać prywatnych katalogów użytkowników
❌ pisać w dowolnych miejscach systemu
❌ uruchamiać przypadkowych programów

Tryby działania SELinux
SELinux posiada trzy tryby:
Enforcing
Aktywna ochrona.
Reguły są egzekwowane.
getenforce
wynik:
Enforcing
Permissive
SELinux tylko loguje naruszenia.
Nie blokuje.
Przydatne podczas tworzenia polityk.
Disabled
SELinux wyłączony.
W środowiskach produkcyjnych zazwyczaj niewskazane.
Zalety SELinux
Bardzo szczegółowa kontrola
Można kontrolować:
- konkretne procesy,
- konkretne pliki,
- konkretne porty.
Świetna ochrona serwerów
Przykład:
Podatność w Apache.
Bez SELinux:
Apache
↓
system
↓
dostęp do danych
Z SELinux:
Apache
↓
SELinux policy
↓
tylko dozwolone zasoby
Standard korporacyjny
SELinux jest często wymagany w:
- bankowości,
- administracji,
- dużych środowiskach enterprise.
Wady SELinux
Największym problemem SELinux jest złożoność.
Administrator musi rozumieć:
- contexty,
- typy,
- role,
- polityki,
- moduły.
Przykład problemu:
Administrator zmienia katalog:
/var/www/html
na:
/data/web
Apache nie działa.
Dlaczego?
Nie przez Linux permissions.
Przez brak odpowiedniego contextu SELinux.
Naprawa:
restorecon -Rv /data/web
AppArmor – prostsze podejście
AppArmor działa inaczej.
Zamiast etykiet wykorzystuje:
profile aplikacji
Czyli definiuje:
co konkretna aplikacja może robić.
Popularne systemy:
- Ubuntu,
- Debian,
- SUSE Linux Enterprise.
Jak działa AppArmor?
Przykład:
Profil dla programu:
/usr/sbin/nginx
może mówić:
nginx może:
✔ czytać /var/www
✔ pisać logi
✖ czytać /home
✖ wykonywać /bin/bash
Profil wygląda przykładowo:
/usr/sbin/nginx {
/var/www/** r,
/var/log/nginx/** rw,
/bin/bash ix,
}
Tryby AppArmor
Enforce
Aktywna ochrona.
Reguły blokują działania.
Complain
Podobnie jak SELinux permissive.
Loguje, ale nie blokuje.
Sprawdzenie:
aa-status
Zalety AppArmor
Prostota
Łatwiejszy start dla administratorów.
Profil jest czytelny:
program
↓
dostęp do plików
↓
reguły
Szybkie wdrożenie
Dobry wybór dla:
- serwerów WWW,
- kontenerów,
- małych i średnich firm.
Popularność w Ubuntu
Ubuntu domyślnie wykorzystuje AppArmor.
Przykłady:
- Docker,
- Snap,
- systemowe usługi.
Wady AppArmor
Mniejsza szczegółowość niż SELinux.
AppArmor skupia się głównie na:
- ścieżkach plików,
- aplikacjach.
SELinux kontroluje:
- typy obiektów,
- role,
- domeny bezpieczeństwa.
AppArmor vs SELinux – porównanie
| Cecha | SELinux | AppArmor |
|---|---|---|
| Model | Label-based | Profile-based |
| Złożoność | Wysoka | Niższa |
| Nauka | Trudniejsza | Łatwiejsza |
| Kontrola | Bardzo szczegółowa | Bardzo dobra |
| Popularność Enterprise | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Ubuntu | Opcjonalnie | Domyślnie |
| RHEL | Domyślnie | Nie |
| Debugowanie | Trudniejsze | Łatwiejsze |
Co wybrać?
Serwery Red Hat / Rocky / AlmaLinux
Najczęściej:
SELinux
Powód:
- integracja z systemem,
- wsparcie producenta,
- standard enterprise.
Ubuntu Server
Najczęściej:
AppArmor
Powód:
- prostota,
- gotowe profile,
- dobra integracja.
Kontenery
Najlepsze efekty daje połączenie:
Namespaces
+
cgroups v2
+
Seccomp
+
AppArmor/SELinux
Przykład praktyczny – przejęty serwer WWW
Załóżmy:
Podatność w aplikacji PHP.
Atakujący uzyskuje możliwość wykonania kodu.
Bez dodatkowej ochrony:
PHP
↓
Shell
↓
system
Z AppArmor:
PHP
↓
AppArmor
↓
ograniczony dostęp
Z SELinux:
PHP domain
↓
SELinux policy
↓
blokada nieautoryzowanych działań
Wskazówki administratora
Nie wyłączaj MAC, gdy pojawi się problem
Częsty błąd:
„SELinux blokuje aplikację, wyłączmy go.”
Lepsze podejście:
sprawdź logi.
SELinux:
ausearch -m AVC
AppArmor:
journalctl | grep DENIED
Najpierw tryb testowy
Przy wdrażaniu nowych profili:
SELinux:
Permissive
AppArmor:
Complain
Najpierw obserwujemy, potem blokujemy.
Podsumowanie
AppArmor i SELinux rozwiązują ten sam problem:
jak ograniczyć aplikację nawet wtedy, gdy zostanie zaatakowana.
SELinux oferuje większą kontrolę i jest standardem w środowiskach enterprise, ale wymaga większej wiedzy.
AppArmor jest prostszy, szybszy we wdrożeniu i bardzo dobrze sprawdza się na desktopach oraz serwerach Ubuntu.
Nie ma jednego uniwersalnego zwycięzcy.
Dobry administrator wybiera narzędzie zgodnie z wymaganiami środowiska.
W praktyce najważniejsze jest nie to, czy używasz SELinux czy AppArmor, ale czy w ogóle stosujesz mechanizm Mandatory Access Control jako kolejną warstwę ochrony.






