SELinux vs AppArmor: Porównanie dla serwerów Linux
15 min czytania - 21 maja 2026

Porównanie SELinux i AppArmor dla bezpieczeństwa serwerów Linux: Dowiedz się, jak działa każdy framework MAC, jakie są kluczowe różnice i który wybrać dla swojej konfiguracji hostingu.
SELinux a AppArmor: Która struktura MAC pasuje do Twojego serwera?
Zarówno SELinux, jak i AppArmor egzekwują w systemie Linux kontrolę dostępu MAC (Mandatory Access Control), ograniczając możliwości procesów nawet w przypadku uzyskania uprawnień administratora. Różnica polega na sposobie działania tych rozwiązań. SELinux przypisuje stałe etykiety do każdego pliku i procesu. AppArmor wykorzystuje natomiast reguły ścieżek plików. Ten jeden wybór projektowy determinuje wszystko inne: złożoność, poziom bezpieczeństwa oraz to, która dystrybucja dostarcza dane narzędzie w standardzie.
Jak działa SELinux
SELinux został pierwotnie opracowany przez NSA i jest domyślnie dostarczany w systemach RHEL, CentOS, Fedora i Rocky Linux. Oznacza on każdy obiekt w systemie, w tym pliki, procesy, porty i gniazda, kontekstem bezpieczeństwa w formacie user:role:type:level. Pole type wykonuje większość ciężkiej pracy poprzez mechanizm zwany Type Enforcement (TE).
Na przykład serwer WWW Apache działa jako httpd_t. Pliki treści internetowych mają inny typ. Jeśli żadna reguła polityki nie zezwala wyraźnie httpd_t dostępu do tego typu treści, żądanie jest odrzucane. Jest to model domyślnego odrzucania. Nic nie jest dozwolone, chyba że zasada stanowi inaczej.
SELinux obsługuje również Multi-Level Security (MLS) i Multi-Category Security (MCS), które klasyfikują dane według poziomu wrażliwości i odpowiednio ograniczają dostęp. To właśnie MCS zapewnia SELinux silną izolację kontenerów, utrzymując je w oddzieleniu od siebie nawzajem oraz od hosta. Ma to znaczenie w środowiskach Kubernetes i OpenShift, gdzie pody współdzielą węzeł.
Kompromisem jest złożoność. SELinux ma stromą krzywą uczenia się. Rozwiązywanie problemów związanych z odmową dostępu oznacza czytanie dzienników audytowych, zrozumienie kontekstów bezpieczeństwa, a czasem generowanie niestandardowych modułów zasad przy użyciu audit2allow. Dla zespołów bez dedykowanego personelu ds. bezpieczeństwa to obciążenie jest realne.
Jak działa AppArmor
AppArmor stosuje inne podejście. Zamiast oznaczać obiekty, przypisuje profile bezpieczeństwa do aplikacji na podstawie ich ścieżek plików. Profil dla /usr/sbin/nginx określa, które katalogi może odczytywać Nginx, do których portów może się podłączać i jakich uprawnień potrzebuje. Profile są plikami tekstowymi przechowywanymi w /etc/apparmor.d/.
AppArmor jest domyślnym frameworkiem MAC w systemach Ubuntu, Debian i SUSE. Jest on częścią jądra Linux od wersji 2.6.36. Aplikacje bez profilu korzystają z domyślnych uprawnień DAC systemu Linux.
AppArmor działa w dwóch trybach dla każdego profilu: Enforce (blokuje i rejestruje naruszenia) oraz Complain (rejestruje naruszenia bez blokowania). Dzięki temu praktyczne jest stopniowe wdrażanie nowych profili. Zacznij w trybie Complain, przejrzyj logi, zaostrz profil, a następnie przełącz na tryb Enforce.
Narzędzia takie jak aa-genprof i aa-logprof pomagają tworzyć profile interaktywnie, obserwując działanie aplikacji i generując reguły na podstawie jej zachowania. W porównaniu z modułami polityki SELinux składnia jest znacznie łatwiejsza do odczytania i ręcznej edycji.
Wadą jest to, że reguły oparte na ścieżkach nie podążają za plikami, gdy są one przenoszone. Twarde dowiązanie lub montowanie wiązane może teoretycznie ominąć ograniczenie oparte na ścieżce. AppArmor nie posiada również natywnej obsługi MLS/MCS, więc może izolować kontenery od hosta, ale nie od siebie nawzajem, tak jak robi to SELinux.
Porównanie obok siebie
| Funkcja | SELinux | AppArmor |
|---|---|---|
| Model kontroli dostępu | Oparty na etykietach (konteksty bezpieczeństwa) | Oparty na ścieżkach (lokalizacje w systemie plików) |
| Domyślne ustawienie | Odmowa dostępu | Zezwól na wszystko (ograniczenia według profilu) |
| Przenoszenie plików | Etykiety podążają za plikiem | Zabezpieczenia powiązane ze ścieżką |
| Obsługa MLS/MCS | Tak | Nie |
| Izolacja kontenerów | Między kontenerami oraz między kontenerem a hostem | Tylko między kontenerem a hostem |
| Format zasad | Skompilowane moduły binarne | Pliki tekstowe czytelne dla człowieka |
| Domyślne dystrybucje | RHEL, Fedora, CentOS, Rocky Linux | Ubuntu, Debian, SUSE |
| Krzywa uczenia się | Stroma | Umiarkowana |
Konfiguracja podstawowa
SELinux
Sprawdź aktualny stan:
sestatus
getenforceUruchom w trybie Permissive, aby rejestrować naruszenia bez blokowania czegokolwiek:
setenforce 0Użyj polityki „targeted” dla większości serwerów. Ogranicza ona usługi wysokiego ryzyka, takie jak serwery WWW i bazy danych, pozostawiając wszystko inne bez ograniczeń. Ustaw ją na stałe w /etc/selinux/config:
SELINUX=enforcing
SELINUXTYPE=targetedSprawdź konteksty bezpieczeństwa plików i procesów:
ls -Z /var/www/html
ps -eZ | grep httpdJeśli usługa korzysta z niestandardowego portu, zaktualizuj politykę:
semanage port -a -t ssh_port_t -p tcp 9999W przypadku niestandardowych aplikacji generujących odmowy dostępu utwórz moduł polityki na podstawie dziennika audytu:
ausearch -m avc -ts recent | audit2allow -M my_custom_policy
semodule -i my_custom_policy.ppAppArmor
Sprawdź, które profile są załadowane:
sudo aa-statusZainstaluj pakiet narzędzi, jeśli potrzebujesz narzędzi do zarządzania profilami:
sudo apt install apparmor-utilsWygeneruj profil interaktywnie podczas działania aplikacji:
sudo aa-genprof /path/to/binaryUdoskonal profil, skanując logi w poszukiwaniu naruszeń:
sudo aa-logprofPrzełącz profil między trybami:
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo aa-complain /etc/apparmor.d/usr.sbin.nginxKtórego należy używać?
Praktyczna rada dla większości administratorów: używaj tego, co jest w Twojej dystrybucji. RHEL, CentOS, Fedora i Rocky Linux mają SELinux. Ubuntu, Debian i SUSE mają AppArmor. Oba frameworki mają dopracowane narzędzia i zasady dla swoich natywnych platform. Przejście na opcję inną niż domyślna w dowolnej dystrybucji oznacza więcej pracy i mniejsze wsparcie społeczności.
Poza tym, kieruj się swoimi wymaganiami:
- Wybierz SELinux, jeśli potrzebujesz zgodności z PCI DSS, HIPAA lub DISA-STIG. Jeśli uruchamiasz wielodostępne obciążenia kontenerowe na Kubernetes lub OpenShift. Jeśli potrzebujesz izolacji między kontenerami na współdzielonych hostach. Jeśli Twoje środowisko obsługuje dane niejawne lub o różnych poziomach wrażliwości.
- Wybierz AppArmor, jeśli korzystasz z Ubuntu lub Debiana i chcesz uzyskać ochronę MAC bez dużego nakładu pracy. Jeśli Twoja konfiguracja to pojedynczy serwer lub mały klaster obsługujący standardowe usługi internetowe. Jeśli szybkie wdrożenie jest ważniejsze niż szczegółowa kontrola na poziomie etykiet.
Oba frameworki powodują minimalne obciążenie środowiska uruchomieniowego. SELinux buforuje decyzje dotyczące dostępu w swojej pamięci Access Vector Cache. Ładowanie zasad AppArmor może powodować niewielkie opóźnienie podczas uruchamiania, ale ma znikomy wpływ na działanie środowiska. W przypadku większości obciążeń hostingowych żadne z tych rozwiązań nie będzie stanowiło wąskiego gardła.
Jeśli potrzebujesz niezawodnej platformy hostingowej z pełnym dostępem do konta root w celu skonfigurowania dowolnego frameworka, serwery dedykowane lub VPS firmy FDC zapewniają kontrolę umożliwiającą skonfigurowanie SELinux lub AppArmor zgodnie z wymaganiami Twojego środowiska.

Procesy zombie w systemie Linux: Znajdź, usuń, zapobiegaj
Dowiedz się, jak identyfikować, usuwać i zapobiegać procesom zombie w systemie Linux. Polecenia, poprawki kodu i wskazówki dotyczące monitorowania dla administratorów serwerów.
15 min czytania - 19 maja 2026
Lista kontrolna zabezpieczania serwerów Linux
15 min czytania - 8 maja 2026

Masz pytania lub potrzebujesz niestandardowego rozwiązania?
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie
Elastyczne opcje
Globalny zasięg
Natychmiastowe wdrożenie