
Tłumaczenie artykułu przygotowane dla studentów kursu
SELinux, czyli Security Enhanced Linux, to zaawansowany mechanizm zarządzania dostępem, opracowany przez Agencję Bezpieczeństwa Narodowego USA (NSA) w celu zapobiegania złośliwym atakom. Wdraża on przymusowy (lub mandatujący) model zarządzania dostępem (ang. Mandatory Access Control, MAC) na szczycie istniejącego dyskrecjonalnego (lub wybiórczego) modelu (ang. Discretionary Access Control, DAC), czyli uprawnień do odczytu, zapisu i wykonania.
SELinux ma trzy tryby:
- Wymuszający — zabrania dostępu na podstawie reguł polityki.
- Zezwalający — prowadzi dziennik działań naruszających politykę, które w trybie wymuszającym byłyby zabronione.
- Wyłączony — całkowite wyłączenie SELinux.
Domyślnie ustawienia znajdują się w /etc/selinux/config
Zmiana trybów SELinux
Aby sprawdzić bieżący tryb, uruchom
$ getenforceAby zmienić tryb na zezwalający, uruchom następujące polecenie
$ setenforce 0lub, aby zmienić tryb z zezwalającego na na wymuszający, wykonaj
$ setenforce 1Jeśli chcesz całkowicie wyłączyć SELinux, można to zrobić tylko poprzez plik konfiguracyjny
$ vi /etc/selinux/configAby wyłączyć, zmień parametr SELINUX w następujący sposób:
SELINUX=disabledKonfiguracja SELinux
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ć konteksty i etykiety. Proces przypisywania etykiet i kontekstu znany jest jako etykietowanie. Aby rozpocząć etykietowanie, w pliku konfiguracyjnym zmieniamy tryb na zezwalającego.
$ vi /etc/selinux/config
SELINUX=permissivePo ustawieniu trybu zezwalającego, stwórz w katalogu głównym pusty ukryty plik o nazwie .autorelabel
$ touch /.autorelabela uruchom ponownie komputer
$ init 6Uwaga: używamy trybu zezwalającego do etykietowania, ponieważ użycie trybu na wymuszający może prowadzić do awarii systemu podczas uruchamiania.
Nie martw się, jeśli start utknie na jakimś pliku, etykietowanie zajmuje trochę czasu. Po zakończeniu etykietowania i uruchomieniu systemu możesz przejść do pliku konfiguracyjnego i ustawić tryb na wymuszający, a także uruchomić:
$ setenforce 1Teraz pomyślnie włączyłeś SELinux na swoim komputerze.
Monitorujemy dzienniki
Możliwe, że wystąpiły jakieś błędy podczas oznaczania lub pracy systemu. Aby sprawdzić, czy SELinux działa poprawnie i czy nie blokuje dostępu do jakiegoś portu, aplikacji itp., należy sprawdzić logi. Log SELinux znajduje się w /var/log/audit/audit.log, ale nie musisz go czytać w całości, aby znaleźć błędy. Można użyć narzędzia audit2why do wyszukiwania błędów. Uruchom następującą komendę:
$ audit2why < /var/log/audit/audit.logW rezultacie otrzymasz listę błędów. Jeśli w logu nie było błędów, nie będą wyświetlane żadne komunikaty.
Konfiguracja polityki SELinux
Polityka SELinux to zbiór reguł, którymi kieruje się mechanizm bezpieczeństwa SELinux. Polityka określa zestaw reguł dla konkretnego środowiska. Teraz przyjrzymy się, jak konfigurować polityki, aby zezwolić na dostęp do zabronionych usług.
1. Wartości logiczne (przełączniki)
Przełączniki (booleany) pozwalają na zmianę części polityki w czasie rzeczywistym, bez potrzeby tworzenia nowych polityk. Umożliwiają wprowadzanie zmian bez restartu lub rekompilacji polityk SELinux.
Przykład
Załóżmy, że chcemy umożliwić wspólny dostęp do katalogu domowego użytkownika przez FTP w trybie odczytu i zapisu, i już go udostępniliśmy, ale przy próbie dostępu nic nie widzimy. Jest to spowodowane tym, że polityka SELinux zabrania serwerowi FTP odczytywania i zapisywania w katalogu domowym użytkownika. Musimy zmienić politykę, aby serwer FTP mógł uzyskiwać dostęp do katalogów domowych. Sprawdźmy, czy istnieją jakieś przełączniki do tego, wykonując
$ semanage boolean -lTa komenda wyświetli listę dostępnych przełączników z ich aktualnym stanem (włączone/on lub wyłączone/off) oraz opisem. Możesz doprecyzować wyszukiwanie, dodając grep, aby znaleźć wyniki, które dotyczą tylko FTP:
$ semanage boolean -l | grep ftpi znajdziesz następne
ftp_home_dir -> off Allow ftp to read & write file in user home directoryTen przełącznik jest wyłączony, więc aktywujemy go za pomocą 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 getsebool -a
2. Etykiety i kontekst
To najczęściej stosowany sposób realizacji polityki SELinux. Każdy plik, katalog, proces i port są oznaczane kontekstem SELinux:
- Dla plików i folderów etykiety są przechowywane jako atrybuty rozszerzone w systemie plików i można je przeglądać następującym poleceniem:
$ ls -Z /etc/httpd - Dla procesów i portów etykietowanie jest zarządzane przez jądro, a etykiety można zobaczyć w następujący sposób:
proces
$ ps –auxZ | grep httpdport
$ netstat -anpZ | grep httpdPrzykład
Teraz przyjrzyjmy się przykładzie, aby lepiej zrozumieć etykiety i kontekst. Załóżmy, że mamy serwer www, który zamiast katalogu /var/www/html/ использует /home/dan/html/. SELinux uzna to za naruszenie polityki, a ty nie będziesz mógł przeglądać swoich stron internetowych. Dzieje się tak, ponieważ nie ustawiliśmy kontekstu zabezpieczeń związanego z plikami HTML. Aby zobaczyć kontekst zabezpieczeń domyślnie, 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 otrzymaliśmy httpd_sys_content_t jako kontekst dla plików html. Musimy ustawić ten kontekst zabezpieczeń 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 do sprawdzenia kontekstu zabezpieczeń pliku lub katalogu:
$ semanage fcontext -l | grep '/var/www'Będziemy także używać semanage do zmiany kontekstu, po tym jak znajdziemy odpowiedni kontekst zabezpieczeń. Aby zmienić kontekst /home/dan/html, wykonaj 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/htmlPo zmianie kontekstu za pomocą semanage, polecenie restorecon załaduje kontekst domyślny dla plików i katalogów. Nasz serwer WWW teraz będzie mógł czytać pliki z folderu /home/dan/html, ponieważ kontekst zabezpieczeń dla tego folderu został zmieniony na httpd_sys_content_t.
3. Tworzenie lokalnych polityk
Mogą wystąpić sytuacje, w których powyższe metody będą dla Ciebie bezużyteczne, a Ty otrzymujesz błędy (avc/denial) w audit.log. Gdy takie coś się wydarza, należy stworzyć lokalną politykę.
Aby usunąć błędy, można stworzyć lokalną politykę. Na przykład, otrzymując błąd związany z httpd (apache) lub smbd (samba), przeszukujemy błędy i tworzymy 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_policyTutaj http_policy i smb_policy — to nazwy lokalnych polityk, które stworzyliśmy. Teraz musimy załadować te stworzone lokalne polityki do bieżącej polityki SELinux. Można to zrobić w następujący sposób:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.ppNasze lokalne polityki zostały załadowane i nie powinniśmy już otrzymywać żadnych avc ani denail w audit.log.
To była moja próba pomóc ci zrozumieć SELinux. Mam nadzieję, że po przeczytaniu tego artykułu poczujesz się bardziej komfortowo z SELinux.
Źródło: habr.com
