Ściągawka SELinux dla administratorów systemów: 42 odpowiedzi na ważne pytania

Tłumaczenie artykułu zostało przygotowane specjalnie dla studentów kursu „Administrator Linuksa”.

Ściągawka SELinux dla administratorów systemów: 42 odpowiedzi na ważne pytania

Tutaj otrzymasz odpowiedzi na ważne pytania dotyczące życia, wszechświata i wszystkiego w Linuksie z ulepszonym bezpieczeństwem.

„Ważna prawda, że ​​rzeczy nie zawsze są takie, jakimi się wydają, jest powszechnie znana…”

-Douglas Adams, Autostopem przez Galaktykę

Bezpieczeństwo. Zwiększona niezawodność. Korespondencja. Polityka. Administrator systemu Czterech Jeźdźców Apokalipsy. Oprócz naszych codziennych zadań - monitorowania, tworzenia kopii zapasowych, wdrażania, konfiguracji, aktualizacji itp. - jesteśmy również odpowiedzialni za bezpieczeństwo naszych systemów. Nawet te systemy, w których zewnętrzny dostawca zaleca wyłączenie zwiększonych zabezpieczeń. Czuję się jak w pracy Ethana Hunta z „Misji: Niemożliwe”.

Stojąc przed tym dylematem, niektórzy administratorzy systemów decydują się na taki krok niebieska pigułka, ponieważ myślą, że nigdy nie poznają odpowiedzi na najważniejsze pytanie dotyczące życia, wszechświata i tak dalej. Jak wszyscy wiemy, ta odpowiedź to 42.

W duchu „Autostopem przez Galaktykę” przedstawiamy 42 odpowiedzi na ważne pytania dotyczące kontroli i użytkowania. SELinux w Twoich systemach.

1. SELinux jest systemem wymuszonej kontroli dostępu, co oznacza, że ​​każdy proces ma etykietę. Każdy plik, katalog i obiekt systemowy również ma etykiety. Reguły polityk kontrolują dostęp pomiędzy oznaczonymi procesami i obiektami. Jądro wymusza te zasady.

2. Dwa najważniejsze pojęcia to: Etykietowania — oznaczenia (pliki, procesy, porty itp.) oraz Wymuszanie typów (który izoluje procesy od siebie na podstawie typów).

3. Prawidłowy format etykiety user:role:type:level (opcjonalny).

4. Celem zapewnienia wielopoziomowego bezpieczeństwa (Bezpieczeństwo wielopoziomowe - MLS) polega na zarządzaniu procesami (domenami) w oparciu o poziom bezpieczeństwa danych, z których będą korzystać. Na przykład tajny proces nie może odczytać ściśle tajnych danych.

5. Zapewnienie bezpieczeństwa wielokategorii (Bezpieczeństwo wielu kategorii - MCS) zabezpiecza przed sobą podobne procesy (na przykład maszyny wirtualne, silniki OpenShift, piaskownice SELinux, kontenery itp.).

6. Opcje jądra umożliwiające zmianę trybów SELinux podczas uruchamiania:

  • autorelabel=1 → powoduje, że system uruchamia ponowne etykietowanie
  • selinux=0 → jądro nie ładuje infrastruktury SELinux
  • enforcing=0 → ładowanie w trybie zezwalającym

7. Jeśli chcesz ponownie oznaczyć cały system:

# touch /.autorelabel
#reboot

Jeśli oznaczenie systemu zawiera dużą liczbę błędów, może być konieczne uruchomienie komputera w trybie zezwalającym, aby uwagi powiodły się.

8. Aby sprawdzić, czy SELinux jest włączony: # getenforce

9. Aby tymczasowo włączyć/wyłączyć SELinux: # setenforce [1|0]

10. Sprawdzanie statusu SELinuksa: # sestatus

11. Plik konfiguracyjny: /etc/selinux/config

12. Jak działa SELinux? Oto przykładowe oznaczenie serwera WWW Apache:

  • Reprezentacja binarna: /usr/sbin/httpd→httpd_exec_t
  • Katalog konfiguracyjny: /etc/httpd→httpd_config_t
  • Katalog plików dziennika: /var/log/httpd → httpd_log_t
  • Katalog treści: /var/www/html → httpd_sys_content_t
  • Uruchom skrypt: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Proces: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Porty: 80/tcp, 443/tcp → httpd_t, http_port_t

Proces działający w kontekście httpd_t, może wchodzić w interakcję z oznaczonym obiektem httpd_something_t.

13. Wiele poleceń przyjmuje argument -Z aby przeglądać, tworzyć i zmieniać kontekst:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Konteksty są ustanawiane podczas tworzenia plików na podstawie kontekstu ich katalogu nadrzędnego (z pewnymi wyjątkami). RPM mogą ustanawiać konteksty tak jak podczas instalacji.

14. Istnieją cztery główne przyczyny błędów SELinuksa, które opisano szerzej w punktach 15-21 poniżej:

  • Problemy z etykietowaniem
  • Z powodu czegoś, o czym SELinux musi wiedzieć
  • Błąd w polityce/aplikacji SELinux
  • Twoje dane mogą zostać naruszone

15. Problem z etykietowaniem: jeśli twoje pliki są w /srv/myweb zostaną nieprawidłowo oznaczone, może nastąpić odmowa dostępu. Oto kilka sposobów, aby to naprawić:

  • Jeśli znasz etykietę:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Jeśli znasz plik z równoważnymi oznaczeniami:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Przywracanie kontekstu (w obu przypadkach):
    # restorecon -vR /srv/myweb

16. Problem z etykietowaniem: jeśli przeniesiesz plik zamiast go skopiować, plik zachowa swój oryginalny kontekst. Aby rozwiązać ten problem:

  • Zmień polecenie kontekstowe za pomocą etykiety:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Zmień polecenie kontekstowe za pomocą etykiety łącza:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Przywróć kontekst (w obu przypadkach): # restorecon -vR /var/www/html/

17. jeśli SELinux, który musisz znaćże HTTPD nasłuchuje na porcie 8585, powiedz SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux, który musisz znać Wartości logiczne, które umożliwiają zmianę części polityki SELinux w czasie wykonywania bez wiedzy o nadpisaniu polityki SELinux. Na przykład, jeśli chcesz, aby httpd wysyłał e-maile, wpisz: # setsebool -P httpd_can_sendmail 1

19. SELinux, który musisz znać wartości logiczne umożliwiające włączenie/wyłączenie ustawień SELinux:

  • Aby zobaczyć wszystkie wartości logiczne: # getsebool -a
  • Aby zobaczyć opis każdego z nich: # semanage boolean -l
  • Aby ustawić wartość logiczną: # setsebool [_boolean_] [1|0]
  • W przypadku instalacji stałej dodaj -P. Na przykład: # setsebool httpd_enable_ftp_server 1 -P

20. Zasady/aplikacje SELinux mogą zawierać błędy, w tym:

  • Niezwykłe ścieżki kodu
  • Konfiguracje
  • Przekierowanie standardowe wyjście
  • Wycieki deskryptora pliku
  • Pamięć wykonywalna
  • Źle zbudowane biblioteki

Bilety otwarte (nie przesyłaj raportu do Bugzilli; Bugzilla nie ma umowy SLA).

21. Twoje dane mogą zostać naruszonejeśli masz zastrzeżone domeny, próbując:

  • Załaduj moduły jądra
  • Wyłącz wymuszony tryb SELinux
  • Napisz do etc_t/shadow_t
  • Zmień reguły iptables

22. Narzędzia SELinux do tworzenia modułów polityk:

# yum -y install setroubleshoot setroubleshoot-server

Uruchom ponownie lub uruchom ponownie auditd po instalacji.

23. Stosowanie

journalctl

aby wyświetlić listę wszystkich powiązanych dzienników setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. Stosowanie journalctl aby wyświetlić listę wszystkich logów powiązanych z konkretnym tagiem SELinux. Na przykład:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Jeśli wystąpi błąd SELinux, użyj dziennika setroubleshoot oferując kilka możliwych rozwiązań.
Na przykład od journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26. Rejestrowanie: SELinux rejestruje informacje w wielu miejscach:

  • / var / log / messages
  • /var/log/audyt/audyt.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Rejestrowanie: wyszukiwanie błędów SELinux w dzienniku audytu:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. Aby znaleźć komunikaty SELinux Access Vector Cache (AVC) dla określonej usługi:

# ausearch -m avc -c httpd

29. Użyteczność audit2allow zbiera informacje z logów zabronionych operacji, a następnie generuje reguły polityki uprawnień SELinux. Na przykład:

  • Aby utworzyć czytelny dla człowieka opis przyczyny odmowy dostępu: # audit2allow -w -a
  • Aby wyświetlić regułę wymuszania typu, która zezwala na odmowę dostępu: # audit2allow -a
  • Aby utworzyć moduł niestandardowy: # audit2allow -a -M mypolicy
  • Opcja -M tworzy plik wymuszający typ (.te) o określonej nazwie i kompiluje regułę do pakietu zasad (.pp): mypolicy.pp mypolicy.te
  • Aby zainstalować moduł niestandardowy: # semodule -i mypolicy.pp

30. Aby skonfigurować oddzielny proces (domenę) do pracy w trybie zezwalającym: # semanage permissive -a httpd_t

31. Jeśli nie chcesz, aby domena była już zezwalająca: # semanage permissive -d httpd_t

32. Aby wyłączyć wszystkie domeny zezwalające: # semodule -d permissivedomains

33. Włączanie polityki MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Upewnij się, że SELinux działa w trybie zezwalającym: # setenforce 0
Użyj skryptu fixfilesaby mieć pewność, że przy następnym ponownym uruchomieniu pliki zostaną ponownie oznaczone:

# fixfiles -F onboot # reboot

34. Utwórz użytkownika z określonym zakresem MLS: # useradd -Z staff_u john

Korzystanie z polecenia useradd, zmapuj nowego użytkownika na istniejącego użytkownika SELinux (w tym przypadku staff_u).

35. Aby wyświetlić mapowanie pomiędzy użytkownikami SELinux i Linux: # semanage login -l

36. Zdefiniuj konkretny zakres dla użytkownika: # semanage login --modify --range s2:c100 john

37. Aby poprawić etykietę katalogu domowego użytkownika (jeśli to konieczne): # chcon -R -l s2:c100 /home/john

38. Aby wyświetlić aktualne kategorie: # chcat -L

39. Aby zmienić kategorie lub rozpocząć tworzenie własnych, edytuj plik w następujący sposób:

/etc/selinux/_<selinuxtype>_/setrans.conf

40. Aby uruchomić polecenie lub skrypt w określonym pliku, roli i kontekście użytkownika:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t kontekst pliku
  • -r kontekst roli
  • -u kontekst użytkownika

41. Kontenery działające z wyłączonym SELinuxem:

  • Podman: # podman run --security-opt label=disable …
  • Doker: # docker run --security-opt label=disable …

42. Jeśli chcesz nadać kontenerowi pełny dostęp do systemu:

  • Podman: # podman run --privileged …
  • Doker: # docker run --privileged …

A teraz znasz już odpowiedź. Więc proszę: nie panikuj i włącz SELinux.

Linki:

Źródło: www.habr.com

Dodaj komentarz