SELinux (Security-Enhanced Linux) to mechanizm obowiązkowej kontroli dostępu (Mandatory Access Control, MAC) wbudowany w jądro Linuksa. W skrócie: nakłada na system dodatkową warstwę reguł, które decydują, co dany proces może zrobić — niezależnie od tradycyjnych uprawnień plików (rwx) i od tego, czy działa on jako root. Powstał z kodu rozwijanego pierwotnie przez NSA i jest domyślnie włączony w Fedorze, RHEL oraz pochodnych (CentOS Stream, Rocky, Alma).
Jak to działa
W klasycznym modelu DAC (Discretionary Access Control) o dostępie decyduje właściciel pliku. Problem: jeśli root albo proces działający z jego uprawnieniami zostanie przejęty, atakujący ma w praktyce wszystko. SELinux dokłada drugą bramkę. Każdy plik, proces, port i gniazdo dostaje etykietę zwaną kontekstem bezpieczeństwa (np. system_u:object_r:httpd_sys_content_t:s0). Polityka mówi, który typ (type) może wchodzić w interakcję z którym — i tylko to jest dozwolone, reszta leci do kosza. To podejście „domyślnie zabronione”.
Najczęściej spotkasz type enforcement: serwer Apache działa w domenie httpd_t i ma prawo czytać pliki oznaczone httpd_sys_content_t, ale nie sięgnie do /home ani nie otworzy losowego portu. Nawet jeśli ktoś znajdzie dziurę w Apache, SELinux ogranicza zasięg szkód.
Przykład z praktyki
Klasyk: przenosisz pliki strony do /var/www/html komendą mv, a Apache zwraca 403. Uprawnienia wyglądają dobrze, więc panikujesz. Sprawdzasz tryb: getenforce mówi Enforcing. Problem w tym, że mv zachowuje stary kontekst pliku. Naprawiasz to przywracając domyślne etykiety: restorecon -Rv /var/www/html. Logi odmów znajdziesz w /var/log/audit/audit.log, a narzędzie audit2allow podpowie, jaką regułę dodać. Tryb przełączasz przez setenforce 0 (permissive) lub setenforce 1 (enforcing).
Częste błędy i mity
- „Nie działa? Wyłącz SELinux.” — najgorsza możliwa rada. Tryb
Permissivetylko loguje odmowy zamiast ich egzekwować, więc świetnie nadaje się do diagnozy. Pełne wyłączenie zostaw na ostateczność. - Mylenie kontekstów z uprawnieniami —
chmod 777nie pomoże, jeśli problemem jest etykieta. To dwa niezależne systemy. - Ręczne grzebanie w plikach polityki — od zmian używaj
semanage(np.semanage fcontext) isetsebooldo przełączania flag logicznych, zamiast pisać moduły od zera.
Pojęcia powiązane: MAC i DAC, AppArmor (alternatywa stosowana w Ubuntu i SUSE), capabilities, audit, namespaces, oraz LSM (Linux Security Modules) — interfejs jądra, na którym SELinux się opiera.