Więzienie FreeBSD - FreeBSD jail
Więzienie mechanizm jest implementacja FreeBSD „s OS poziomie wirtualizacji , która pozwala administratorom systemu na partycję a FreeBSD pochodzące z A system komputerowy na kilka niezależnych systemów mini zwanych więzieniami , wszystko w obrębie tego samego jądra, z bardzo mało napowietrznych. Jest implementowany poprzez wywołanie systemowe jail (2), a także narzędzie użytkownika jail (8) oraz, w zależności od systemu, szereg innych narzędzi. Funkcjonalność została wprowadzona do FreeBSD w 1999 r. Przez Poula-Henninga Kampa po pewnym okresie użytkowania produkcyjnego przez dostawcę usług hostingowych i została po raz pierwszy wydana wraz z FreeBSD 4.0, dzięki czemu jest obsługiwana przez szereg potomków FreeBSD, w tym DragonFly BSD , do dziś.
Potrzeba więzień FreeBSD wynikała z chęci małego dostawcy hostingu ze współdzielonym środowiskiem (właściciela R&D Associates, Inc., Derrick T. Woolworth), aby ustanowić czyste, wyraźne oddzielenie usług własnych od usług ich klientów. głównie ze względu na bezpieczeństwo i łatwość administracji ( więzienie (8) ). Zamiast dodawać nową warstwę drobnoziarnistych opcji konfiguracyjnych, rozwiązaniem przyjętym przez Poul-Henning Kamp było podzielenie systemu - zarówno jego plików, jak i zasobów - w taki sposób, aby tylko właściwe osoby miały dostęp do odpowiednich przedziałów. .
Historia
Jailsy zostały po raz pierwszy wprowadzone we FreeBSD w wersji 4.0, która została wydana 14 marca 2000 roku . Większość oryginalnych funkcji jest obsługiwana w DragonFly, a kilka nowych funkcji zostało również przeniesionych.
Cele
Więzienia FreeBSD mają głównie trzy cele:
- Wirtualizacja: każde więzienie to wirtualne środowisko działające na maszynie hosta z własnymi plikami, procesami, kontami użytkowników i superużytkowników . W ramach uwięzionego procesu środowisko jest prawie nie do odróżnienia od prawdziwego systemu.
- Bezpieczeństwo: każde więzienie jest oddzielone od innych, zapewniając w ten sposób dodatkowy poziom bezpieczeństwa.
- Łatwość delegowania: ograniczony zakres więzienia umożliwia administratorom systemu delegowanie kilku zadań wymagających dostępu superużytkownika bez przekazywania pełnej kontroli nad systemem.
W przeciwieństwie do więzienia chroot , które ogranicza procesy do określonego widoku systemu plików , mechanizm więzienia FreeBSD ogranicza działania procesu w więzieniu w odniesieniu do reszty systemu. W efekcie uwięzione procesy znajdują się w piaskownicy . Są one powiązane z określonymi adresami IP , a uwięziony proces nie może uzyskać dostępu do gniazd przekierowań ani routingu . Gniazda Raw są również domyślnie wyłączone, ale można je włączyć, ustawiając opcję security.jail.allow_raw_sockets
sysctl . Ponadto interakcja między procesami, które nie działają w tym samym więzieniu, jest ograniczona.
Narzędzie jail (8) i wywołanie systemowe jail (2) pojawiły się po raz pierwszy we FreeBSD 4.0 . Nowe narzędzia (na przykład jls (8) do wyświetlania listy więzień) i wywołania systemowe (na przykład jail_attach (2) do dołączania nowego procesu do więzienia), które znacznie ułatwiają zarządzanie więzieniem, zostały dodane we FreeBSD 5.1. Podsystem więzienia otrzymał kolejne znaczące aktualizacje we FreeBSD 7.2, w tym obsługę wielu adresów IPv4 i IPv6 w każdym więzieniu oraz obsługę powiązania więzień z określonymi procesorami.
Wirtualizacja
W więzieniu można tworzyć różne maszyny wirtualne , z których każda ma zainstalowany własny zestaw narzędzi i własną konfigurację. To sprawia, że jest to bezpieczny sposób na wypróbowanie oprogramowania. Na przykład można uruchomić różne wersje lub wypróbować różne konfiguracje pakietu serwera WWW w różnych więzieniach. A ponieważ więzienie jest ograniczone do wąskiego zakresu, skutki błędnej konfiguracji lub pomyłki (nawet jeśli zostało to zrobione przez superużytkownika więzienia ) nie zagrażają pozostałej integralności systemu. Ponieważ nic nie zostało zmodyfikowane poza więzieniem, „zmiany” można odrzucić, usuwając kopię drzewa katalogów w więzieniu.
Wirtualizacja jest cenna dla dostawców usług, którzy chcą zaoferować swoim użytkownikom możliwość niestandardowych konfiguracji, a jednocześnie zapewnić łatwość utrzymania całego systemu. Na przykład dwóch różnych klientów może potrzebować różnych wersji tego samego oprogramowania. Bez więzień konfigurowanie wielu wersji oprogramowania w różnych katalogach i upewnianie się, że nie naruszają one siebie nawzajem, nie zawsze jest możliwe lub łatwe w utrzymaniu (np. XFree86 jest notorycznie trudny do poruszania się). Z drugiej strony więzienia pozwalają pakietom oprogramowania na egoistyczny przegląd systemu, tak jakby każdy pakiet miał maszynę dla siebie. Więzienia mogą również mieć własnych, niezależnych, uwięzionych superużytkowników.
Więzienie FreeBSD nie zapewnia jednak prawdziwej wirtualizacji; nie pozwala na uruchamianie maszyn wirtualnych w innych wersjach jądra niż w systemie podstawowym. Wszystkie serwery wirtualne współużytkują to samo jądro, a tym samym ujawniają te same błędy i potencjalne luki w zabezpieczeniach. Nie ma obsługi klastrowania ani migracji procesów , więc jądro hosta i komputer hosta nadal stanowią pojedynczy punkt awarii dla wszystkich serwerów wirtualnych. Możliwe jest użycie więzień do bezpiecznego testowania nowego oprogramowania, ale nie nowych jąder.
Bezpieczeństwo
Więzienia FreeBSD są skutecznym sposobem na zwiększenie bezpieczeństwa serwera ze względu na oddzielenie środowiska uwięzionego od reszty systemu (innych więzień i systemu podstawowego).
Na przykład w systemie nieobjętym więzieniem serwer WWW działający jako użytkownik www, który wprowadza lukę w zabezpieczeniach PHP - zawiera lukę w zabezpieczeniach całego systemu: atakujący miałby prawa użytkownika www, który zazwyczaj może modyfikować pliki na serwerze WWW, wędruj po drzewie katalogów i zbieraj informacje, takie jak pełna lista użytkowników, powłoka i katalog domowy z / etc / passwd .
Ale jeśli serwer WWW jest uwięziony, zakres użytkownika www jest ograniczony do więzienia, które z kolei może być na tyle minimalistyczne, że nie ujawnia zbyt wiele. Nawet jeśli napastnik uzyska dostęp do konta superużytkownika więzienia, może modyfikować tylko to więzienie, a nie cały system.
Więzienia FreeBSD są ograniczone w następujący sposób:
- Uwięzione procesy nie mogą wchodzić w interakcje z procesami w innym więzieniu ani na głównym hoście. Na przykład polecenie ps pokaże tylko procesy działające w więzieniu.
- Modyfikowanie działającego jądra poprzez bezpośredni dostęp i ładowanie modułów jest zabronione. Modyfikowanie większości sysctl i poziomu zabezpieczeń jest zabronione.
- Modyfikowanie konfiguracji sieci, w tym interfejsów, interfejsów lub adresów IP i tablicy routingu , jest zabronione. Dostęp do gniazd przekierowań i routingu jest również zabroniony. Ponadto gniazda surowe są domyślnie wyłączone. Więzienie jest powiązane tylko z określonymi adresami IP, a reguł zapory ogniowej nie można zmienić. Wraz z wprowadzeniem VNET (wirtualnego stosu sieciowego), więzienia mogą dowolnie modyfikować swoją konfigurację sieci (w tym interfejsy, adresy IP itp.), Pod warunkiem, że wirtualna sieć jest włączona dla więzienia.
- Montowanie i odmontowywanie systemów plików jest zabronione. Jailsy nie mogą uzyskać dostępu do plików powyżej ich katalogu głównego (tj. Więzienie jest chroot'owane).
- Uwięzione procesy nie mogą tworzyć węzłów urządzeń.