GeeksforGeeks

co to jest chroot Jail?

chroot w systemach operacyjnych Unix jest operacją, która zmienia pozorny katalog główny dla bieżącego uruchomionego procesu i jego potomków. Programy uruchamiane w tym zmodyfikowanym środowisku nie mogą uzyskać dostępu do plików poza wyznaczonym drzewem katalogów. To zasadniczo ogranicza ich dostęp do drzewa katalogów, a tym samym otrzymują nazwę „chroot jail”.

chodzi o to, aby utworzyć drzewo katalogów, w którym kopiujesz lub łączysz wszystkie pliki systemowe potrzebne do uruchomienia procesu. Następnie użyj wywołania systemowego chroot, aby zmienić katalog główny, aby znajdował się u podstawy tego nowego drzewa i rozpocząć proces uruchomiony w tym środowisku chrooted. Ponieważ w rzeczywistości nie może odwoływać się do ścieżek poza zmodyfikowanym korzeniem głównym, nie może złośliwie odczytywać ani zapisywać w tych lokalizacjach.

dlaczego jest wymagany i czym różni się od maszyn wirtualnych?
jest to wirtualizacja na poziomie systemu operacyjnego i jest często używana zamiast maszyn wirtualnych do tworzenia wielu izolowanych instancji systemu operacyjnego hosta. Jest to wirtualizacja na poziomie jądra i praktycznie nie ma narzutu w porównaniu do maszyn wirtualnych, które są wirtualizacją warstwy aplikacji, w rezultacie zapewnia bardzo dobrą metodę tworzenia wielu izolowanych instancji na tym samym sprzęcie. Maszyna wirtualna (VM) jest implementacją oprogramowania Maszyny i często wykorzystują to, co jest znane jako Wirtualizacja sprzętu, aby renderować wirtualne obrazy działającego systemu operacyjnego.

jak z niego korzystać?
podstawowe polecenie do utworzenia chroot jail wygląda następująco:

 chroot /path/to/new/root command OR chroot /path/to/new/root /path/to/server OR chroot /path/to/new/root /path/to/server

Uwaga: Tylko użytkownik root / uprzywilejowany może używać funkcji systemowej chroot. Nieuprzywilejowany użytkownik z dostępem do komendy może ominąć Więzienie chroot.

kroki tworzenia mini-więzienia dla polecenia „bash” i ” ls ”

1. Utwórz katalog, który będzie działał jako katalog główny polecenia.

 $ mkdir jailed $ cd jailed

2. Utwórz wszystkie niezbędne Katalogi dla polecenia do uruchomienia: w zależności od systemu operacyjnego wymagane katalogi mogą ulec zmianie. Logicznie rzecz biorąc, tworzymy wszystkie te katalogi, aby zachować kopię wymaganych bibliotek. Aby sprawdzić, jakie są wymagane wszystkie katalogi, zobacz krok 4.

 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3.Uruchom polecenie „which”: Uruchom polecenie „which”, aby znaleźć lokalizację poleceń ls i bash. Po uruchomieniu którego polecenia skopiuj te pliki binarne do katalogu’ bin ’ naszego więzienia. Upewnij się, że żadne z tych poleceń nie jest aliasowane. Od tej pory dla wygody odnosimy się do naszego katalogu jako katalogu „zamkniętego”.

 $ unalias ls # Required only if you have aliased ls command $ unalias bash # Required only if you have aliased bash command $ cp $(which ls) ./bin/ $ cp $(which bash) ./bin/

4. Skopiuj odpowiednie biblioteki / obiekty: aby pliki wykonywalne w naszym katalogu więziennym działały, musimy skopiować odpowiednie biblioteki / obiekty w katalogu więziennym. Domyślnie plik wykonywalny patrzy na lokalizacje zaczynające się od '/’. Aby znaleźć zależności używamy polecenia 'ldd’

$ ldd $(which bash) linux-vdso.so.1 => (0x00007ffc75dd4000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000) /lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)

uruchom następujące polecenia, aby utworzyć odpowiednie katalogi.

$ cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/$ cp /lib64/ld-linux-x86-64.so.2 lib64/

podobnie dla ls,

$ ldd $(which ls) linux-vdso.so.1 => (0x00007fff4f05d000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000) /lib64/ld-liux-x86-64.so.2 (0x000055e836c69000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/$ cp /lib64/ld-linux-x86-64.so.2 lib64/$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/

ostateczna struktura katalogów musi być podobna do tej,

Chroot

5. Sudo chroot: Uruchom to polecenie, aby zmienić katalog główny na zamknięty, wraz ze ścieżką do powłoki. Domyślnie spróbuje załadować powłokę '/bin / sh’.

 $ cd .. $ sudo chroot jailed /bin/bash

możesz napotkać ten błąd podczas uruchamiania polecenia chroot,

chroot: failed to run command `/bin/bash': No such file or directory

może to wynikać z dwóch powodów: albo plik nie istnieje (co jest oczywiste), albo gdy biblioteka ładująca nie działa lub nie jest dostępna. Sprawdź dwukrotnie, czy libary są w prawidłowej lokalizacji.

6. Nowa powłoka musi wyskoczyć: to nasz więzienny bash. Obecnie mamy zainstalowane tylko 2 polecenia, bash i ls. Na szczęście cd i pwd są wbudowanymi poleceniami w powłoce bash, więc możesz ich również używać.

poruszaj się po katalogu, spróbuj uzyskać dostęp do 'cd /../ 'lub coś podobnego. Spróbuj złamać więzienie, prawdopodobnie nie będziesz w stanie.

do wyjścia z więzienia,

 $ exit

najważniejsze i najciekawsze jest to, że podczas biegu,

 $ ps aux

i znajdź proces, przekonasz się, że jest tylko jeden proces,

root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash

co ciekawe, procesy w zamkniętej powłoce działają jako prosty proces potomny tej powłoki. Wszystkie procesy wewnątrz środowiska zamkniętego, są po prostu prostym procesem na poziomie użytkownika w systemie operacyjnym hosta i są izolowane przez przestrzenie nazw dostarczane przez jądro, dlatego nie ma minimalnego narzutu i jako dodatkową korzyść otrzymujemy izolację.

kopię katalogu jailed-bash – można pobrać stąd.

podobnie możesz dodać więcej poleceń do swojego wirtualnego środowiska. Aby dodać bardziej złożone programy, może być konieczne utworzenie większej liczby katalogów, takich jak '/proc’ i '/dev’. Zwiększają one złożoność procesu. Mam nadzieję, że nie potrzebujemy tego do naszych celów.

to wszystko, co musisz wiedzieć o chroot i uwięzieniu katalogów. Naszym ostatecznym celem jest zrozumienie, czym są kontenery i w jaki sposób usługi takie jak AWS (Amazon Web Services), Google Cloud i Docker są w stanie zapewnić tak wiele wirtualnych instancji systemów operacyjnych na żądanie. Ponadto, w jaki sposób sys-admin uruchamia wiele serwerów internetowych dla wielu domen na jednej fizycznej maszynie. To był tylko jeden krok w kierunku zrozumienia tego 🙂

  • https://help.ubuntu.com/community/DebootstrapChroot
  • https://wiki.archlinux.org/index.php/Install_from_existing_Linux
  • http://serverfault.com/questions/162362/chroot-fails-cannot-run-command-bin-bash-no-such-file-or-directory
  • https://wiki.archlinux.org/index.php/change_root

o autorze:
Pinkesh Badjatiya pochodzi z IIIT Hyderabad. W sercu jest geekiem z wieloma projektami, których warto szukać. Jego prace projektowe można zobaczyć tutaj.

jeśli chcesz również zaprezentować swój blog tutaj, zobacz GBlog dla blogów gości piszących na GeeksforGeeks.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.