Wdrożenie obowiązkowej kontroli dostępu z Selinux lub Apparmor w Linux
- 4098
- 777
- Roland Sokół
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.
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:
- Egzekwowanie: Selinux zaprzecza dostępu na podstawie zasad zasad Selinux, zestawu wytycznych kontrolujących silnik bezpieczeństwa.
- 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:
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:
- Zmiana domyślnego portu, w którym rozpuszcza się demon.
- 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 SSHDSprawdź 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 -1Sprawdź 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 SshPrzypisz 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.htmlOznaczone 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 -1Sprawdź 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.htmlDostęp do katalogu Apache
Aby uzyskać więcej informacji na temat Selinux, patrz Fedora 22 Selinux i przewodnik administratora.
Strony: 1 2- « Konfigurowanie usług e -mail (SMTP, IMAP i IMAPS) i ograniczenie dostępu do SMTP - Część 7
- Narzędzie do monitorowania i analizy wydajności dla Linux »