 Autor: [Piotr Wasilewski](/autorzy/piotr-wasilewski) Architekt rozwiązań chmurowych · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  SELinux vs AppArmor

# SELinux vs AppArmor — porównanie MAC na Linuksie

Opublikowano: 9 kwietnia 2026 · Kategoria: Bezpieczeństwo

Klasyczny model uprawnień w Uniksie (użytkownik, grupa, inni — tzw. DAC, Discretionary Access Control) opiera się na założeniu, że właściciel pliku decyduje o dostępie. To nie wystarcza w środowiskach produkcyjnych, gdzie proces nginx działający jako użytkownik www-data może odczytać wszystko, do czego ma dostęp ten użytkownik — także pliki konfiguracyjne innych aplikacji. Mandatory Access Control (MAC) dodaje sztywne reguły narzucone przez administratora, których nie może obejść nawet root. Na Linuksie są dwa dominujące systemy MAC: SELinux i AppArmor. Ten artykuł pokazuje, jak działają, czym się różnią, i który wybrać dla swojego VPS.

## Czym jest MAC i dlaczego różni się od uprawnień POSIX

W klasycznym modelu POSIX (chmod, chown) to właściciel pliku ustawia uprawnienia — to DAC. MAC działa równolegle: nawet jeśli proces ma prawa POSIX do pliku, polityka MAC może mu zabronić dostępu. Kluczowa różnica jest taka, że polityki MAC pisze administrator (lub dystrybucja) i użytkownik nie może ich zmienić. W praktyce oznacza to, że nginx skompromitowany przez exploit nie przeczyta `/etc/shadow` — nawet jeśli udałoby mu się eskalować do roota, bo polityka MAC nie pozwala procesowi z typu `httpd_t` dotykać plików typu `shadow_t`.

## SELinux — Type Enforcement i etykiety

SELinux opiera się na koncepcie **Type Enforcement**: każdy obiekt (plik, katalog, port, proces) ma etykietę składającą się z user, role, type i poziomu (MLS). Polityki decydują, jaki typ procesu może wchodzić w jaką interakcję z jakim typem obiektu. Dodatkowo SELinux wspiera **RBAC** — role przypisywane użytkownikom, które ograniczają dostępne typy procesów.

\# Sprawdź status SELinux
sestatus

# Podgląd etykiet plików (kolumna 4)
ls -Z /var/www/html/index.html
# -rw-r--r--. root root unconfined\_u:object\_r:httpd\_sys\_content\_t:s0 index.html

# Podgląd etykiet procesów
ps -eZ | grep nginx

# Tryby pracy
sudo setenforce 0          # permissive (tylko logi, nie blokuje)
sudo setenforce 1          # enforcing (blokuje naruszenia)
getenforce                 # pokaz aktualny tryb

# Trwala zmiana w /etc/selinux/config
# SELINUX=enforcing | permissive | disabled

# Analiza odrzucen (audit log)
sudo ausearch -m AVC -ts recent
sudo sealert -a /var/log/audit/audit.log

# Zmiana etykiety pliku (np. po przeniesieniu katalogu www)
sudo chcon -R -t httpd\_sys\_content\_t /var/www/newsite
sudo restorecon -Rv /var/www/newsite

## AppArmor — profile ścieżkowe

AppArmor podchodzi do problemu inaczej: zamiast etykietować pliki, pisze się profile dla konkretnych binarek identyfikowanych po ścieżce. Profil dla `/usr/sbin/nginx` określa, jakie pliki może czytać, zapisywać, wykonywać, oraz jakie capabilities (np. net\_bind\_service) ma przydzielone. Składnia jest prostsza niż SELinux, a debugging czytelniejszy — ale jest mniej precyzyjna, bo opiera się na ścieżkach (symlinki i montowania mogą komplikować obraz).

\# Status AppArmor
sudo aa-status

# Lista zaladowanych profili
sudo apparmor\_status | grep -E "enforce|complain"

# Profile sa w /etc/apparmor.d/
ls /etc/apparmor.d/

# Tryby pracy profilu
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx   # enforce (blokuje)
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx  # complain (tylko logi)
sudo aa-disable /etc/apparmor.d/usr.sbin.nginx   # wylacz profil

# Przeladowanie po edycji
sudo systemctl reload apparmor
sudo apparmor\_parser -r /etc/apparmor.d/usr.sbin.nginx

# Generowanie profilu z obserwacji (uruchamiasz aplikacje i logujesz uzycie)
sudo aa-genprof /usr/sbin/myapp

# Analiza odrzucen w dmesg / journald
sudo journalctl -k | grep -i apparmor
sudo dmesg | grep DENIED

## Porównanie — kiedy wybrać który system

Kryterium

SELinux

AppArmor

Model polityki

Type Enforcement + RBAC + etykiety

Profile ścieżkowe per binarka

Dystrybucje domyślne

RHEL, CentOS, Rocky, AlmaLinux, Fedora

Ubuntu, Debian, openSUSE, SUSE

Granularność

Bardzo wysoka (każdy inode ma etykietę)

Średnia (profile per binarka)

Krzywa uczenia

Stroma — wiele pojęć (types, roles, MLS)

Łagodna — czytelna składnia profili

Debugging

audit.log + sealert + ausearch

dmesg + journalctl + aa-logprof

Integracja z kontenerami

Dobra (Podman, CRI-O, Docker RHEL)

Dobra (Docker Ubuntu, LXD)

Wydajność

Bardzo dobra (cache AVC w kernelu)

Bardzo dobra (minimalny narzut)

Typowy use-case

Produkcyjny serwer RHEL, compliance (PCI-DSS)

Ubuntu VPS, stacki Snap, Docker host

## Troubleshooting — co robić, gdy aplikacja nie działa

Najczęstszy objaw problemów z MAC: aplikacja startuje, ale zwraca błędy typu _Permission denied_ — mimo że POSIX-owe chmod i chown wyglądają poprawnie. To klasyczny sygnał, że polityka MAC blokuje dostęp. Algorytm diagnostyki:

1.  **Zweryfikuj, że MAC jest winny** — przełącz w tryb permissive ( `setenforce 0` lub `aa-complain`) i sprawdź, czy problem znika. Jeśli tak — to MAC. Jeśli nie — szukaj gdzie indziej (uprawnienia, SELinux booleans, namespaces).
2.  **Znajdź odrzucenie w logach** — SELinux: `ausearch -m AVC -ts recent`, AppArmor: `journalctl -k | grep DENIED`. Logi pokażą, który proces chciał zrobić co i z jakim typem/ścieżką.
3.  **Napraw u źródła, nie wyłączaj MAC** — SELinux: `restorecon` po przeniesieniu plików, `setsebool` do włączenia typowych zachowań (np. `httpd_can_network_connect`), lub `audit2allow` do wygenerowania modułu polityki. AppArmor: dopisz ścieżkę do profilu, przeładuj parser.
4.  **Nigdy nie zostawiaj trybu permissive na stałe** — to wyłączenie ochrony. Po naprawie wróć do enforcing i monitoruj logi przez 24-48h.

## Najczęstsze pytania

Czym różni się SELinux od AppArmor? +

SELinux (Security-Enhanced Linux) używa etykiet (labels) przypisanych do każdego pliku, procesu i portu — decyzje o dostępie opierają się na Type Enforcement i rolach (RBAC). AppArmor używa profili ścieżkowych (path-based) — reguły pisze się dla konkretnej binarki, np. /usr/sbin/nginx. SELinux jest bardziej granularny ale trudniejszy w debugowaniu, AppArmor jest prostszy ale mniej precyzyjny.

Które dystrybucje Linux używają SELinux, a które AppArmor? +

SELinux jest domyślny na Red Hat Enterprise Linux, CentOS, Rocky Linux, AlmaLinux i Fedora. AppArmor jest domyślny na Ubuntu, Debian, openSUSE i SUSE Linux Enterprise. Oba można zainstalować zamiennie, ale nie powinny działać jednocześnie — wybierz jeden system MAC i trzymaj się go.

Jak tymczasowo wyłączyć SELinux do debugowania? +

Do tymczasowego wyłączenia trybu enforcing użyj: sudo setenforce 0 (przechodzi w tryb permissive — SELinux tylko loguje naruszenia). Powrót: sudo setenforce 1. Trwałe wyłączenie w /etc/selinux/config (SELINUX=disabled) wymaga reboot i nie jest zalecane — zamiast tego zostaw tryb permissive i analizuj audit log.

Czy MAC (SELinux/AppArmor) jest potrzebny na VPS z kilkoma stronami? +

Tak, jeśli hostujesz kod z zewnętrznych źródeł (WordPress z pluginami, Laravel, Node.js). MAC dodaje warstwę ochrony na wypadek exploita w aplikacji — nawet jeśli atakujący przejmie proces nginx/PHP-FPM, profil AppArmor lub polityka SELinux uniemożliwi mu czytanie /etc/shadow czy modyfikację /etc/passwd. To defense-in-depth, nie zamiennik fail2ban czy UFW.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z rootem — pełna kontrola nad SELinux/AppArmor i hardeningiem

VPS + root

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikr.us

Budżetowy VPS idealny do nauki MAC na Debian/Ubuntu

Dev/Test

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

ProSerwer.pl

Polski VPS pod produkcję z własną polityką bezpieczeństwa

Polski VPS

[Aktywuj rabat →](/out/proserwer-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/proserwer)

## Powiązane strony

-   [Bezpieczeństwo VPS — kompletny checklist](/baza-wiedzy/bezpieczenstwo-vps-checklist)
-   [Fail2Ban — ochrona przed brute-force](/baza-wiedzy/fail2ban-konfiguracja-vps)
-   [UFW firewall — konfiguracja na VPS](/baza-wiedzy/ufw-firewall-konfiguracja-vps)
-   [Wszystkie artykuły](/baza-wiedzy/)