Co to jest SELinux i jak może zwiększyć bezpieczeństwo systemu Linux?
Jeśli chodzi o zabezpieczanie serwerów Linux, większość administratorów myśli o podstawach: aktualizowaniu pakietów, konfigurowaniu zapór sieciowych, ograniczaniu dostępu SSH. Jednak jeden z najpotężniejszych mechanizmów bezpieczeństwa jest często pomijany – SELinux (Security-Enhanced Linux). To nie tylko dodatek; to struktura bezpieczeństwa na poziomie jądra zaprojektowana w celu powstrzymania włamań przed ich eskalacją. Zarówno w przypadku serwerów VPS, jak i serwerów dedykowanych, SELinux może oznaczać różnicę między drobnym incydentem a pełnym naruszeniem systemu.
Czym jest SELinux?
SELinux to moduł bezpieczeństwa jądra Linux, który wymusza obowiązkową kontrolę dostępu (MAC).
- W tradycyjnym modelu DAC (Discretionary Access Control) dostęp jest określany przez właścicieli plików, a root ma nieograniczoną władzę.
- W ramach MAC (SELinux) dostęp jest regulowany przez ogólnosystemowe zasady bezpieczeństwa. Nawet root podlega ograniczeniom.
Początkowo opracowany przez NSA we współpracy z Red Hat, SELinux został zintegrowany z jądrem Linux na początku 2000 roku i jest obecnie standardem w dystrybucjach korporacyjnych, takich jak RHEL, CentOS, Fedora, AlmaLinux i Rocky Linux.
Problem: gdzie tradycyjne zabezpieczenia Linuksa zawodzą
Klasyczny model uprawnień UNIX (DAC) ma krytyczne słabości:
- Root jest wszechmocny. Każdy exploit, który eskaluje do roota, naraża na szwank cały system.
- Naruszenie usługi = naruszenie systemu. Zhakowany moduł Apache lub skrypt PHP może uzyskać dostęp do poufnych danych.
- Nowoczesne wektory ataku omijają DAC. Powszechne są powłoki internetowe, exploity eskalacji uprawnień i ucieczki z kontenerów.
Rzeczywisty scenariusz:
Luka w systemie CMS umożliwia atakującemu uruchomienie powłoki sieciowej. Bez SELinux atakujący może odczytać config.php, wyodrębnić dane uwierzytelniające bazy danych i naruszyć cały stos. Dzięki SELinux proces serwera WWW (httpd_t) jest ograniczony i nie może uzyskać dostępu do plików poza wyznaczoną domeną.
Jak działa SELinux
Każdy proces, plik, port i gniazdo ma kontekst bezpieczeństwa (etykietę).
Zasady definiują, które konteksty mogą wchodzić w interakcje.
Przykład:
- Apache działa w domenie httpd_t.
- Pliki strony internetowej są oznaczone jako httpd_sys_content_t.
- Zasady zezwalają httpd_t na odczyt tylko plików httpd_sys_content_t.
Jeśli Apache próbuje odczytać /etc/shadow (shadow_t), jądro odrzuca żądanie i rejestruje naruszenie.
Tryby działania
- Egzekwowanie: zasady są egzekwowane, naruszenia są blokowane.
- Permissive: naruszenia są rejestrowane, ale nie blokowane (przydatne do testowania).
- Wyłączony: SELinux jest wyłączony (niezalecane).
Najlepsza praktyka: zacznij od Permissive, przejrzyj logi, dostosuj zasady, a następnie przejdź do Enforcing dla produkcji.
Dlaczego SELinux ma znaczenie dla hostingu i DevOps
- Izolacja procesów: ogranicza szkody w przypadku naruszenia pojedynczej usługi.
- Egzekwowanie najniższych uprawnień: nawet root nie może ominąć ograniczeń polityki.
- Kryminalistyka i widoczność: wszystkie odrzucone działania są rejestrowane (/var/log/audit/audit.log).
- Bezpieczeństwo kontenerów: zapobiega wydostawaniu się kontenerów Docker/Podman poza ich granice.
- Zgodność: wymagana w środowiskach regulowanych (PCI DSS, HIPAA, wdrożenia wojskowe).
Typy zasad
- Targeted (domyślnie): ogranicza tylko usługi sieciowe (Apache, Nginx, Postfix, Dovecot).
- Ścisłe: stosuje MAC do wszystkich procesów.
- MLS/MCS: zaawansowane zasady dla wielopoziomowych lub rządowych zabezpieczeń.
Dla większości obciążeń VPS i serwerów dedykowanych, Targeted Policy stanowi najlepszą równowagę między użytecznością i ochroną.
Praktyczne przykłady
Sprawdzanie statusu SELinux
Przywracanie kontekstów plików po przeniesieniu plików internetowych
Lista etykiet zabezpieczeń plików
Zezwalanie na połączenia wychodzące usług internetowych (np. wywołania API)
Przeglądanie odrzuconych działań w dziennikach
Wnioski
SELinux to coś więcej niż dodatkowa funkcja bezpieczeństwa; to fundamentalna struktura, która na nowo definiuje sposób, w jaki Linux wymusza kontrolę dostępu. Ograniczając procesy, zmniejszając wpływ luk w zabezpieczeniach i zapewniając szczegółowe ścieżki audytu, SELinux przekształca system Linux w znacznie bardziej odporne środowisko. Chociaż wymaga starannej konfiguracji i zrozumienia, korzyści w zakresie bezpieczeństwa, jakie wnosi do nowoczesnych infrastruktur serwerowych, sprawiają, że jest to niezbędny element każdego wdrożenia produkcyjnego.