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.


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ż:


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.