Wdrożenie obowiązkowej kontroli dostępu z Selinux lub Apparmor w Linux

Wdrożenie obowiązkowej kontroli dostępu z Selinux lub Apparmor w Linux

W celu przezwyciężenia ograniczeń i zwiększenia mechanizmów bezpieczeństwa dostarczanych przez standard UGO/RWX uprawnienia i listy kontroli dostępu, Agencja Bezpieczeństwa Narodowego Stanów Zjednoczonych (NSA) opracował elastyczny Obowiązkowa kontrola dostępu (MAC) metoda znana jako Selinux (Krótkie dla Ulepszone bezpieczeństwo Linux) W celu ograniczenia między innymi zdolność procesów do dostępu lub wykonywania innych operacji na obiektach systemowych (takich jak pliki, katalogi, porty sieciowe itp.) Z.

Selinux
oraz Linux Hartening Security Apparmor

Kolejny popularny i szeroko stosowany jest Mac Apparmor, które oprócz funkcji dostarczonych przez Selinux, Obejmuje tryb uczenia się, który pozwala systemowi „uczyć się„Jak zachowuje się konkretna aplikacja i ustawia limity poprzez konfigurowanie profili dla bezpiecznego użycia aplikacji.

W Centos 7, Selinux jest włączony do samego jądra i jest włączony Egzekwowanie tryb domyślnie (więcej o tym w następnej sekcji), w przeciwieństwie do OpenSuse I Ubuntu które używają Apparmor.

W tym artykule wyjaśnimy niezbędne elementy Selinux i Apparmor oraz sposób korzystania z jednego z tych narzędzi na korzyść w zależności od wybranej dystrybucji.

Wprowadzenie do Selinux i jak używać go w Centos 7

Ulepszone bezpieczeństwo Linux może działać na dwa 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.

Selinux można również wyłączyć. Chociaż nie jest to sam tryb pracy, nadal jest to opcja. Jednak nauka korzystania z tego narzędzia jest lepsza niż tylko ignorowanie. Pamiętaj o tym!

Aby wyświetlić bieżący tryb Selinux, używać getenforce. Jeśli chcesz przełączyć tryb pracy, użyj setenforce 0 (Aby to ustawić Dozwalający) Lub setenforce 1 (Egzekwowanie).

Ponieważ ta zmiana nie przetrwa ponowne uruchomienie, Będziesz musiał edytować /etc/selinux/config plik i ustaw Selinux zmienne do obu egzekwowanie, dozwalający, Lub wyłączony Aby osiągnąć wytrwałość w ramach ponownego uruchamiania:

Jak włączyć i wyłączyć tryb SELINUX

Na marginesie, jeśli getenforce Zwraca wyłączone, będziesz musiał edytować /etc/selinux/config z pożądanym trybem pracy i ponownego uruchomienia. W przeciwnym razie nie będziesz mógł ustawić (lub przełączać) tryb pracy z setenforce.

Jedno z typowych zastosowań setenforce składa się z przełączania między trybami Selinux (z egzekwowanie Do dozwalający lub na odwrót) w celu rozwiązywania problemów z aplikacją, która źle się zachowuje lub nie działa zgodnie z oczekiwaniami. Jeśli to działa po ustawieniu Selinux na Dozwalający tryb, możesz mieć pewność, że patrzysz na problem z uprawnieniami SELINUX.

Dwa klasyczne przypadki, w których najprawdopodobniej będziemy musieli poradzić sobie z Selinux, to:

  1. Zmiana domyślnego portu, w którym rozpuszcza się demon.
  2. Ustawianie DocumentRoot dyrektywa dla wirtualnego hosta poza /var/www/html.

Rzućmy okiem na te dwa przypadki, stosując następujące przykłady.

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

Jedną z pierwszych rzeczy, które robi większość administratorów systemu, aby zabezpieczyć swoje serwery, jest zmiana portu, w którym demon SSH słucha, głównie w celu zniechęcenia skanerów portów i zewnętrznych atakujących. Aby to zrobić, używamy dyrektywy portu w /etc/ssh/sshd_config a następnie nowy numer portu w następujący sposób (będziemy używać portu 9999 w tym przypadku):

Port 9999 

Po próbie ponownego uruchomienia usługi i sprawdzeniu jej statusu zobaczymy, że nie uruchomi się:

# Systemctl restart sshd # Systemctl Status SSHD 
Sprawdź status usługi SSH

Jeśli przyjrzymy się /var/log/audyt/audyt.dziennik, zobaczymy to Sshd zapobiegano rozpoczęciu od portu 9999 przez Selinux Ponieważ jest to port zarezerwowany dla Management JBOSS serwis (komunikaty dziennika SELINUX zawierają słowo „AVC” aby można je było łatwo zidentyfikować na podstawie innych wiadomości):

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

W tym momencie większość ludzi prawdopodobnie wyłączyłaby Selinux Ale nie będziemy. Zobaczymy, że istnieje sposób dla Selinux i SSHD słuchania na innym porcie, aby razem żyć w harmonii. Upewnij się, że masz PolicyCoreutils-Python Pakiet zainstalowany i uruchom:

# Yum Instal PolicyCoreUtils-Python 

Aby wyświetlić listę portów, w których Selinux pozwala SSHD na słuchanie. Na poniższym obrazie możemy również zobaczyć ten port 9999 był zarezerwowany dla innej usługi, dlatego nie możemy jej użyć do uruchomienia innej usługi na razie:

# semanage port -l | Grep Ssh 

Oczywiście moglibyśmy wybrać inny port dla SSH, ale jeśli będziemy pewni, że nie będziemy musieli używać tego konkretnego urządzenia do jakichkolwiek usług związanych z JBOSS, możemy następnie zmodyfikować istniejącą regułę SELINUX i przypisać ten port do SSH:

# Semanage Port -M -t SSH_PORT_T -P TCP 9999 

Następnie możemy użyć pierwszego Semanage polecenie, aby sprawdzić, czy port został poprawnie przypisany, czy -LC Opcje (skrót od listy niestandardowych):

# semanage port -lc # semanage port -l | Grep Ssh 
Przypisz port do SSH

Możemy teraz ponownie uruchomić SSH i połączyć się z usługą za pomocą portu 9999. Zauważ, że ta zmiana przetrwa ponowne uruchomienie.

Przykład 2: Wybór DocumentRoot na zewnątrz/var/www/html dla wirtualnego hosta

Jeśli chcesz skonfigurować wirtualny host Apache za pomocą katalogu innego niż /var/www/html Jak DocumentRoot (Powiedz na przykład, /WEBRV/Sites/Gabriel/Public_Html):

DocumentRoot „/WEBRV/Sites/Gabriel/Public_Html” 

Apache odmówi obsługi treści, ponieważ indeks.html został oznaczony za pomocą default_t selinux Wpisz, którego Apache nie może uzyskać dostępu:

# wget http: // localhost/index.html # ls -lZ/WEBRV/Sites/gabriel/public_html/index.html 
Oznaczone jako default_t selinux typ

Podobnie jak w poprzednim przykładzie, możesz użyć następującego polecenia, aby sprawdzić, czy jest to rzeczywiście problem związany z Selinux:

# cat/var/log/audyt/audyt.Log | Grep avc | ogon -1 
Sprawdź dzienniki problemów z Selinux

Zmienić etykietę /WEBRV/Sites/Gabriel/Public_Html rekurencyjnie httpd_sys_content_t, Do:

# semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html (//.*)?" 

Powyższe polecenie zapewni dostęp tylko do odczytu Apache do tego katalogu i jego zawartości.

Wreszcie, aby zastosować zasadę (i natychmiastową zmianę etykiety natychmiast), zrób:

# restorecon -r -v/websrv/witryny/gabriel/public_html 

Teraz powinieneś mieć dostęp do katalogu:

# wget http: // localhost/index.html 
Dostęp do katalogu Apache

Aby uzyskać więcej informacji na temat Selinux, patrz Fedora 22 Selinux i przewodnik administratora.

Strony: 1 2