SELinux

System obowiązkowej kontroli dostępu (MAC) wymuszający polityki bezpieczeństwa niezależnie od uprawnień plików. Domyślny w Fedorze i RHEL.

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 Permissive tylko loguje odmowy zamiast ich egzekwować, więc świetnie nadaje się do diagnozy. Pełne wyłączenie zostaw na ostateczność.
  • Mylenie kontekstów z uprawnieniamichmod 777 nie 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) i setsebool do 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.