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.zfs
aby uzyskać większą moc, a inne zmienne, takie jak children.max
do, 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ż: