1. Preambuła
Security-Enhanced Linux (SELinux) to moduł jądra Linuksa oraz podsystem bezpieczeństwa Linuxa.
SELinux został głównie opracowany przez NSA. Jądra Linuksa 2.6 i wyższe już integrują moduły SELinux.
SELinux jest bardzo złożony i zawiera wiele rzeczy koncepcyjnych, których trudno się nauczyć. Wielu administratorów systemów Linux wyłączyło SELinux, ponieważ uważają go za problematyczne.
Jeśli opanujesz SELinux i używasz go poprawnie, myślę, że cały system może praktycznie osiągnąć poziom "niezniszczalności" (pamiętaj, że nie ma absolutnego bezpieczeństwa).
Opanowanie podstawowych koncepcji SELinux oraz prostych metod konfiguracji jest obowiązkowym kursem dla każdego administratora systemu Linux.
Ten artykuł opiera się na CentOS 7.4.1708.
Ten artykuł jest czysto osobistą wymianą doświadczeń edukacyjnych, błędy są nieuniknione, tylko do odniesienia! Jeśli znajdziesz błąd, proszę, zwróć na niego uwagę, bardzo dziękuję!
2. Rola SELinux i mechanizm zarządzania uprawnieniami
2.1 Rola SELinux
Główną funkcją SELinux jest minimalizacja zasobów, do których mogą uzyskać dostęp procesy usługowe w systemie (zasada najmniejszych uprawnień).
Wyobraź sobie, że jeśli usługa sieciowa działająca jako root ma lukę 0day, hakerzy mogą ją wykorzystać, by robić co chcą na twoim serwerze jako root. Czy to nie jest straszne?
SELinux jest tutaj, by rozwiązać ten problem.
2.2 DAC
W systemie operacyjnym, który nie korzysta z SELinux, czynnikiem decydującym o dostępie do zasobu jest to, czy zasób posiada uprawnienia odpowiedniego użytkownika (czytanie, zapis, wykonywanie).
Dopóki proces uzyskujący dostęp do tego zasobu spełnia powyższe warunki, można do niego uzyskać dostęp.
Najbardziej śmiertelnym problemem jest to, że użytkownicy root nie podlegają żadnym regulacjom, a dostęp do zasobów w systemie można uzyskać bez ograniczeń.
Główną częścią tego mechanizmu zarządzania uprawnieniami jest użytkownik, znany również jako autonomiczna kontrola dostępu (DAC).
2.3 MAC
W systemie operacyjnym wykorzystującym SELinux czynniki decydujące o dostępie do zasobu to nie tylko powyższe czynniki, ale także to, czy każdy typ procesu ma dostęp do określonego typu zasobu.
W ten sposób, nawet jeśli proces działa jako root, konieczne jest określenie rodzaju procesu oraz typów zasobów, do których można uzyskać dostęp, zanim zdecydujemy o zezwoleniu na dostęp do zasobu. Przestrzeń aktywna procesu może być również skompresowana do minimum.
Nawet proces serwisowy działający jako root zazwyczaj ma dostęp tylko do potrzebnych mu zasobów. Nawet jeśli program jest podatny na ataki, zakres jego wpływu ogranicza się do zasobów, do których ma dostęp. Bezpieczeństwo zostało znacznie zwiększone.
Główną częścią tego mechanizmu zarządzania uprawnieniami jest proces, znany również jako obowiązkowa kontrola dostępu (MAC).
MAC dzieli się na dwa sposoby: jeden nazywa się trybem Category Security (MCS), a drugi trybem Multi-Level Security (MLS).
Następujące akcje są w trybie MCS.
2.4 Porównanie DAC i MAC
Oto zdjęcie do zilustrowania.
Jak widać, w trybie DAC, dopóki odpowiadający katalog ma uprawnienia odpowiedniego użytkownika, można do niego uzyskiwać. W trybie MAC jest również ograniczony przez zakres katalogów, do których procesy mogą mieć dostęp.
3. Podstawowe koncepcje SELinux
3.1 Temat
Można to całkowicie utożsamić z procesem.
Uwaga: Dla ułatwienia zrozumienia, o ile nie zaznaczono inaczej, proces jest traktowany jako główna część poniżej.
3.2 Cel
Zasoby dostępne przez dyrektora. Mogą to być pliki, katalogi, porty, urządzenia itd.
Uwaga: Dla ułatwienia zrozumienia, o ile nie zaznaczono inaczej, następujące dokumenty lub katalogi są traktowane jako obiekty.
3.3 Polityka i reguły
W systemie zazwyczaj znajduje się duża liczba plików i procesów, a aby zaoszczędzić czas i narzut, zwykle selektywnie regulujemy tylko niektóre procesy.
A które procesy muszą być regulowane i jak je kontrolować, decyduje polityka.
W polisie jest wiele zasad. Niektóre reguły można włączyć lub wyłączyć w zależności od potrzeby (dalej nazywane regułami boolowskimi).
Zasady są modułowe i rozszerzalne. Podczas instalacji nowej aplikacji aplikacja może dodawać reguły, dodając nowe moduły. Użytkownicy mogą także ręcznie dodawać lub odejmować reguły.
W systemie CentOS 7 istnieją trzy zestawy polityk, mianowicie:
1. Targeted: Kontroluje większość procesów usług sieciowych. To jest polityka domyślnie używana przez system (wszystkie poniższe są używane).
2. Minimum: Na podstawie docelowych regulowanych są tylko wybrane procesy usług sieciowych. Zazwyczaj nie.
3. MLS: Wielopoziomowa ochrona bezpieczeństwa. Reguluj wszystkie procesy. To najsurowsza polityka, a konfiguracja jest bardzo trudna. Zazwyczaj nie jest używana, chyba że istnieją wyjątkowo wysokie wymagania dotyczące bezpieczeństwa.
Polityki można ustawić w /etc/selinux/config.
3.4 Kontekst bezpieczeństwa
Kontekst bezpieczeństwa jest sercem SELinux.
Kontekst bezpieczeństwa dzielę na "kontekst bezpieczeństwa procesu" i "kontekst bezpieczeństwa dokumentów".
Kontekst bezpieczeństwa procesu zazwyczaj odpowiada wielu kontekstom bezpieczeństwa dokumentów.
Dopiero gdy kontekst bezpieczeństwa obu tych dwóch elementów odpowiada, proces może uzyskać dostęp do pliku. Ich korespondencja jest określana przez zasady polisy.
Kontekst bezpieczeństwa pliku jest określany przez miejsce powstania pliku oraz proces, który go stworzył. System ma zestaw wartości domyślnych, a użytkownicy mogą też ustawić te wartości.
Ważne jest, aby pamiętać, że samo przeniesienie plików nie zmienia kontekstu bezpieczeństwa twoich plików.
Struktura i znaczenie kontekstu bezpieczeństwa
Kontekst bezpieczeństwa składa się z czterech pól, oddzielonych dwukropkami. Kształt taki jak: system_u:object_r:admin_home_t:s0.
3.5 Tryb pracy SELinux
SELinux ma trzy tryby działania, mianowicie:
1. egzekwowanie: Tryb wymuszony. Naruszenia zasad SELinux będą blokowane i zapisywane do logów.
2. Permisywny: Tryb tolerancji. Naruszenia zasad SELinux są jedynie rejestrowane w logach. Zazwyczaj do debugowania.
3. wyłączone: Wyłącz SELinux.
Tryb pracy SELinux można ustawić w /etc/selinux/config.
Jeśli chcesz przejść z trybu niepełnosprawnego na egzekwujący lub permisywny, musisz zrestartować system. I odwrotnie.
Tryby egzekwowania i permisywne można szybko przełączać za pomocą polecenia Setenforce 1|0.
Ważne jest, aby zauważyć, że jeśli system działał z wyłączonym SELinux przez jakiś czas, pierwszy restart po jego włączeniu może być wolniejszy. Bo system musi stworzyć bezpieczny kontekst dla plików na dysku (mówiłem, że restartowałem na około 10 minut i myślałem, że jest martwy...... )。
Logi SELinux muszą być rejestrowane za pomocą auditd.service, prosimy o ich nie wyłączanie.
3.6 Przepływ pracy SELinux
Oto cytat ze zdjęcia, bez większych wyjaśnień.
Uwaga: Powyższy tekst dotyczący bezpieczeństwa odnosi się do kontekstu bezpieczeństwa.
4. Podstawowe operacje SELinux
4.1 Zapytanie o kontekst bezpieczeństwa pliku lub katalogu
Podstawowe użycie poleceń
ls -Z
Przykłady użycia
Zapytaj kontekst bezpieczeństwa /etc/host.
ls -Z /etc/hosts
Wyniki egzekucji
-rw-r--r--. root system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Zapytanie o kontekst bezpieczeństwa procesu
Podstawowe użycie poleceń
ps auxZ | grep -v grep | grep
Przykłady użycia
Zapytaj kontekst bezpieczeństwa procesów związanych z Nginx.
ps auxZ | grep -v grep | Grep Nginx
Wyniki egzekucji
system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? SS 14:31 0:00 nginx: master process /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: proces roboczy
4.3 Ręczna modyfikacja kontekstu bezpieczeństwa pliku lub katalogu
Podstawowe użycie poleceń
CHCON [...]
Funkcja opcji -u Zmodyfikuj pole użytkownika kontekstu bezpieczeństwa -r Zmodyfikuj pole roli kontekstu bezpieczeństwa -t Zmodyfikuj pole typu kontekstu bezpieczeństwa -l Zmodyfikuj pole poziomu kontekstu bezpieczeństwa --odniesienie Zmodyfikuj kontekst bezpieczeństwa zgodny z określonym plikiem lub katalogiem -Operacja rekurencyjna -h Zmodyfikuj kontekst bezpieczeństwa miękkiego linku (zmodyfikuj odpowiadający mu plik miękkiego linku bez tej opcji)
Przykłady użycia
Zmodyfikuj kontekst bezpieczeństwa testu na aaa_u:bbb_r:ccc_t:s0.
CHCON -u aaa_u -r bbb_r -t ccc_t test
4.4 Przywrócenie kontekstu bezpieczeństwa pliku lub katalogu do wartości domyślnej
Podstawowe użycie poleceń
Restorecon [opcje] [...]
Funkcja opcji - V Procedura operacji druku - R operacja rekurencyjna
Przykłady użycia
Po dodaniu kilku plików internetowych do katalogu serwera Nginx, ustaw odpowiedni kontekst bezpieczeństwa dla tych nowych plików.
restorecon -R /usr/share/nginx/html/
4.5 Zapytanie reguł booleańskich i ich status w systemie
Podstawowe użycie poleceń
getsebool -a
Ponieważ polecenie zapytuje albo wszystkie reguły, albo tylko jedną regułę, zwykle najpierw zapytuje wszystkie reguły, a następnie filtruje za pomocą grep.
Przykłady użycia
Zapytanie o reguły boolowskie związane z httpd.
getsebool -a | grep httpd
Wyniki egzekucji
httpd_anon_write -->
httpd_builtin_scripting -->
httpd_can_check_spam -->
httpd_can_connect_ftp -->
#以下省略
4.6 Zamiana reguły boole'owskiej
Podstawowe użycie poleceń
setsebool [opcja]
Funkcja opcji -P restart nadal działa
Przykłady użycia
Włącz httpd_anon_write zasady.
setsebool -P httpd_anon_write on
4.7 Dodaj domyślny kontekst bezpieczeństwa dla katalogu
Podstawowe użycie poleceń
semanage fcontext -a -t "(/.*)?"
Uwaga: Domyślny kontekst bezpieczeństwa katalogu lub pliku można zobaczyć za pomocą polecenia semanage fcontext -l w połączeniu z filtrowaniem grep.
Przykłady użycia
Po dodaniu nowego katalogu strony /usr/share/nginx/html2 do Nginx musisz ustawić ten sam domyślny kontekst bezpieczeństwa dla niego co dla oryginalnego katalogu.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Dodaj porty dozwolone przez określone typy procesów
Podstawowe użycie poleceń
port semanage -a -t -p
Uwaga: Numery portów dozwolone dla różnych typów usług można zobaczyć za pomocą polecenia semanage port -l z filtrowaniem grep.
Przykłady użycia
Dla Nginx musisz użyć portu 10080 dla usług HTTP.
port SEMANAGE -a -t http_port_t -p TCP 10080
5. Analiza i rozwiązywanie błędów SELinux
5.1 Zrozumienie logów SELinux
Gdy SELinux jest włączony, normalne zachowanie wielu usług jest uznawane za naruszenie (zarówno w tytule, jak i w poniższych błędach).
Obecnie musimy użyć logów naruszeń SELinux, aby je analizować i rozwiązać.
Logi naruszeń SELinux są zapisywane w /var/log/audit/audit.log.
/var/log/audit/audit.log 的内容大概是这样的。
type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(brak) old-ses=4294967295 ses=25 res=1
type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=sukces'
...
Plik to dużo treści, mieszane z wieloma logami audytu systemowego, które nie mają nic wspólnego z błędami SELinux. Użyjemy narzędzia sealert, aby pomóc w analizie (jeśli komunikat nie może znaleźć polecenia, zainstaluj pakiet setroubleshoot).
5.2 Analiza błędów za pomocą sealert
Podstawowe użycie poleceń
sealert -a /var/log/audit/audit.log
Po wykonaniu polecenia system musi poświęcić trochę czasu na analizę naruszeń w logach i sporządzenie raportu analitycznego. |