1. Co to jest SELinux i po co jest potrzebny?
SELinux (Security-Enhanced Linux) — to moduł bezpieczeństwa, który wzmacnia tradycyjny model zarządzania prawami dostępu, dodając koncepcję kontroli mandatowej. Pozwala administratorowi skonfigurować bardziej restrykcyjne ograniczenia dla użytkowników, a nawet procesów, aby zminimalizować potencjalne szkody wynikające z możliwych ataków.
Co czyni go wyjątkowym?
Wyobraź sobie, że twój system to dom. Tradycyjne prawa dostępu (rwx dla użytkownika, grupy i pozostałych) to jak klucze do zamków w drzwiach. Ale co, jeśli ktoś wyłamie drzwi? SELinux staje się drugą linią obrony, wzmacniając ochronę za pomocą zasad zachowania: "Hej, nawet jeśli jesteś w środku, nie możesz wchodzić do łazienki!"
Główne zadania SELinux:
- Ochrona przed nieautoryzowanym dostępem dla procesów i plików.
- Zmniejszenie szkód wynikających z ataków, nawet jeśli proces został przejęty.
- Zasady "domyślnej ochrony" (wszystko jest zabronione, z wyjątkiem tego, co jest dozwolone).
Tryby pracy SELinux
SELinux może działać w trzech trybach:
- Enforcing — aktywny, stosuje politykę bezpieczeństwa i blokuje naruszające procesy.
- Permissive — jedynie zapisuje naruszenia w dziennikach, ale nie blokuje działań.
- Disabled — całkowicie wyłączony
SELinux w trybie enforcing przypomina surowego starszego brata dla twojego systemu. Permissive — to młodszy brat, który tylko narzeka, ale nic nie robi.
2. Sprawdzanie statusu SELinux
Na początek zobaczmy, czy SELinux jest aktywny i w jakim trybie działa. Do tego mamy kilka wygodnych komend.
Komenda getenforce
Ta komenda po prostu powie Ci, jaki tryb jest używany: Enforcing, Permissive, lub Disabled.
$ getenforce
Enforcing
Jeśli w wyniku pojawi się Disabled, to znaczy, że SELinux jest wyłączony — i to oznacza, że aby go włączyć, będziesz musiał trochę popracować, ale o tym później.
Komenda sestatus
Bardziej szczegółowy raport o statusie SELinux można uzyskać za pomocą tej komendy. Pokaże ona aktualny stan, aktywny tryb i używaną politykę.
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Tu możesz zobaczyć:
- enabled/disabled — czy SELinux jest włączony.
- current mode — aktywny tryb (enforcing, permissive).
- loaded policy name — jaka polityka jest załadowana. Na przykład, "targeted" oznacza, że SELinux kontroluje tylko kluczowe procesy.
3. Przełączanie trybów SELinux
Aby zmienić aktualny tryb pracy SELinux, używa się polecenia setenforce.
Przełączenie w tryb permissive
Jeśli chcesz tymczasowo "poluzować smycz" SELinux, możesz włączyć tryb permissive.
$ sudo setenforce 0
Teraz SELinux będzie tylko rejestrować naruszenia, ale ich nie blokować. Możesz sprawdzić nowe ustawienie za pomocą polecenia getenforce:
$ getenforce
Permissive
Przełączenie z powrotem w tryb enforcing
Gdy zdecydujesz się ponownie włączyć ścisłą kontrolę, wykonaj:
$ sudo setenforce 1
I oczywiście sprawdź rezultat:
$ getenforce
Enforcing
Ta zmiana jest stosowana na bieżąco, ale tylko do następnego restartu systemu.
4. Włączanie SELinux
Jeśli SELinux był wyłączony, musisz wprowadzić zmiany w pliku konfiguracyjnym. SELinux jest zarządzany przez plik /etc/selinux/config.
Sprawdzanie bieżącego pliku konfiguracyjnego
Zobaczmy, co jest tam ustawione. Użyj dowolnego edytora tekstu, na przykład nano:
$ sudo nano /etc/selinux/config
Zobaczysz coś w tym stylu:
# This file controls the state of SELinux on the system.
SELINUX=disabled
SELINUXTYPE=targeted
Przełączanie SELinux do aktywnego stanu
Aby włączyć SELinux, zmień linię SELINUX=disabled na SELINUX=enforcing lub SELINUX=permissive.
Oto przykład pliku po zmianach:
# This file controls the state of SELinux on the system.
SELINUX=enforcing
SELINUXTYPE=targeted
Po edycji zapisz plik i zrestartuj system:
$ sudo reboot
Po ponownym uruchomieniu możesz sprawdzić status za pomocą sestatus, aby upewnić się, że SELinux jest aktywny.
5. Analiza kontekstów SELinux
Czym są konteksty?
Konteksty to etykiety, które SELinux używa do zarządzania dostępem. Każdy plik, proces i użytkownik ma swój własny kontekst.
Możesz zobaczyć konteksty plików za pomocą polecenia ls -Z. Oto przykład:
$ ls -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
Co to oznacza?
- unconfinedu — użytkownik SELinux.
- objectr — typ obiektu.
- httpdsyscontent_t — typ dostępu (w tym przypadku związany z serwerem WWW).
- s0 — poziom bezpieczeństwa.
Zmiana kontekstu
Jeśli SELinux blokuje działanie twojej aplikacji, być może trzeba zmienić kontekst pliku. Użyj polecenia chcon:
$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html
To polecenie tymczasowo zmienia typ kontekstu pliku. Jednak po ponownym uruchomieniu zmiany mogą zniknąć, dlatego dla ustawień stałych lepiej zmodyfikować politykę SELinux (o tym później).
6. Przykład pracy z SELinux
Zobaczmy przykład. Jesteś administratorem serwera, który chce uruchomić serwer www, ale SELinux blokuje dostęp do plików w katalogu /var/www/html.
Kroki:
Sprawdź status SELinux:
$ sestatusUpewnij się, że SELinux jest włączony i działa w trybie enforcing.
Sprawdź konteksty plików:
$ ls -Z /var/www/htmlJeśli kontekst jest nieprawidłowy, zmień go:
$ sudo chcon -t httpd_sys_content_t /var/www/html/*Sprawdź działanie serwera www.
7. Typowe błędy i problemy
SELinux jest wyłączony, a Ty tego nie zauważasz. Zawsze sprawdzaj status przy użyciu
sestatus. Wielu administratorów zapomina włączyć SELinux po instalacji systemu."Dlaczego moja usługa nie działa?" SELinux blokuje dostęp. Użyj
audit.logdo analizy:$ sudo cat /var/log/audit/audit.log | grep deniedNie zapisują się zmiany kontekstu. Używaj nie
chcon, ale poleceń do trwałych zmian, takich jaksemanage.
Nauka SELinux jest jak przygotowanie do maratonu: na początku może być trudno, ale z czasem zrozumiesz, jak to narzędzie może znacznie poprawić bezpieczeństwo systemu. Wykorzystaj tę wiedzę, aby być tym adminem, którego nie złamie nawet najbardziej zaawansowany haker.
GO TO FULL VERSION