Tłumaczenie artykułu przygotowano specjalnie dla studentów kursu .

Tutaj znajdziesz odpowiedzi na ważne pytania o życiu, wszechświecie i tym podobnych w systemie Linux z ulepszoną bezpieczeństwem.
„Ważna prawda, że rzeczy nie zawsze są tym, czym się wydają, jest powszechnie znana...”
― Douglas Adams, Autostopem przez Galaktykę
Bezpieczeństwo. Zwiększenie niezawodności. Zgodność. Polityka. Czterech Jeźdźców Apokalipsy administratora systemu. Oprócz naszych codziennych zadań — monitorowania, tworzenia kopii zapasowych, wdrażania, konfigurowania, aktualizowania itd. — odpowiadamy również za bezpieczeństwo naszych systemów. Nawet tych, w których dostawca zewnętrzny zaleca wyłączenie wzmocnionego bezpieczeństwa. To przypomina pracę z "Mission: Impossible".
Stając w obliczu tego dylematu, niektórzy administratorzy systemu decydują się wziąć , ponieważ myślą, że nigdy nie poznają odpowiedzi na wielkie pytanie o życie, wszechświat i tym podobne. A jak wszyscy wiemy, ta odpowiedź to 42.
W duchu "Autostopem przez Galaktykę", oto 42 odpowiedzi na ważne pytania dotyczące zarządzania i korzystania z w twoich systemach.
1. SELinux to system przymusowego zarządzania dostępem, co oznacza, że każdy proces ma etykietę (label). Każdy plik, katalog i obiekt systemowy również mają etykiety. Zasady polityki zarządzają dostępem między oznaczonymi procesami i obiektami. Jądro zapewnia przestrzeganie tych zasad.
2. Dwiema najważniejszymi koncepcjami są: Oznaczanie — etykietowanie (plików, procesów, portów itd.) oraz Tymczasowe egzekwowanie (które izoluje procesy od siebie na podstawie typów).
3. Poprawny format etykiety user:role:type:level (opcjonalnie).
4. Celem zapewnienia wielowarstwowego bezpieczeństwa (Multi-Level Security — MLS) jest zarządzanie procesami (obszarami) na podstawie poziomu bezpieczeństwa danych, które będą używane. Na przykład, proces tajny nie może odczytać danych ściśle tajnych.
5. Zapewnienie wielokategorii bezpieczeństwa (Multi-Category Security — MCS) chroni podobne procesy przed sobą (na przykład maszyny wirtualne, mechanizmy OpenShift, piaskownice SELinux, kontenery itd.).
6. Opcje jądra do zmiany trybów SELinux podczas uruchamiania:
autorelabel=1→ zmusza system do uruchomienia ponownej etykietowaniaselinux=0→ jądro nie ładowało infrastruktury SELinuxenforcing=0→ uruchamianie w trybie zezwalającym
7. Jeśli musisz oznakować cały system:
# touch /.autorelabel
#reboot
Jeśli oznaczenie systemu zawiera wiele błędów, może być konieczne uruchomienie w trybie permissive, aby oznakowanie się powiodło.
8. Aby sprawdzić, czy SELinux jest włączony: # getenforce
9. Aby tymczasowo włączyć/wyłączyć SELinux: # setenforce [1|0]
10. Sprawdzenie statusu SELinux: # sestatus
11. Plik konfiguracyjny: /etc/selinux/config
12. Jak działa SELinux? Oto przykład oznakowania dla serwera www Apache:
- Reprezentacja binarna:
/usr/sbin/httpd→httpd_exec_t - Katalog konfiguracji:
/etc/httpd→httpd_config_t - Katalog plików logów:
/var/log/httpd → httpd_log_t - Katalog zawartości:
/var/www/html → httpd_sys_content_t - Skrypt uruchamiający:
/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 uruchomiony w kontekście httpd_t, może wchodzić w interakcję z obiektem oznaczonym httpd_something_t.
13. Wiele komend przyjmuje argument -Z do przeglądania, tworzenia i zmieniania kontekstu:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
Konteksty są ustalane, gdy pliki są tworzone na podstawie kontekstu ich katalogu nadrzędnego (z pewnymi wyjątkami). RPM mogą ustawiać konteksty podczas instalacji.
14. Istnieje cztery główne przyczyny błędów SELinux, które są szczegółowo opisane w punktach 15-21 poniżej:
- Problemy z oznakowaniem
- Z powodu czegoś, co SELinux powinien wiedzieć
- Błąd w polityce/aplikacji SELinux
- Twoje informacje mogą być zagrożone
15. Problem z oznakowaniem: jeśli Twoje pliki są /srv/myweb źle oznakowane, dostęp może być zablokowany. 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żnym oznakowaniem:
# semanage fcontext -a -e /srv/myweb /var/www - Przywracając kontekst (w obu przypadkach):
# restorecon -vR /srv/myweb
16. Problem z oznakowaniem: jeśli przeniesiesz plik zamiast skopiować go, plik zachowa swój oryginalny kontekst. Aby naprawić ten problem:
- Zmień komendę kontekstu z etykietą:
# chcon -t httpd_system_content_t /var/www/html/index.html - Zmień komendę kontekstu z etykietą odniesienia:
# chcon --reference /var/www/html/ /var/www/html/index.html - Przywróć kontekst (w obu przypadkach):
# restorecon -vR /var/www/html/
17. Jeśli SELinux musi wiedzieć, że HTTPD nasłuchuje na porcie 8585, powiedz SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux musi wiedzieć logiczne wartości pozwalające zmieniać części polityki SELinux w czasie rzeczywistym bez potrzeby wiedzy o nadpisywaniu polityki SELinux. Na przykład, jeśli chcesz, aby httpd wysyłał emaile, wpisz: # setsebool -P httpd_can_sendmail 1
19. SELinux musi wiedzieć logiczne wartości włączania/wyłączania ustawień SELinux:
- Aby zobaczyć wszystkie wartości logiczne:
# getsebool -a - Aby zobaczyć opis każdego:
# semanage boolean -l - Aby ustawić wartość logiczną:
# setsebool [_boolean_] [1|0] - Do trwałego ustawienia dodaj
-P. Na przykład:# setsebool httpd_enable_ftp_server 1 -P
20. Polityki/przy aplikacjach SELinux mogą zawierać błędy, w tym:
- Nieprawidłowe ścieżki kodu
- Konfiguracje
- Przekierowanie stdout
- Wyciek descriptorów plików
- Pamięć wykonywalna
- Źle zbudowane biblioteki
Zgłaszaj tickety (nie wysyłaj raportu do Bugzilli; w Bugzilli nie ma SLA).
21. Twoje informacje mogą być zagrożone, jeśli masz ograniczone domeny, które próbują:
- Załadować moduły jądra
- Wyłączyć wymuszony tryb SELinux
- Zapisać w
etc_t/shadow_t - Zmień reguły iptables
22. Narzędzia SELinux do opracowywania modułów polityki:
# yum -y install setroubleshoot setroubleshoot-server
Uruchom ponownie lub zrestartuj auditd po instalacji.
23. Użyj
journalctl aby wyświetlić listę wszystkich logów związanych z setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Użyj journalctl aby wyświetlić listę wszystkich logów związanych z określoną etykietą SELinux. Na przykład:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. W przypadku wystąpienia błędu SELinux użyj logu setroubleshoot z sugerowanymi kilkoma możliwymi rozwiązaniami.
Na przykład, z journalctl:
14 czerwca 19:41:07 web1 setroubleshoot: SELinux zapobiega dostępności httpd do getattr na pliku /var/www/html/index.html. Aby uzyskać pełną wiadomość, uruchom: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux zapobiega dostępności httpd do getattr na pliku /var/www/html/index.html.
***** Wtyczka restorecon (99,5% pewności) sugeruje ************************
Jeśli chcesz naprawić etykietę,
/var/www/html/index.html domyślna etykieta powinna być httpd_syscontent_t.
Następnie możesz użyć restorecon.
Zrób
# /sbin/restorecon -v /var/www/html/index.html26. Logowanie: SELinux zapisuje informacje w wielu miejscach:
- /var/log/messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Logowanie: wyszukiwanie błędów SELinux w logu audytu:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Aby znaleźć wiadomości SELinux Access Vector Cache (AVC) dla określonej usługi:
# ausearch -m avc -c httpd
29. Narzędzie audit2allow zbiera informacje z logów zabronionych operacji, a następnie generuje reguły polityki zezwolenia SELinux. Na przykład:
- Aby stworzyć czytelny opis przyczyny odmowy dostępu:
# audit2allow -w -a - Aby zobaczyć regułę wymuszania typów, zezwalającą na zabroniony dostęp:
# audit2allow -a - Aby stworzyć moduł użytkownika:
# audit2allow -a -M mypolicy - Opcja
-Mtworzy plik wymuszenia typu (.te) o podanej nazwie i kompiluje regułę w pakiecie polityki (.pp):mypolicy.pp mypolicy.te - Aby zainstalować moduł użytkownika:
# semodule -i mypolicy.pp
30. Aby skonfigurować pojedynczy proces (domenę) do pracy w trybie permissive: # semanage permissive -a httpd_t
31. Jeśli nie chcesz, aby domena była trybie permissive: # semanage permissive -d httpd_t
32. Aby wyłączyć wszystkie domeny permissive: # semodule -d permissivedomains
33. Włączenie polityki MLS SELinux: # yum install selinux-policy-mls
w /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Upewnij się, że SELinux działa w trybie permissive: # setenforce 0
Użyj skryptu fixfiles, aby zapewnić, że pliki zostaną na nowo oznaczone przy następnej aktualizacji:
# fixfiles -F onboot # reboot
34. Utwórz użytkownika z określonym zakresem MLS: # useradd -Z staff_u john
Używając polecenia useradd, przyporządkuj nowego użytkownika do istniejącego użytkownika SELinux (w tym przypadku, staff_u).
35. Aby zobaczyć korelację między użytkownikami SELinux a Linux: # semanage login -l
36. Określ konkretny zakres dla użytkownika: # semanage login --modify --range s2:c100 john
37. Aby poprawić etykietę w katalogu domowym użytkownika (w razie potrzeby): # chcon -R -l s2:c100 /home/john
38. Aby zobaczyć bieżące kategorie: # chcat -L
39. Aby zmienić kategorie lub zacząć tworzyć własne, zmień 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
-tkontekst pliku-rkontekst roli-ukontekst użytkownika
41. Kontenery działające z wyłączonym SELinux:
- Podman:
# podman run --security-opt label=disable … - Docker:
# docker run --security-opt label=disable …
42. Jeśli musisz zapewnić kontenerowi pełny dostęp do systemu:
- Podman:
# podman run --privileged … - Docker:
# docker run --privileged …
I już znasz odpowiedź. Dlatego proszę: nie panikuj i włącz SELinux.
Linki:
- by
- autorstwa Dan Walsh
- by
- by
Źródło: habr.com
