Translation(s): English - Polski


Wprowadzenie do SELinux na Debianie

SELinux odróżnia się od tradycyjnego modelu bezpieczeństwa systemu Linux tym że oprócz tradycyjnego identyfikatora użytkownika UNIX i identyfikatora grupy, że również przywiązuje do standardowego modelu bezpieczeństwa użytkownika SELinux, rolę, dziedzinę (typ) i etykietę wrażliwości na każdy plik i proces.

Dla większości operacji konkretne dziedziny są wymagane, ale zamiast logować się do dziedziny, konkretne procesy będą przełączać się pomiędzy dziedzinami automatycznie, np. kiedy uruchamiasz komendę "ping" jesteś przełączany do dziedziny która może obsłużyć ICMP. Zobacz stronę SELinux aby uzyskać więcej informacji i stronę SELinux/Issues aby uzyskać więcej informacji na temat bieżących problemów dotyczących SELinux w Debianie.

Na tej stronie opisano, jak skonfigurować SELinux w systemie Debian GNU/Linux.


Kroki, aby skonfigurować SELinux

Następujące kroki wyjaśniają jak zainstalować i skonfigurować SELinux razem z domyślną polityką, która włącza SELinux dla większości najważniejszych części twojego systemu (np. większość internetowych demonów, zobacz rozdział polityka poniżej alternatywnych polityk):

  1. Jeśli nie używasz standardowego kernela dostarczonego przez Debiana z ext2/3/4, trzeba się upewnić, że używasz SELinux kompatybilnego z jądrem i systemem plików (zobacz rozdział wymagania poniżej).

  2. Uzyskaj domyślną politykę i podstawowy zestaw narzędzi SELinux poprzez uruchomienie apt-get install selinux-basics selinux-policy-default auditd.

    • Uwaga: Przed jessie, jeśli włączyłeś instalację rekomendowanych pakietów (domyślnie), możesz mieć spore zależności jak xserver czy dbus. Jeśli nie chcesz tego, nie instaluj setools, który jest zalecany przez auditd i selinux-basics.
  3. Jeśli używasz Ubuntu, pobierz skrypt _load_selinux_policy (jest to nieco zmodyfikowana wersja skryptu zawartego w pakiecie 'selinux' Ubuntu), umieść go w folderze /usr/share/initramfs-tools/scripts/init-bottom/ i uruchom update-initramfs -u (Upstart w Debianie ładuje politykę SELinux automatycznie, ale Upstart w Ubuntu nie). Zobacz https://bugs.launchpad.net/upstart/+bug/595774)

  4. Uruchom selinux-activate aby skonfigurować GRUB i PAM i aby utworzyć /.autorelabel

  5. Ponownie uruchom, to zajmie pewien czas aby oznaczyć systemy plików w trakcie rozruchu a następnie zostanie on automatycznie ponownie uruchomiony po raz drugi, gdy to nastąpi.
  6. Uruchom check-selinux-installation Aby sprawdzić, czy wszystko zostało poprawnie skonfigurowane i wykryć powszechne problemy SELinux. (Uwaga: w wheezy ostrzeżenie o /etc/pam.d/login jest fałszywie pozytywne)

Teraz powinieneś mieć działający system SELinux, którego tryb to pozwalający. Oznacza to, że polityka SELinux nie jest egzekwowana, ale odmowy są rejestrowane. Możesz zobaczyć wszystkie przypadki odrzucenia od ostatniego uruchomienia komputera z małym wyjaśnieniem dla każdego używając audit2why -al. Jeśli w syslogu nie wystąpią krytyczne błędy w kontroli i możesz czuć się komfortowo z SELinuxem, włącz tryb wymuszania tymczasowo, uruchamiając setenforce 1 lub na stałe dodając enforcing = 1 do wiersza polecenia jądra w /etc/default/grub, a następnie zrestartuj komputer po raz ostatni.

Jeśli chcesz nauczyć się pracy z nowo skonfigurowanym systemem SELinux (zmiany etykiet plików, przenoszenie plików, sprawdzanie kontekstu bezpieczeństwa plików itd.), dokumentacja Fedora Project SELinux FAQ stworzona przez RedHat może być użyteczna.


Wymagania wstępne: systemy plików

Przede wszystkim musisz używać systemu plików obsługującego SELinux. Obecnie obejmuje to btrf, ext2, ext3, ext4, jfs i xfs. Dla ext2/3/4 nie ma nic specjalnego do zapoznania się, ale dla innych systemów plików nadal istnieją pewne dziwactwa:

btrfs

Aktualnie operacja autorelabel nie zawiera podwolumenów na btrfs. Potrzebujesz ręcznie zmienić etykiety podwolumenu. Gdy jest oznaczony każdy, wszystko działa poprawnie.

SquashFS

SquashFS posiada wsparcie dla xattr (który jest wymagany dla etykietowania plików SELinux) od wersji kernela 2.6.30.

ReiserFS

ReiserFS ma częściowe wsparcie dla SELinux, ponieważ obsługuje rozszerzone atrybuty, ale nie atomowego etykietowania co znaczy, że nowo utworzone pliki nie będą miały kontekstu SELinux, który sprawia, że korzystanie SELinux pod ReiserFS dość bolesne. ReiserFS nie jest obsługiwany przez narzędzia, takie jak fixfiles, więc najpierw należy przenieść do jednego z wyżej wymienionych systemów plików, jeśli zamierzasz używać SELinuksa.

xfs

Jeśli używasz xfs, powinieneś utworzyć system plików z opcją "-isize=512". Domyślny rozmiar inode to jest 256 bajtów, który nie jest wystarczająco duży dla xattr w SELinux, a xattr muszą być przechowywane w oddzielnych blokach. Zajmie to miejsce na dysku i będzie mniej efektywne. Więcej informacji na ten temat można znaleźć pod adresem http://www.redhat.com/magazine/001nov04/features/selinux/.

Powyższe informacje są przestarzałe, a od 2010 roku z ostatnich wersji XFS i SELinux nie występują znaczne korzyści zmienić domyślny format plików węzła 256, gdyż SELinux używa innego algorytmu do zwalczania tego problemu. Zobacz https://www.crc.id.au/2010/09/29/selinux-on-xfs-filesystems/ https://bugzilla.redhat.com/show_bug.cgi?id=207143

Wymagania wstępne: funkcje jądra

Po drugie musisz upewnić się, że kernel zawiera wszystkie niezbędne funkcje do uruchomienia SELinux. Jeśli używasz jądra spakowanego z Debianem, możesz pominąć resztę tej sekcji, ponieważ jądra Debiana zawierają już wszystkie niezbędne funkcje SELinux, więc zacznij od razu od kroków konfiguracji.

Jeśli sam budujesz jądro, upewnij się, że CONFIG_AUDIT i CONFIG_SECURITY_SELINUX są włączone. Upewnij się również, że rozszerzyłeś atrybuty (XATTRs) dla Twoich systemów plików, ponieważ jest używany do etykietowania plików z odpowiednimi kontekstami SELinux. W przypadku niektórych systemów plików (np. ReiserFS) konieczne jest również włączenie etykiet zabezpieczających jako oddzielnej opcji oprócz rozszerzonych atrybutów.

Uwaga: rozszerzone atrybuty (xattr) nie są tym samym co user_xattr których wsparcie nie jest wymagane dla SELinux.

Gdy konfiguracja jest zadowalająca: zbuduj, zainstaluj i zrestartuj się do nowego jądra, a następnie postępuj zgodnie z powyższą procedurą setup steps.


Poprawki specyficzne dla pakietów

Wiele poniższych kroków to poprawki i obejścia problemów wymienionych w sekcji ?SELinuxStatus i w raporty o błędach z usertag w SELinux.

pam

Niektóre pliki konfiguracyjne PAM muszą mieć dodane "session required pam_selinux.so multiple", selinux-activate robi potrzebne zmiany.

initscripts

W /etc/default/rcS:

serwery mail (postfix/exim/etc)

Podczas gdy istnieje moduł reguł dla exim, zdecydowanie zaleca się użycie postfixa, ponieważ polityka postfix jest jedyną, która ma wystarczające testy w Debianie.

Jeśli używasz postfix, wyłącz chroot-support, uruchamiając postfix-nochroot. Należy pamiętać, że to polecenie może być uruchamiane wiele razy (co jest czasami konieczne, jeśli uruchomiono inny skrypt dodający nowy wpis do /etc/postfix/master.cf), ale najpierw musisz przenieść plik kopii zapasowej.

Możesz dodać do /etc/default/postfix linijkę:

echo 'SYNC_CHROOT="n"' >> /etc/default/postfix

w celu uniknięcia awarii check-selinux-installation: skrypt inicjujący Postfix synchronizuje chroot

codzienna kopia zapasowa passwd's w cronjob

Pakiet shadow} zawiera codzienne cronjob do tworzenia kopii zapasowych niektórych plików systemowych, w tym /etc/shadow. Ze względów bezpieczeństwa nie chcesz, aby cron mógł odczytać ten plik, więc zmień /etc/cron.daily/passwd i wyłączyć część tworzącą kopie zapasowe /etc/shadow i /etc/gshadow.

locate i updatedb

"locate" jest częścią fileutils, i był uważany za użyteczne narzędzie do wyszukiwania plików w Twoim systemie (na nowoczesnych serwerach może poważnie zaszkodzić wydajności, podczas gdy na małych systemach znajduje wystarczająco szybko). Aby to zrobić, trzeba jednak skanować cały system plików plików, co wymagałoby dość obszernych uprawnień SELinux i może pozwolić na "wyciek informacji". W przeszłości locate zostało wykorzystane do pomijania kontroli dostępu SELinux (ze względu na wadę projektu). Ta luka projektowa została naprawiona, ale nadal zaleca się jego nie używać.

Aby zrobić to, umieść exit 0 jako drugą linijkę /etc/cron.daily/find (lub /etc/cron.daily/mlocate).


Pułapki

Te dodatkowe uprawnienia które muszą być spełnione oczywiście zabraniają wielu rzeczy, do których jesteś przyzwyczajony.

Na przykład, zwykły użytkownik (w zależności od polityki) może nie być w stanie wykonać żądania "ping", dopóki nie ustawisz stałej logicznej "user_ping".

Ale w większości przypadków, to nie będzie proste ustawić stałą logiczną - w większości przypadków, różne zachowanie jest aktualnie oczekiwane.

Kopie zapasowe

Podczas tworzenia kopii zapasowej systemu SELinux upewnij się, że kopia zapasowa zawiera konteksty plików. Zaawansowana implementacja tar star umożliwia przechowywanie rozszerzonych atrybutów (czyli tego, co SELinux używa do przechowywania kontekstów plików), jeśli jest używany z opcją -xattr-H = Exustar. Alternatywnie można też uruchomić fixfiles relabel po przywróceniu kopii zapasowej w celu zresetowania wszystkich kontekstów plików do domyślnych ustawień zasad (co oznacza utratę zmodyfikowanych kontekstów - chociaż nie jest to powszechnie stosowane w typowych aplikacjach serwerowych (niezbyt często z aplikacjami użytkownika). Możesz także uruchomić restorecon -R / whatever, aby przywrócić kontekst plików, które zostały przywrócone z kopii zapasowej.

Xen domU

Po włączeniu SELinux w instancji Xen domU upewnij się, że zawiera wpis /etc/fstab dla Twojego systemu plików głównych. Programy takie jak fixfiles polegają na wynikach z komendy mount, aby zgłosić typ systemu plików. Bez wpisu /etc/fstab wpis mount zgłosi typ systemu plików w postaci rootfs i fixfiles} w ukryciu. Uniemożliwi to prawidłowe operowanie znacznikami operacji, takich jak touch/.autorelabel i fixfiles relabel/}. Oczywiście możesz to zrobić, nawet jeśli nie używasz SELinux.

Prosty /etc/fstab dla systemu plików głównych Xen domU z tylko jedną partycją wygląda tak:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/hda        /               ext3    defaults        0       2


Polityki

Masz wybór między niektórymi wariantami tak zwanej polityki referencyjnej SELinux: gotowej selinux-policy-default lub źródła polityki referencyjnej selinux-policy-src (którą można użyć, jeśli chcesz zmodyfikować zasadę lub zbudować własną).

Tak na przykład:

Spodowuje to dodanie kilku wymaganych narzędzi i bibliotek, np. checkpolicy i/lub policycoreutils. Możesz także potrzebować pakietu selinux-basics.

Opcjonalnie, mozesz także zainstalować kilka pakietów powiązanych z SELinux takich jak selinux-utils, setools, polgen, polgen-doc, slat, selinux-policy-doc itd., ale te nie są wymagane dla minimalnej konfiguracji.

Gotowe polityki (ścisłe i ukierunkowane) próbują odgadnąć, które pakiety zostały zainstalowane i włączyć odpowiednie moduły zasad dla tych. Na przykład, jeśli zainstalowano ssh, zostanie załadowany moduł zasad ssh. Może to jednak nie działać w przypadku wszystkich pakietów, więc może być konieczne pewne ręczne dostosowanie.

Podczas uruchamiania z włączonym SELinux, można uzyskać wiele komunikatów o błędach w syslog podczas startu systemu i po tym. Jeśli czujesz się na siłach, może chcesz zainstalować selinux-policy-src, naprawić (lub napisać nowe) polityki, relabel system plików itd. Oczywiście z najnowszej polityki można tworzyć własną politykę i moduły, dzięki czemu można dokonać większości zmian, których chciałbyś, ale nadal używając selinux-policy-default do większości zasad w systemie.