Przewodnik dla początkujących po SELinux

Przewodnik dla początkujących po SELinux

Tłumaczenie artykułu przygotowanego dla studentów kursu „Bezpieczeństwo Linuksa”

SELinux lub Security Enhanced Linux to ulepszony mechanizm kontroli dostępu opracowany przez amerykańską Agencję Bezpieczeństwa Narodowego (NSA) w celu zapobiegania złośliwym włamaniom. Implementuje wymuszony (lub obowiązkowy) model kontroli dostępu (angielski Mandatory Access Control, MAC) w uzupełnieniu istniejącego modelu uznaniowego (lub selektywnego) (angielski Discretionary Access Control, DAC), czyli uprawnienia do odczytu, zapisu i wykonywania.

SELinux ma trzy tryby:

  1. Egzekwowanie — odmowa dostępu w oparciu o zasady polityki.
  2. Puszczalski — prowadzenie rejestru działań naruszających politykę, które w trybie egzekwowania byłyby zabronione.
  3. Niepełnosprawni — całkowite wyłączenie SELinux.

Domyślnie ustawienia są włączone /etc/selinux/config

Zmiana trybów SELinux

Aby sprawdzić bieżący tryb, uruchom

$ getenforce

Aby zmienić tryb na zezwalający, uruchom następujące polecenie

$ setenforce 0

lub, aby zmienić tryb z dozwalający na Egzekwowanie, wykonać

$ setenforce 1

Jeśli chcesz całkowicie wyłączyć SELinux, można to zrobić tylko za pomocą pliku konfiguracyjnego

$ vi /etc/selinux/config

Aby wyłączyć, zmień parametr SELINUX w następujący sposób:

SELINUX=disabled

Konfiguracja SELinuksa

Każdy plik i proces jest oznaczony kontekstem SELinux, który zawiera dodatkowe informacje, takie jak użytkownik, rola, typ itp. Jeśli włączasz SELinux po raz pierwszy, musisz najpierw skonfigurować kontekst i etykiety. Proces przypisywania etykiet i kontekstu nazywany jest tagowaniem. Aby rozpocząć zaznaczanie, w pliku konfiguracyjnym zmieniamy tryb na dozwalający.

$ vi /etc/selinux/config
SELINUX=permissive

Po ustawieniu trybu dozwalający, utwórz pusty ukryty plik w katalogu głównym o nazwie autorelabel

$ touch /.autorelabel

i uruchom ponownie komputer

$ init 6

Uwaga: Używamy trybu dozwalający do oznaczania, od momentu użycia trybu Egzekwowanie może spowodować awarię systemu podczas ponownego uruchamiania.

Nie martw się, jeśli pobieranie utknie na jakimś pliku, zaznaczanie zajmuje trochę czasu. Po zakończeniu zaznaczania i uruchomieniu systemu możesz przejść do pliku konfiguracyjnego i ustawić tryb Egzekwowaniea także uruchom:

$ setenforce 1

Pomyślnie włączyłeś SELinux na swoim komputerze.

Monitorowanie logów

Mogłeś napotkać pewne błędy podczas znakowania lub podczas działania systemu. Aby sprawdzić, czy Twój SELinux działa poprawnie i czy nie blokuje dostępu do żadnego portu, aplikacji itp., musisz zajrzeć do logów. Dziennik SELinux znajduje się w /var/log/audit/audit.log, ale nie trzeba czytać całości, żeby znaleźć błędy. Aby znaleźć błędy, możesz użyć narzędzia audyt2why. Uruchom następujące polecenie:

$ audit2why < /var/log/audit/audit.log

W rezultacie otrzymasz listę błędów. Jeżeli w logu nie było żadnych błędów, to nie zostaną wyświetlone żadne komunikaty.

Konfigurowanie polityki SELinux

Polityka SELinux to zbiór reguł rządzących mechanizmem bezpieczeństwa SELinux. Polityka definiuje zestaw reguł dla określonego środowiska. Teraz dowiemy się, jak skonfigurować zasady, aby umożliwić dostęp do zabronionych usług.

1. Wartości logiczne (przełączniki)

Przełączniki (booleany) umożliwiają zmianę części polityki w czasie wykonywania, bez konieczności tworzenia nowych polityk. Umożliwiają wprowadzanie zmian bez ponownego uruchamiania lub rekompilowania polityk SELinux.

Przykład
Załóżmy, że chcemy udostępnić katalog domowy użytkownika za pośrednictwem protokołu FTP do odczytu/zapisu i już go udostępniliśmy, ale gdy próbujemy uzyskać do niego dostęp, nic nie widzimy. Dzieje się tak, ponieważ polityka SELinux uniemożliwia serwerowi FTP odczytywanie i zapisywanie w katalogu domowym użytkownika. Musimy zmienić politykę, aby serwer FTP mógł uzyskać dostęp do katalogów domowych. Zobaczmy, czy są do tego jakieś przełączniki

$ semanage boolean -l

To polecenie wyświetli listę dostępnych przełączników z ich bieżącym stanem (włączony lub wyłączony) i opisem. Możesz zawęzić wyszukiwanie, dodając grep, aby znaleźć wyniki tylko FTP:

$ semanage boolean -l | grep ftp

i znajdziesz następujące informacje

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Ten przełącznik jest wyłączony, więc włączymy go setsebool $ setsebool ftp_home_dir on

Teraz nasz demon ftp będzie mógł uzyskać dostęp do katalogu domowego użytkownika.
Uwaga: możesz także uzyskać listę dostępnych przełączników bez opisu, wykonując to polecenie getsebool -a

2. Etykiety i kontekst

Jest to najczęstszy sposób wdrażania polityki SELinux. Każdy plik, folder, proces i port jest oznaczony kontekstem SELinux:

  • W przypadku plików i folderów etykiety są przechowywane jako atrybuty rozszerzone w systemie plików i można je przeglądać za pomocą następującego polecenia:
    $ ls -Z /etc/httpd
  • W przypadku procesów i portów etykietowaniem zarządza jądro i można je przeglądać w następujący sposób:

proces

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Przykład
Przyjrzyjmy się teraz przykładowi, aby lepiej zrozumieć etykiety i kontekst. Powiedzmy, że mamy serwer WWW, który zamiast katalogu /var/www/html/ использует /home/dan/html/. SELinux uzna to za naruszenie zasad i nie będziesz mógł przeglądać swoich stron internetowych. Dzieje się tak, ponieważ nie ustawiliśmy kontekstu bezpieczeństwa powiązanego z plikami HTML. Aby wyświetlić domyślny kontekst zabezpieczeń, użyj następującego polecenia:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Tutaj mamy httpd_sys_content_t jako kontekst dla plików HTML. Musimy ustawić ten kontekst bezpieczeństwa dla naszego bieżącego katalogu, który obecnie ma następujący kontekst:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Alternatywne polecenie sprawdzające kontekst bezpieczeństwa pliku lub katalogu:

$ semanage fcontext -l | grep '/var/www'

Będziemy również używać semanage do zmiany kontekstu po znalezieniu prawidłowego kontekstu bezpieczeństwa. Aby zmienić kontekst /home/dan/html, uruchom następujące polecenia:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Po zmianie kontekstu za pomocą semanage polecenie Restorecon załaduje domyślny kontekst dla plików i katalogów. Nasz serwer WWW będzie teraz mógł odczytywać pliki z folderu /home/dan/htmlponieważ kontekst zabezpieczeń dla tego folderu został zmieniony na httpd_sys_content_t.

3. Utwórz zasady lokalne

Mogą zaistnieć sytuacje, w których powyższe metody nie będą dla Ciebie przydatne i w pliku audyt.log pojawią się błędy (avc/denial). Kiedy tak się stanie, musisz utworzyć politykę lokalną. Wszystkie błędy możesz znaleźć za pomocą audytu2why, jak opisano powyżej.

Możesz utworzyć zasady lokalne, aby rozwiązać błędy. Przykładowo dostajemy błąd związany z httpd (apache) lub smbd (samba), grepujemy błędy i tworzymy dla nich politykę:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Tutaj http_policy и smb_policy to nazwy polityk lokalnych, które stworzyliśmy. Teraz musimy załadować utworzone polityki lokalne do bieżącej polityki SELinux. Można to zrobić w następujący sposób:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Nasze lokalne zasady zostały pobrane i nie powinniśmy już otrzymywać żadnych powiadomień ani odmów w pliku audytu.log.

To była moja próba pomocy w zrozumieniu SELinuksa. Mam nadzieję, że po przeczytaniu tego artykułu poczujesz się bardziej komfortowo z SELinux.

Źródło: www.habr.com

Dodaj komentarz