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ć?
99
Odpowiedzi:
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
/lib
i/usr/lib
nie wciągając/usr
. Po prostu powiąż drzewa katalogów, które chcesz, z katalogami utworzonymi w katalogu więzienia.źródło
firejail
jest uruchomiony./bin
które są instalowane przez użytkownika root? @Ben Combee„więzienie chroot” to myląca nazwa, która naprawdę powinna umrzeć, ale ludzie nadal ją używają.
chroot
to 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:Jeśli to
chroot foo
zrobiszls /
, zobaczysz: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,chroot
nie 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ć gochroot
jako środka bezpieczeństwa, aby uniemożliwić programowi modyfikowanie plików poza symulowanym systemem plikówźródło
chroot
„więzienia”. Przypadek widziałem wymaga eskalacji przywilejów roota. Czy trudno jest zapobiec eskalacji procesu do uprawnień administratora?chroot
. Z tego powodu ludzie często się myląchroot
ijails
mają 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.pdfchroot jail
w moim przypadku dobrego pomysłu ?Zasadniczo zmieniasz tylko katalog główny swojego środowiska. Więc
staje się
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.
źródło
„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)
źródło