Seria RHCSA obowiązkowa kontrola dostępu do Selinux w RHEL 7 - Część 13

Seria RHCSA obowiązkowa kontrola dostępu do Selinux w RHEL 7 - Część 13

Podczas tej serii szczegółowo zbadaliśmy co najmniej dwie metody kontroli dostępu: standard Ugo/RWX uprawnienia (zarządzaj użytkownikami i grupami - część 3) i listy kontroli dostępu (konfiguruj ACL w systemach plików - część 7).

Egzamin RHCSA: Selinux Essentials i kontrola dostępu do systemu plików

Chociaż są niezbędne jako uprawnienia pierwszego poziomu i mechanizmy kontroli dostępu, mają one pewne ograniczenia, które są rozwiązane Ulepszone bezpieczeństwo Linux (znany jako Selinux w skrócie).

Jednym z takich ograniczeń jest to, że użytkownik może ujawnić plik lub katalog na naruszenie bezpieczeństwa za pomocą słabo opracowanego chmod dowództwo, a zatem powoduj nieoczekiwane propagowanie praw dostępu. W rezultacie każdy proces rozpoczął się od tego użytkownika, może to zrobić, co mu się podoba z plikami należącymi do użytkownika, w których w końcu złośliwe lub w inny sposób zagrożone oprogramowanie może osiągnąć dostęp do całego systemu do całego systemu.

Mając na uwadze te ograniczenia, Agencja Bezpieczeństwa Narodowego Stanów Zjednoczonych (NSA) Po raz pierwszy Selinux, elastyczna obowiązkowa metoda kontroli dostępu, w celu ograniczenia zdolności procesów do dostępu lub wykonywania innych operacji na obiektach systemowych (takich jak pliki, katalogi, porty sieciowe itp. W kilku słowach każdy element systemu otrzymuje jedynie dostęp do funkcjonowania.

W RHEL 7, Selinux jest włączony do samego jądra i jest włączony Egzekwowanie tryb domyślnie. W tym artykule krótko wyjaśnimy podstawowe powiązane koncepcje Selinux i jego działanie.

Tryby SELINUX

Selinux może działać na trzy różne sposoby:

  1. Egzekwowanie: Selinux zaprzecza dostępu na podstawie zasad zasad Selinux, zestawu wytycznych kontrolujących silnik bezpieczeństwa.
  2. Dozwalający: Selinux nie zaprzecza dostępu, ale zarejestrowane są zaprzeczenia na działania, które zostałyby odrzucone, gdyby działało w trybie egzekwowania.
  3. Wyłączony (samozadowolenie).

getenforce Polecenie wyświetla bieżący tryb SELINUX, podczas gdy setenforce (a następnie 1 lub 0) służy do zmiany trybu na Egzekwowanie Lub Dozwalający, odpowiednio, tylko podczas bieżącej sesji.

Aby osiągnąć wytrwałość w logoutach i ponownym uruchomieniu, musisz edytować /etc/selinux/config Plik i ustaw zmienną Selinux na albo egzekwowanie, dozwalający, Lub wyłączony:

# getenforce # setenforce 0 # getenforce # setenforce 1 # getenforce # cat/etc/selinux/config 
Ustaw tryb Selinux

Zazwyczaj będziesz używać setenforce Aby przełączyć między trybami Selinux (egzekwowanie do dopuszczalnych i z powrotem) jako pierwszy krok rozwiązywania problemów. Jeśli Selinux jest obecnie ustawiony egzekwowanie podczas gdy masz pewien problem, i to samo znika, kiedy go ustawiasz dozwalający, Możesz być pewny, że patrzysz na problem z uprawnieniami Selinux.

Konteksty SELINUX

Kontekst Selinux składa się z środowiska kontroli dostępu, w którym podejmowane są decyzje na podstawie użytkownika, roli i typu Selinux (i opcjonalnie poziomu):

  1. Użytkownik Selinux uzupełnia zwykłe konto użytkownika Linux, mapując je na konto użytkownika Selinux, które z kolei jest używane w kontekście Selinux dla procesów w tej sesji, aby wyraźnie zdefiniować ich dozwolone role i poziomy.
  2. Pojęcie roli działa jako pośrednik między domenami a użytkownikami Selinux, ponieważ określa, które domeny procesowe i typy plików można uzyskać. Spowoduje to ochronę twojego systemu przed podatnością na ataki eskalacji przywilejów.
  3. Typ definiuje typ pliku Selinux lub domena procesu Selinux. W normalnych okolicznościach procesy nie można uzyskać dostępu do plików, z których korzystają inne procesy, a także dostęp do innych procesów, a zatem dostęp jest dozwolony tylko wtedy, gdy istnieje konkretna reguła zasad Selinux, która na to pozwala.

Zobaczmy, jak to wszystko działa za pomocą następujących przykładów.

Przykład 1: Zmiana domyślnego portu dla demona SSHD

Zabezpieczając SSH - część 8 wyjaśniliśmy, że zmiana portu domyślnego, gdzie Sshd Listuje ON, jest jednym z pierwszych środków bezpieczeństwa, które zabezpieczyły serwer przed atakami zewnętrznymi. Edytujmy /etc/ssh/sshd_config złożyć i ustaw port na 9999:

Port 9999 

Zapisz zmiany i uruchom ponownie SSHD:

# Systemctl restart sshd # Systemctl Status SSHD 
Uruchom ponownie usługę SSH

Jak widać, SSHD nie zaczął. Ale co się stało?

Szybka kontrola /var/log/audyt/audyt.dziennik wskazuje, że SSHD odmówiono uprawnień do rozpoczęcia portu 9999 (Komunikaty dziennika Selinux zawierają słowo „Avc”, Aby można je było łatwo zidentyfikować na podstawie innych wiadomości), ponieważ jest to port zarezerwowany dla Management JBOSS praca:

# cat/var/log/audyt/audyt.Log | Grep avc | ogon -1 
Sprawdź dzienniki SSH

W tym momencie możesz wyłączyć Selinux (Ale nie!) Jak wyjaśniono wcześniej i spróbuj zacząć Sshd Znowu i to powinno działać. Jednakże Semanage narzędzie może nam powiedzieć, co musimy zmienić, abyśmy mogli uruchomić SSHD w dowolnym porcie, który wybieramy bez problemów.

Uruchomić,

# semanage port -l | Grep Ssh 

Aby uzyskać listę portów, w których Selinux pozwala SSHD na słuchanie.

Narzędzie Semanage

Więc zmieńmy port w /etc/ssh/sshd_config do portu 9998, Dodaj port do SSH_PORT_T KONTEKST, a następnie uruchom ponownie usługę:

# semanage port -a -t ssh_port_t -p TCP 9998 # Systemctl restart sshd # Systemctl is -aktywny sshd 
Semanage Dodaj port

Jak widać, usługa została uruchomiona tym razem z powodzeniem. Ten przykład ilustruje fakt, że Selinux kontroluje numer portu TCP do własnych wewnętrznych definicji typu portu.

Przykład 2: Umożliwienie HTTPD na wysyłanie dostępu do Sendmail

To jest przykład zarządzania procesem Selinux dostępu do innego procesu. Jeśli masz zaimplementować mod_security i mod_evasive wraz z Apache na serwerze RHEL 7, musisz zezwolić httpd mieć dostęp Wyślij maila Aby wysłać powiadomienie pocztowe po (D) DOS atak. W poniższym poleceniu pomiń -P flaga, jeśli nie chcesz, aby zmiana była trwała w przypadku ponownego uruchomienia.

# Semanage Boolean -1 | grep httpd_can_sendmail # setsebool -p httpd_can_sendmail 1 # semanage boolean -1 | grep httpd_can_sendmail 
Pozwól Apache na wysyłanie maili

Jak można stwierdzić z powyższego przykładu, Selinux Boolean Ustawienia (lub po prostu booleans) to prawdziwe / fałszywe zasady osadzone w zasadach Selinux. Możesz wymienić wszystkie logi Semanage Boolean -L, i alternatywnie załóż go do GREP, aby filtrować wyjście.

Przykład 3: Obsłużenie strony statycznej z katalogu innego niż domyślna

Załóżmy, że obsługujesz statyczną stronę internetową przy użyciu innego katalogu niż domyślna (/var/www/html), mowić /strony internetowe (może tak być, jeśli na przykład przechowujesz swoje pliki internetowe w udostępnionym dysk sieciowym i musisz je zamontować /strony internetowe).

A). Stworzyć indeks.html plik w środku /strony internetowe Z następującymi treściami:

 

Test Selinux

Jeśli zrobisz,

# ls -lz /witryny /indeks.html 

Zobaczysz, że indeks.html Plik został oznaczony za pomocą default_t selinux Wpisz, którego Apache nie może uzyskać dostępu:

Sprawdź zgodę na plik Selinux

B). Zmienić DocumentRoot dyrektywa w /etc/httpd/conf/httpd.conf Do /strony internetowe I nie zapomnij zaktualizować odpowiedniego bloku katalogu. Następnie uruchom ponownie Apache.

C). Przeglądaj do http: //, I powinieneś otrzymać 503 zakazaną odpowiedź HTTP.

D). Następnie zmień etykietę /strony internetowe, rekurencyjnie, do httpd_sys_content_t Wpisz, aby przyznać dostęp tylko do odczytu Apache do tego katalogu i jego zawartości:

# semanage fcontext -a -t httpd_sys_content_t "/witryny (/.*)?" 

mi). Na koniec zastosuj zasady Selinux utworzone w D):

# RESTORECON -R -V /STRONY 

Teraz uruchom ponownie Apache i przejrzyj do http: // Znowu zobaczysz poprawnie wyświetlany plik HTML:

Sprawdź stronę Apache

Streszczenie

W tym artykule przeszliśmy przez podstawy Selinux. Zauważ, że z powodu ogromu tematu pełne szczegółowe wyjaśnienie nie jest możliwe w jednym artykule, ale uważamy, że zasady przedstawione w tym przewodniku pomogą ci przejść do bardziej zaawansowanych tematów, jeśli chcesz to zrobić.

Jeśli mogę, pozwól, że polecam dwa podstawowe zasoby na początek: strona NSA Selinux i podręcznik użytkownika i administratora RHEL 7 Selinux.

Nie wahaj się daj nam znać, jeśli masz jakieś pytania lub komentarze.