ProHoster > Blog > administracja > Ściągawka SELinux dla administratorów systemów: 42 odpowiedzi na ważne pytania
Ś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”.
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
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:
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:
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: