Linux LXC vs więzienie FreeBSD

62

Czy istnieją jakieś znaczące różnice między LXC (kontenery Linux) a więzieniem FreeBSD pod względem bezpieczeństwa, stabilności i wydajności?

Na pierwszy rzut oka oba podejścia wyglądają bardzo podobnie.

Philipp Claßen
źródło
1
LXC jest raczej nową technologią, więc oczekiwałbym lepszego bezpieczeństwa i stabilności w więzieniach. Nawet zgadywania o wydajności. Istnieje kilka znanych problemów związanych z bezpieczeństwem w LXC, które można złagodzić na przykład za pomocą selinux. Jednak osobiście lubię LXC.
Pavel Šimerda
1
@ PavelŠimerda Właśnie słyszałem dzisiaj o LXC, ale byłem zaskoczony, gdy dowiedziałem się, że zarówno Heroku, jak i prawdopodobnie Google App Engine już używają LXC.
Philipp Claßen
1
Docker nie używa już LXC.
1
@ nwildner nie używa już liblxc, ale używa dokładnie tych samych pojęć: przestrzeni nazw jądra.
0xC0000022L

Odpowiedzi:

101

Bez względu na zastosowaną tutaj fantazyjną nazwę, oba są rozwiązaniami konkretnego problemu: lepszym rozwiązaniem do segregacji niż klasyczny chroot z Uniksa . Wirtualizacja na poziomie systemu operacyjnego, kontenery, strefy, a nawet „chroot ze sterydami” to nazwy lub tytuły komercyjne, które definiują tę samą koncepcję separacji przestrzeni użytkownika, ale z różnymi funkcjami.

Chroot został wprowadzony 18 marca 1982 r., Kilka miesięcy przed wydaniem 4.2 BSD , jako narzędzie do testowania jego systemu instalacyjnego i kompilacji, ale dziś wciąż ma swoje wady. Ponieważ pierwszym celem chroot było jedynie zapewnienie ścieżki newroot , odkryto inne aspekty systemu, które musiały być izolowane lub kontrolowane (sieć, widok procesu, przepustowość we / wy). Tutaj 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. Podział ten zapewni, że określony proces będzie komunikował się 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 „na zewnątrz”, wszystko zostanie przesłane do przypisanego interfejsu / kanału, który ten kontener ma.

cechy

JBS FreeBSD:

  • Uważana za stabilną technologię, ponieważ jest to funkcja wewnątrz FreeBSD od 4.0;
  • Wykorzystuje to, co najlepsze w systemie plików ZFS, w miejscu, w którym można klonować więzienia i tworzyć szablony więzień, aby łatwo wdrożyć więcej więzień. Trochę szaleństwa ZFS ;
  • Dobrze udokumentowane i rozwijające się ;
  • Hierarchiczne Więzienia pozwalają tworzyć więzienia wewnątrz więzienia (musimy wejść głębiej!). Połącz z, allow.mount.zfsaby uzyskać większą moc, a inne zmienne, takie jak children.maxdo, określają maksymalną liczbę więzień dla dzieci.
  • rctl (8) obsłuży limity zasobów więzień (pamięć, procesor, dysk, ...);
  • Więzienia FreeBSD obsługują przestrzeń użytkownika Linuksa ;
  • Izolacja sieci vnet, umożliwiająca każdemu więzieniu posiadanie własnego stosu sieciowego, interfejsów, tablic adresowania i routingu;
  • nullfs pomoc w łączeniu folderów z folderami znajdującymi się na prawdziwym serwerze w więzieniu;
  • narzędzie ezjail do pomocy w masowych wdrożeniach i zarządzaniu więzieniem;
  • Wiele tuneli jądra ( sysctl). security.jail.allow.*parametry ograniczą działania użytkownika root w tym więzieniu.
  • Być może więzienia FreeBSD rozszerzą niektóre funkcje projektu VPS, takie jak migracja na żywo w najbliższej przyszłości.
  • Trwa wysiłek związany z integracją ZFS i Docker . Wciąż eksperymentalna.
  • FreeBSD 12 obsługuje bhyve wewnątrz więzienia i pf wewnątrz więzienia, tworząc dalszą izolację tych narzędzi
  • W ciągu ostatnich lat opracowano wiele interesujących narzędzi. Niektóre z nich są indeksowane w tym poście na blogu .
  • Alternatywy: projekt FreeBSD VPS

Kontenery Linux (LXC):

  • Nowa technologia „w jądrze”, ale wspierana przez duże (szczególnie kanoniczne);
  • Nieuprzywilejowane kontenery, począwszy od LXC 1.0, stanowią duży krok w kierunku bezpieczeństwa wewnątrz kontenerów;
  • Mapowanie UID i GID w kontenerach;
  • Przestrzenie nazw jądra, aby oddzielić IPC, mount, pid, sieć i użytkowników. Te przestrzenie nazw mogą być obsługiwane w oderwany sposób, w którym proces korzystający z innej sieciowej przestrzeni nazw niekoniecznie będzie izolowany w innych aspektach, takich jak pamięć;
  • Grupy kontrolne (cgroups) do zarządzania zasobami i grupowania ich. CGManager jest facetem, który to osiąga.
  • Profile Apparmor / SELinux i możliwości jądra dla lepszego egzekwowania funkcji jądra dostępnych dla kontenerów. Seccomp jest również dostępny w kontenerach LXC do filtrowania wywołań systemowych. Inne aspekty bezpieczeństwa tutaj .
  • Opracowywana jest funkcja migracji na żywo. To naprawdę trudno powiedzieć, kiedy będzie gotowy do użytku produkcyjnego, ponieważ doker / lxc mają do czynienia z przerwą proces przestrzeni użytkownika, snapshot, migracji i konsolidacji - ref1 , ref2 .Migracja na żywo działa z podstawowymi kontenerami (bez przechodzenia przez urządzenie ani złożonych usług sieciowych ani specjalnych konfiguracji pamięci masowej).
  • Powiązania interfejsów API umożliwiające programowanie w 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 zatwierdzono nową funkcję. Tutaj .
  • Ciekawą alternatywą może być lxd , który pod maską działa z lxc, ale ma kilka ciekawych funkcji, takich jak interfejs API REST, integracja z OpenStack itp.
  • Inną interesującą rzeczą jest to, że Ubuntu wydaje się dostarczać ZFS jako domyślny system plików dla kontenerów 16.04 . Aby zachować zgodność projektów, lxd uruchomiło wersję 2.0, a niektóre funkcje są związane z ZFS .
  • Alternatywy : OpenVZ , Docker
  • Doker . Zauważ, że Docker używa przestrzeni nazw, grup tworzących izolację „na aplikację” / „na oprogramowanie”. Kluczowe różnice tutaj . Podczas gdy LXC tworzy kontenery z wieloma procesami, Docker ogranicza kontener tak bardzo, jak to możliwe do jednego procesu, a następnie zarządza nim za pomocą Docker.
  • Wysiłek na rzecz integracji Dockera z SELinux i zmniejszenia możliwości wewnątrz kontenera, aby był bardziej bezpieczny - Docker i SELinux, Dan Walsh
  • Jaka jest różnica między Docker, LXD i LXC

Docker nie używa już LXC. Mają teraz określoną bibliotekę lib o nazwie libcontainer, która bezpośrednio obsługuje integrację z przestrzenią nazw jądra niskiego poziomu i funkcjami cgroups.

Żadna z tych technologii nie stanowi panaceum na bezpieczeństwo, ale oba są całkiem dobrym sposobem izolowania środowiska, które nie wymaga pełnej wirtualizacji z powodu mieszanej infrastruktury systemów operacyjnych. Bezpieczeństwo przyjdzie po wielu dokumentacjach i implementacji tunerów jądra, MAC i izolacji, które oferują ci te virt na poziomie systemu operacyjnego.

Zobacz też:


źródło
1
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.
allquixotic
lxd jest „lepszym doświadczeniem” LXC, stawiając na nim inne funkcje. Jednak miło jest zacytować tego małego faceta tutaj
@ allquixotic masz na myśli, jeśli używasz niezmienionej konfiguracji utworzonej z szablonów? To prawda, ale kontenery nieuprzywilejowane (z włączoną funkcją użytkownika) były dostępne w LXC 1.x i mogły nawet zostać automatycznie uruchomione przy starcie systemu, pod warunkiem, że były własnością root(i dlatego znajdowały się w ogólnosystemowej lokalizacji kontenerów).
0xC0000022L