SELinux (Security-Enhanced Linux) to zaawansowany system kontroli dostępu stosowany w systemach Linux, zaprojektowany w celu zwiększenia bezpieczeństwa poprzez ograniczanie uprawnień procesów i użytkowników. W przeciwieństwie do tradycyjnego modelu uprawnień POSIX, który określa tylko podstawowe zasady dostępu, SELinux wprowadza dodatkową, znacznie bardziej szczegółową warstwę zabezpieczeń, opartą na politykach bezpieczeństwa i kontroli przepływu informacji.
Technologia została opracowana przez NSA (National Security Agency) i udostępniona jako oprogramowanie open source. Dziś SELinux jest stosowany w wielu profesjonalnych dystrybucjach Linuxa, m.in. w Red Hat Enterprise Linux, CentOS, Fedora oraz w systemie Android.
Po co powstał SELinux
Tradycyjny model bezpieczeństwa Linuxa zakłada, że procesy mają takie uprawnienia, jakie posiada użytkownik, który je uruchomił. Jeśli atakujący przejmie kontrolę nad procesem z szerokimi uprawnieniami, może zrobić praktycznie wszystko, co właściciel tego procesu.
SELinux rozwiązuje ten problem poprzez zasadę najmniejszego uprzywilejowania i wprowadza kontrolę dostępu na poziomie systemowym, niezależną od konta użytkownika.
Oznacza to, że nawet proces działający jako root może być restrykcyjnie ograniczony zgodnie z polityką SELinux.
Jak działa SELinux
SELinux funkcjonuje w oparciu o polityki bezpieczeństwa, które definiują, co dany proces może i czego nie może zrobić. Każdy proces i każdy obiekt systemowy (plik, katalog, port, urządzenie, interfejs sieciowy) ma przypisany kontekst bezpieczeństwa, który składa się z kilku elementów, m.in.:
- typ,
- użytkownik,
- rola,
- domena.
Decyzje o dostępie podejmowane są na podstawie relacji między tymi kontekstami.
SELinux kontroluje takie operacje jak:
- odczyt i zapis plików,
- dostęp do portów i gniazd sieciowych,
- uruchamianie programów,
- komunikację międzyprocesową (IPC),
- działania usług systemowych.
Jeżeli polityka nie przewiduje danego działania, proces otrzymuje odmowę dostępu nawet wtedy, gdy posiada uprawnienia root.
Tryby działania SELinux
SELinux może działać w trzech trybach:
- Enforcing – polityki bezpieczeństwa są aktywnie egzekwowane; nieautoryzowane działania są blokowane.
- Permissive – działania nie są blokowane, ale SELinux rejestruje, które z nich byłyby zablokowane. Przydatne podczas konfiguracji i debugowania.
- Disabled – SELinux jest wyłączony i nie kontroluje dostępu.
Tryby Enforcing i Permissive różnią się zachowaniem, ale nie konfiguracją polityk.
SELinux w praktyce
SELinux jest trudniejszy w konfiguracji niż zwykłe mechanizmy uprawnień, ale pozwala na ochronę systemu przed całymi klasami ataków, takimi jak:
- eskalacja uprawnień,
- przejęcie usług sieciowych,
- dostęp procesów do nieprzeznaczonych dla nich zasobów,
- szkody wyrządzone przez złośliwe oprogramowanie działające z uprawnieniami root.
Z tego powodu jest chętnie stosowany w środowiskach serwerowych, systemach korporacyjnych i rozwiązaniach wysokiego bezpieczeństwa.
Android również korzysta z SELinux, ponieważ silnie izoluje aplikacje od siebie oraz od systemu.
Wady i ograniczenia SELinux
SELinux jest potężny, ale ma też swoje trudności:
- wymaga dużej wiedzy i zrozumienia polityk bezpieczeństwa,
- może powodować problemy w niepoprawnie skonfigurowanych systemach,
- logi SELinux bywają trudne w interpretacji,
- w środowiskach desktopowych bywa uznawany za zbyt restrykcyjny.
Z powodu złożoności część dystrybucji Linuxa oferuje alternatywy, np. AppArmor, który jest prostszy w konfiguracji.
SELinux to zaawansowany system bezpieczeństwa, który zapewnia granularną kontrolę dostępu w systemach Linux. Realizuje zasadę najmniejszego uprzywilejowania, ograniczając nawet procesy działające z uprawnieniami root. Dzięki temu zwiększa odporność systemu na ataki, izoluje aplikacje i minimalizuje skutki potencjalnych naruszeń bezpieczeństwa. Choć jest wymagający w konfiguracji, pozostaje jednym z najpotężniejszych narzędzi zabezpieczających w świecie open source.