Linux LXC a FreeBSD jail

Czy są jakieś znaczące różnice między LXC (kontenerami Linuksa) i FreeBSD „s więzienia pod względem bezpieczeństwa, stabilności & wydajności?

Na początek spójrz, oba podejścia wyglądają bardzo podobnie.

Komentarze

  • LXC to dość nowa technologia, więc spodziewałbym się lepszego bezpieczeństwa i stabilności w więzieniach. Nie nawet domysł na temat wydajności. Istnieją pewne znane problemy z bezpieczeństwem LXC, które można złagodzić używając na przykład selinuksa. Osobiście lubię LXC.
  • @ PavelŠimerda Właśnie słyszałem o LXC dzisiaj, ale byłem ze zdziwieniem okazało się, że Heroku i prawdopodobnie Google App Engine używają już LXC.
  • Jeśli ' właśnie wpadłeś na LXC, powinieneś rzucić okiem na Dockera, który używa LXC pod maską: docker.io/the_whole_story
  • Docker robi n ot używa lxc już.
  • @nwildner nie ' nie używa już liblxc, ale używa dokładnie tych samych pojęć: przestrzeni nazw jądra.

Odpowiedź

Bez względu na wyszukaną nazwę tutaj użytą, obie są rozwiązaniami konkretnego problemu: Lepsze rozwiązanie do segregacji niż klasyczny Unix chroot . Wirtualizacja na poziomie systemu operacyjnego, kontenery, strefy, a nawet „chroot ze sterydami” to nazwy lub tytuły handlowe, które definiują tę samą koncepcję separacji przestrzeni użytkownika, ale mają inne funkcje.

Chroot został wprowadzony 18 marca 1982 roku. , kilka miesięcy przed wydaniem 4.2 BSD , jako narzędzia do testowania instalacji i budowania systemu, ale dziś wciąż ma on swoje wady. Ponieważ pierwszym celem chroot było jedynie zapewnienie ścieżki newroot , odkryto inne aspekty systemu, które należało odizolować lub kontrolować (sieć, widok procesu, przepustowość we / wy). To tam pojawiły się pierwsze kontenery (wirtualizacja na poziomie użytkownika).

Obie technologie (FreeBSD Jails i LXC) wykorzystują izolację przestrzeni użytkownika, aby zapewnić kolejną warstwę bezpieczeństwa. Ta segmentacja zapewni, że określony proces będzie się komunikował tylko z innymi procesami w tym samym kontenerze na tym samym hoście, a jeśli użyjesz dowolnego zasobu sieciowego do osiągnięcia komunikacji „ze światem zewnętrznym”, wszystko zostanie przekazane do przypisanego interfejsu / kanału, który ten kontener has.

Funkcje

Jails FreeBSD:

  • Uważana za stabilną technologię, ponieważ jest funkcją FreeBSD od 4.0;
  • Wykorzystuje to, co najlepsze w systemie plików ZFS w momencie, w którym można klonować więzienia i tworzyć szablony więzień , aby łatwo wdrożyć więcej więzień. Trochę więcej szaleństwa ZFS ;
  • Dobrze udokumentowane i ewoluuje ;
  • Hierarchiczne więzienia umożliwiają tworzenie więzień wewnątrz więzienia (musimy wejść głębiej!). Połącz z allow.mount.zfs, aby uzyskać większą moc, a inne zmienne, takie jak children.max, definiują maksymalną liczbę więzień dla dzieci.
  • rctl (8) zajmie się limitami zasobów więzień (pamięć, procesor, dysk, …);
  • Więzienia FreeBSD obsługują Linuksa przestrzeń użytkownika ;
  • Izolacja sieci z vnet, pozwalająca każdemu więzieniu mieć własny stos sieciowy, interfejsy, tablice adresowania i routingu;
  • nullfs ułatwiające łączenie folderów z folderami znajdującymi się na prawdziwym serwerze do wnętrza więzienia;
  • ezjail narzędzie ułatwiające masowe wdrażanie i zarządzanie więzieniami;
  • Wiele możliwości dostrajania jądra (sysctl ). Parametry security.jail.allow.* ograniczą działania głównego użytkownika tego więzienia.
  • Być może więzienia FreeBSD rozszerzą niektóre funkcje projektu VPS, takie jak migracja na żywo w najbliższej przyszłości.
  • Istnieje pewien wysiłek związany z integracją ZFS i Docker bieganie. Nadal w fazie eksperymentalnej.
  • FreeBSD 12 obsługuje bhyve w więzieniu i pf w więzieniu, zapewniając dalszą izolację tych narzędzi.
  • W ostatnich latach opracowano wiele interesujących narzędzi. Niektóre z nich są indeksowane w tym poście na blogu .
  • Alternatywy: Projekt FreeBSD VPS

Kontenery Linuksa (LXC):

  • Nowa technologia „w jądrze”, ale wspierana przez duże (szczególnie kanoniczne);
  • Kontenery nieuprzywilejowane , począwszy od LXC 1.0, robi duży krok w kierunku bezpieczeństwa w kontenerach;
  • mapowanie UID i GID wewnątrz kontenerów;
  • Przestrzenie nazw jądra, aby oddzielić IPC, montowanie, pid, sieć i użytkowników. Te przestrzenie nazw mogą być obsługiwane w sposób odłączony, gdzie proces używający innej sieciowej przestrzeni nazw niekoniecznie będzie izolowany w innych aspektach, takich jak przechowywanie;
  • Grupy kontrolne (cgroups) do zarządzania zasobami i grupowania ich. CGManager to osoba, która to osiągnie.
  • Profile Apparmor / SELinux i możliwości jądra dla lepszego egzekwowania funkcji jądra dostępnych w kontenerach. Seccomp jest również dostępny w kontenerach lxc do filtrowania wywołań systemowych. Inne aspekty bezpieczeństwa tutaj .
  • Funkcjonalność migracji na żywo w trakcie opracowywania. Naprawdę trudno powiedzieć, kiedy będzie gotowy do użytku produkcyjnego, ponieważ docker / lxc będzie musiał radzić sobie z wstrzymywaniem procesu w przestrzeni użytkownika, migawką, migracją i konsolidacją – ref1 , ref2 . Migracja na żywo działa z podstawowymi kontenerami (brak przekazywania urządzeń ani skomplikowanych usług sieciowych, ani specjalnych konfiguracji pamięci).
  • Wiązania API umożliwiające programowanie w językach python3 i 2, lua, Go, Ruby i Haskell
  • Scentralizowany obszar „Co nowego”. Całkiem przydatne, gdy trzeba sprawdzić, czy jakiś błąd został naprawiony lub czy została wprowadzona nowa funkcja. Tutaj .
  • Ciekawą alternatywą może być lxd , który pod maską działa z lxc, ale ma kilka fajnych funkcji, takich jak REST API, integracja z OpenStack itp.
  • Kolejne interesujące rzecz w tym, że Ubuntu wydaje się wysyłać zfs jako domyślny system plików dla kontenerów na 16.04 . Aby zachować zgodność projektów, lxd wypuścił wersję 2.0, a niektóre funkcje są powiązane z zfs .
  • Alternatywy : OpenVZ , Docker
  • Docker . Należy zauważyć, że Docker używa przestrzeni nazw, grup cgroup tworząc izolację „na aplikację” / „na oprogramowanie” . Kluczowe różnice tutaj . Podczas gdy LXC tworzy kontenery z wieloma procesami, Docker redukuje kontener w jak największym stopniu do jednego procesu, a następnie zarządza nim za pomocą Dockera.
  • Wysiłek związany z integracją Dockera z SELinux i zmniejszeniem możliwości wewnątrz kontenera, aby uczynić go bezpieczniejszym – Docker i SELinux, Dan Walsh
  • Jaka jest różnica między Dockerem, LXD i LXC

Docker nie używa już lxc. Mają teraz konkretna biblioteka o nazwie runc , który bezpośrednio obsługuje integrację z obszarem nazw jądra i funkcjami grup cgroup niskiego poziomu.

Żadna z technologii nie jest panaceum na bezpieczeństwo, ale obie są całkiem dobrymi sposobami izolowania środowisko, które nie wymaga pełnej wirtualizacji ze względu na infrastrukturę mieszanych systemów operacyjnych. Bezpieczeństwo pojawi się po przeczytaniu dużej ilości dokumentacji i wdrożeniu dostrajania jądra, adresów MAC i izolacji, które oferują ci virt na poziomie systemu operacyjnego.

Zobacz także:

Komentarze

  • Warto wspomnieć, że po wyjęciu z pudełka, lxc nie stara się zapewnić właściwej izolacji gości. Jednak lxd próbuje zapewnić izolację, taką jak więzienia BSD lub strefy Solaris.
  • lxd to " lepsze doświadczenie " LXC, dodając inne funkcje. Jednak fajnie byłoby zacytować tego małego gościa tutaj
  • @allquixotic masz na myśli, jeśli używasz niezmienionej konfiguracji utworzonej z szablonów? To prawda, ale kontenery nieuprzywilejowane (z obsługą użytkowników) były dostępne w LXC 1.x i mogły być nawet automatycznie uruchamiane podczas rozruchu systemu, pod warunkiem, że należały do root (a więc znajdowały się w systemowej lokalizacji kontenerów).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *