chroot „więzienie” - co to jest i jak z niego korzystać?

99

Dużo słyszałem / czytałem o więzieniu chroot pod Linuksem, ale nigdy go nie używałem (używam Fedory na co dzień), więc czym jest „więzienie” chroota? Kiedy i dlaczego mogę go używać / nie używać i czy jest coś jeszcze, co powinienem wiedzieć? Jak mógłbym zacząć je tworzyć?


źródło
tutaj odpowiedzi wydają się być krótkie na temat „jak korzystać z kategorii?” :(
Alexander Mills

Odpowiedzi:

87

Więzienie chroot jest sposobem na odizolowanie procesu i jego dzieci od reszty systemu. Powinien być używany tylko w procesach, które nie działają jako root, ponieważ użytkownicy root mogą bardzo łatwo wyjść z więzienia.

Chodzi o to, że tworzysz drzewo katalogów, w którym kopiujesz lub łączysz wszystkie pliki systemowe potrzebne do uruchomienia procesu. Następnie używasz chroot()wywołania systemowego, aby zmienić katalog główny na podstawę tego nowego drzewa i rozpocząć proces w środowisku chroot. Ponieważ w rzeczywistości nie może odwoływać się do ścieżek poza zmodyfikowanym katalogiem głównym, nie może złośliwie wykonywać operacji (odczyt / zapis itp.) W tych lokalizacjach.

W Linuksie użycie mountów bind jest świetnym sposobem na zapełnienie drzewa chroot. Korzystając z tego, możesz przeciągać foldery, na przykład /libi /usr/libnie wciągając /usr. Po prostu powiąż drzewa katalogów, które chcesz, z katalogami utworzonymi w katalogu więzienia.

Ben Combee
źródło
10
Twoja odpowiedź jest świetna. Należy jednak wspomnieć, że chroot nie jest bezpiecznym mechanizmem (proces może wyrwać się z więzienia, jeśli zostanie zrootowany, a czasem nawet jeśli nie). Prawdziwe więzienia można egzekwować za pomocą więzów Freebsd i tym podobnych. Zobacz to en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b
3
Proces instalacji Gentoo używa chroota, dzięki czemu możesz skonfigurować nowy system operacyjny przed zainstalowaniem GRUB-a i jądra Linuksa itp.
Chris Huang-Leaver
3
Rzuć okiem na firejail, aby uzyskać kompletnie osadzoną powłokę przy użyciu wszystkich przestrzeni nazw Linux. Dostępne są pakiety deb i rpm. Ogólnie jednak polecam jądro 3.18 lub nowsze, ze względu na znany problem z niemożnością instalowania nowego oprogramowania lub zarządzania użytkownikami, gdy firejailjest uruchomiony.
CivFan,
Świetna odpowiedź! - choć kilka podstawowych przykładów byłoby miło zobaczyć.
Gabriel Staples
Czy użytkownik w więzieniu chroot może wywoływać pliki binarne znajdujące się poniżej, /binktóre są instalowane przez użytkownika root? @Ben Combee
alper
50

„więzienie chroot” to myląca nazwa, która naprawdę powinna umrzeć, ale ludzie nadal ją używają. chrootto narzędzie, które pozwala symulować katalog w systemie plików jako katalog główny systemu plików. Oznacza to, że możesz mieć strukturę folderów, taką jak:

-- foo
    -- bar
    -- baz
-- bazz

Jeśli to chroot foozrobisz ls /, zobaczysz:

-- bar
-- baz

Jeśli chodzi o ls(i wszelkie inne uruchamiane narzędzia), są to jedyne katalogi w systemie plików. Powodem, dla którego „więzienie” jest mylące, chrootnie jest wymuszenie na programie pozostania w tym symulowanym systemie plików; program, który wie, że znajduje się w chrootowym „więzieniu”, może dość łatwo uciec, więc nie należy używać go chrootjako środka bezpieczeństwa, aby uniemożliwić programowi modyfikowanie plików poza symulowanym systemem plików

Michał Mrożek
źródło
16
Przydałby się przykład ucieczki z chroot„więzienia”. Przypadek widziałem wymaga eskalacji przywilejów roota. Czy trudno jest zapobiec eskalacji procesu do uprawnień administratora?
CivFan,
4
To wciąż „uwięzienie”, więc „więzienie” to dobry skrót. Czy „pole ograniczające poziom 3” byłoby lepsze?
MikeW,
4
Termin pochodzi z więzień FreeBSD. Więzienia są zbudowane na chroot. Więzienia miały na celu rozwiązanie problemów bezpieczeństwa chroot. Z tego powodu ludzie często się mylą chrooti jailsmają na myśli to samo. Oni nie. Termin „więzienie” został wymyślony przez Billa Cheswicka, gdy założył honeypot, aby złapać crackera: csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK
Więc nie masz chroot jailw moim przypadku dobrego pomysłu ?
Shafizadeh
10

Zasadniczo zmieniasz tylko katalog główny swojego środowiska. Więc

/

staje się

/some-jail/ (or whatever directory you want)

Gdy aplikacja uzyska dostęp do / dostanie / some-jail /. Ponadto aplikacja nie może się wyrwać z / some-jail /, więc wiesz, że nie uzyska dostępu do niczego innego na twoim komputerze. To bardzo prosty sposób powiedzenia „hej, masz dostęp tylko do tych rzeczy, które ci daję, i nie możesz uzyskać dostępu do niczego innego w systemie.

jacksonh
źródło
6

„Kiedy i dlaczego mogę go użyć?”

Jednym z zastosowań jest testowanie skryptów (czas rozruchu i inne), które tworzą bezwzględne odwołania do ścieżek lub uruchamiają polecenia, które możesz chcieć przechwycić i zarejestrować (i być może ich nie operujesz) - w środowisku, w którym nie chcesz, aby te polecenia faktycznie działają w twoim środowisku do biegania.

Na przykład mam wbudowane urządzenie z systemem Linux, chciałbym sprawdzić działanie jakiegoś basha bez: a) uruchamiania go na prawdziwym urządzeniu (ponieważ mam lepsze narzędzia na pulpicie i nie chcę blokować urządzenia) b) działający to naprawdę na moim pulpicie (ponieważ nie chcę, aby mój system pulpitu był zawalony)

Ponadto możesz następnie dowiedzieć się, które polecenia lub inne pliki skryptów są używane, ponieważ uruchomienie zakończy się błędem za każdym razem, gdy spróbuje uruchomić polecenie lub skrypt powłoki, którego nie ma w „więzieniu chroot”.

(Oczywiście, aby przejść cały wieprz, możesz uruchomić w QEMU lub Docker lub maszynę wirtualną, ale wymagałoby to utworzenia obrazu maszyny wirtualnej itp. - znacznie więcej pracy)

MikeW
źródło