🔐 SELinux w praktyce – jak działa i dlaczego jest kluczowy dla bezpieczeństwa Linuksa
SELinux (Security-Enhanced Linux) to mechanizm kontroli dostępu opracowany przez NSA i udostępniony jako open-source. Jego zadaniem jest wdrożenie ścisłej kontroli nad procesami i plikami, dzięki czemu nawet w przypadku przejęcia aplikacji przez atakującego szkody są ograniczone do minimum. Choć wielu administratorów na początku wyłącza SELinux z powodu złożoności, to w praktyce jest to jedno z najpotężniejszych narzędzi do ochrony systemu Linux.
📌 Czym jest SELinux?
Standardowe mechanizmy uprawnień w Linuksie (rwx dla właściciela, grupy i innych) działają na zasadzie DAC (Discretionary Access Control) – użytkownik lub proces może samodzielnie decydować, co robić z plikami, które posiada. To jednak otwiera drzwi dla ataków – jeśli aplikacja zostanie przejęta, to atakujący może działać w jej zakresie uprawnień.
SELinux wprowadza MAC (Mandatory Access Control), czyli obowiązkową kontrolę dostępu, która narzuca polityki bezpieczeństwa niezależnie od właściciela pliku.
⚙️ Tryby pracy SELinux
- Enforcing – polityki bezpieczeństwa są wymuszane, każdy niedozwolony dostęp jest blokowany.
- Permissive – polityki nie są blokowane, ale logowane (przydatne do testowania).
- Disabled – SELinux jest wyłączony.
Sprawdzenie aktualnego trybu:
getenforce
Zmiana trybu tymczasowo (do restartu):
setenforce 0 # tryb Permissive
setenforce 1 # tryb Enforcing
🛡️ Jak działa kontrola w SELinux?
Każdy plik i proces w systemie ma kontekst bezpieczeństwa (security context), np.:
ls -Z /var/www/html/index.html
Może zwrócić coś takiego:
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
Tutaj najważniejsze jest httpd_sys_content_t – czyli etykieta wskazująca, że plik jest przeznaczony do obsługi przez serwer Apache. Jeśli Apache spróbuje otworzyć plik o innym kontekście, SELinux może to zablokować.

🔧 Rozwiązywanie problemów z SELinux
Częstym problemem administratorów jest sytuacja, gdy aplikacja działa poprawnie po wyłączeniu SELinux, ale przestaje w trybie Enforcing. Wtedy należy:
- Sprawdzić logi:
ausearch -m avc -ts recent
lub
journalctl | grep AVC
- Dostosować kontekst pliku:
semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?"
restorecon -Rv /var/www/myapp
- Włączyć odpowiednie boolean (SELinux ma opcje konfiguracyjne dla popularnych usług):
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on
🚀 Dlaczego warto używać SELinux?
- Ochrona przed exploitami – nawet jeśli aplikacja zostanie złamana, atakujący ma ograniczony dostęp.
- Precyzyjna kontrola – reguły można dopasować do konkretnych usług i plików.
- Standard w enterprise – dystrybucje takie jak RHEL, CentOS, Fedora mają SELinux domyślnie włączony.
- Spełnianie wymagań compliance – w wielu środowiskach certyfikowanych SELinux jest obowiązkowy.
📖 Podsumowanie
SELinux to potężne narzędzie, które wymaga nauki i praktyki, ale daje niesamowite korzyści w zakresie bezpieczeństwa. Administratorzy, którzy zamiast go wyłączać nauczą się korzystać z jego funkcji, zyskują znacznie bardziej odporne systemy.






