SELinux - Kompleksowy przewodnik
Spis treści
- Wprowadzenie do SELinux
- Architektura SELinux
- Tryby pracy
- Konteksty bezpieczeństwa
- Polityki SELinux
- Podstawowe komendy
- Booleany
- Rozwiązywanie problemów
- Najlepsze praktyki
Wprowadzenie do SELinux
Security-Enhanced Linux (SELinux) to zaawansowany system kontroli dostępu (MAC - Mandatory Access Control) zaimplementowany w jądrze Linux. Został pierwotnie opracowany przez NSA i później zintegrowany z wieloma dystrybucjami Linux.
Główne cechy:
- Kontrola dostępu na poziomie jądra systemu
- Szczegółowa polityka bezpieczeństwa
- Ochrona przed eskalacją uprawnień
- Izolacja procesów i usług
- Minimalizacja potencjalnych zagrożeń
Architektura SELinux
SELinux działa na zasadzie etykietowania (labeling) wszystkich obiektów w systemie i kontrolowania dostępu między nimi na podstawie zdefiniowanych reguł.
Komponenty:
- Kernel SELinux
- Polityki bezpieczeństwa
- Narzędzia użytkownika
- System logowania
# Sprawdzenie czy SELinux jest zainstalowany
rpm -qa | grep selinux
Tryby pracy
SELinux może działać w trzech trybach, które określają jak system reaguje na naruszenia polityki.
1. Enforcing
- Polityka jest aktywnie egzekwowana
- Naruszenia są blokowane i logowane
- Zalecany w środowisku produkcyjnym
# Włączenie trybu Enforcing
sudo setenforce 1
2. Permissive
- Polityka nie jest egzekwowana
- Naruszenia są tylko logowane
- Przydatny do debugowania i testowania
# Włączenie trybu Permissive
sudo setenforce 0
3. Disabled
- SELinux jest całkowicie wyłączony
- Brak kontroli dostępu
- Niezalecany w produkcji
# Sprawdzenie aktualnego trybu
sestatus
Konteksty bezpieczeństwa
Każdy obiekt w systemie (pliki, procesy, porty) posiada kontekst bezpieczeństwa składający się z czterech elementów:
Format kontekstu:
user:role:type:level
- user: Tożsamość SELinux
- role: Przypisana rola w systemie
- type: Typ obiektu lub domeny
- level: Poziom bezpieczeństwa (używany w MLS)
# Sprawdzenie kontekstu pliku
ls -Z /ścieżka/do/pliku
# Sprawdzenie kontekstu procesu
ps auxZ | grep httpd
Zarządzanie kontekstami:
# Zmiana kontekstu pliku
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
# Przywrócenie domyślnego kontekstu
sudo restorecon -Rv /var/www/html/
# Dodanie reguły trwałej
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/custom(/.*)?"
Polityki SELinux
SELinux oferuje różne typy polityk dostosowane do różnych przypadków użycia.
Targeted (domyślna)
- Chroni tylko wybrane usługi systemowe
- Najprostsza w konfiguracji
- Zalecana dla większości przypadków
MLS (Multi-Level Security)
- Zaawansowana kontrola dostępu
- Używana w środowiskach o wysokich wymaganiach bezpieczeństwa
- Wymaga szczegółowej konfiguracji
# Sprawdzenie aktywnej polityki
sestatus | grep "Loaded policy"
# Lista dostępnych polityk
semodule -l
Podstawowe komendy
Sprawdzanie statusu i konfiguracji:
# Status SELinux
sestatus
# Aktywne porty
semanage port -l
# Lista modułów polityki
semodule -l
Zarządzanie kontekstami:
# Zmiana kontekstu
chcon -t httpd_sys_content_t plik.html
# Przywracanie domyślnych kontekstów
restorecon -Rv /ścieżka
# Dodawanie reguł trwałych
semanage fcontext -a -t httpd_sys_content_t "/custom/path(/.*)?"
Booleany
Booleany to przełączniki umożliwiające szybką modyfikację zachowania polityki SELinux.
# Lista wszystkich booleanów
getsebool -a
# Sprawdzenie konkretnego booleana
getsebool httpd_enable_homedirs
# Włączenie booleana (tymczasowo)
setsebool httpd_enable_homedirs on
# Włączenie booleana (trwale)
setsebool -P httpd_enable_homedirs on
Popularne booleany:
httpd_enable_homedirs
: Dostęp Apache do katalogów domowychftpd_anon_write
: Zapis przez anonimowego FTPhttpd_can_network_connect
: Połączenia sieciowe dla Apache
Rozwiązywanie problemów
Analiza logów:
# Przeszukiwanie logów audytu
ausearch -m AVC -ts recent
# Analiza naruszeń
audit2why < /var/log/audit/audit.log
# Generowanie modułu polityki
audit2allow -a -M mymodule
Typowe problemy:
- Nieprawidłowe konteksty plików
- Brakujące porty w polityce
- Wymagane booleany są wyłączone
- Konflikty z innymi mechanizmami bezpieczeństwa
Rozwiązywanie:
# Sprawdzenie kontekstów
ls -Z
# Dodanie portu
semanage port -a -t http_port_t -p tcp 8080
# Włączenie wymaganego booleana
setsebool -P httpd_can_network_connect on
Najlepsze praktyki
-
Używaj trybu Enforcing
- Zawsze w środowisku produkcyjnym
- Permissive tylko do debugowania
-
Regularnie monitoruj logi
ausearch -m AVC -ts recent
-
Twórz własne moduły polityki
audit2allow -a -M custom_policy semodule -i custom_policy.pp
-
Dokumentuj zmiany
- Zapisuj wszystkie modyfikacje kontekstów
- Przechowuj listę własnych modułów polityki
-
Automatyzuj zarządzanie
- Używaj narzędzi do zarządzania konfiguracją
- Twórz skrypty do typowych operacji
-
Regularne aktualizacje
# Aktualizacja polityk yum update selinux-policy
Przykładowa automatyzacja:
#!/bin/bash
# Skrypt do konfiguracji kontekstów dla nowej aplikacji web
# Ustawienie kontekstów
semanage fcontext -a -t httpd_sys_content_t "/var/www/app(/.*)?"
restorecon -Rv /var/www/app
# Włączenie wymaganych booleanów
setsebool -P httpd_can_network_connect on
setsebool -P httpd_can_network_connect_db on
# Sprawdzenie konfiguracji
sestatus
getsebool -a | grep httpd
ls -Z /var/www/app