Chroot o UNIX operativnim sustavima je operacija koja mijenja prividni korijenski direktorij za trenutni postupak pokretanja i njegovu djecu. Programi koji se izvode u ovom izmijenjenom okruženju ne mogu pristupiti datotekama izvan određenog stabla direktorija. To u osnovi ograničava njihov pristup stablu direktorija i na taj način dobivaju naziv 'Chroot zatvor'.
Ideja je da stvorite stablo direktorija na kojem kopirate ili povežite u sve sistemske datoteke potrebne za pokretanje procesa. Zatim koristite CHROOT sustav sustava da biste promijenili korijenski direktorij da biste bili u podnožju ovog novog stabla i započeli postupak koji se izvodi u tom krojenom okruženju. Budući da zapravo ne može uputiti staze izvan modificiranog korijena, ne može zlonamjerno čitati ili pisati na te lokacije.
Zašto se to zahtijeva i kako se razlikuje od virtualnih strojeva?
Ovo je virtualizacija na razini sustava i često se koristi umjesto virtualnih strojeva za stvaranje više izoliranih instanci OS-a domaćina. Ovo je virtualizacija na razini kernela i praktički nema režijskih troškova u usporedbi s virtualnim strojevima koji su virtualizacija aplikacija kao rezultat, ona pruža vrlo dobru metodu za stvaranje više izoliranih instanci na istom hardveru. Virtualni stroj (VM) je softverska implementacija stroja i oni često iskorištavaju ono što je poznato kao virtualizacija hardvera kako bi omogućila virtualnu sliku radnog operativnog sustava.
Kako koristiti chroot zatvor
Osnovna naredba za stvaranje zatvora za chroot je sljedeća:
chroot /path/to/new/root command
OR
chroot /path/to/new/root /path/to/server
OR
chroot [options] /path/to/new/root /path/to/server
NAPOMENA: Samo korijenski/povlašteni korisnik može koristiti CHROOT sustav sustava. Neprivilegirani korisnik s pristupom naredbi može zaobići zatvor.
Koraci za stvaranje mini-jail-a za naredbu 'bash' i ls '
1. Napravite direktorij koji će djelovati kao korijen naredbe.
$ mkdir jailed
$ cd jailed
2. Stvorite sve bitne direktorije za pokretanje naredbe: Ovisno o vašem operativnom sustavu, potrebni direktoriji mogu se promijeniti. Logično, stvaramo sve ove direktorije kako bismo zadržali kopiju potrebnih knjižnica. Da biste vidjeli koji su svi direktoriji potrebni, vidi korak 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu
3.Run Naredba 'koja': Pokrenite naredbu 'koja' da biste pronašli lokaciju naredbe LS i Bash. Nakon pokretanja koje zapovjednici prepiru te binarne datoteke u direktoriju 'Bin' našeg zatvora. Obavezno nemate nijednu od ovih naredbi. Od sada bismo mislili na naš direktorij kao 'U zatvoru' Imenik radi praktičnosti.
$ 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. Kopirajte odgovarajuće knjižnice/objekte : Za izvršne datoteke u našem Zatvoren Imenik za rad moramo kopirati odgovarajuće biblioteke/objekte u zatvorenom direktoriju. Prema zadanim postavkama, izvršna datoteka gleda na lokacije koje počinju s '/'. Da bismo pronašli ovisnosti, koristimo naredbu '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)
Pokrenite sljedeće naredbe za stvaranje odgovarajućih direktorija.
$ 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/
Slično za 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-linux-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/
Konačna struktura direktorija mora biti slična ovome
5. sudo chroot: Pokrenite ovu naredbu kako biste promijenili korijen u zatvoreni direktorij zajedno s stazom do školjke. Prema zadanom će se pokušati učitati '/bin/sh' ljusku.
$ cd ..
$ sudo chroot jailed /bin/bash
Možda ćete se suočiti s ovom pogreškom tijekom pokretanja naredbe Chroot
chroot: failed to run command `/bin/bash': No such file or directory
To može biti zbog dva razloga ili datoteka ne postoji (što je očito) ili kada biblioteka učitavanja ne uspije ili nije dostupna. Dvaput provjerite ako su knjižnice na ispravnom mjestu.
6. Mora se pojaviti nova školjka: To je naš zatvoreni bash. Trenutno imamo samo 2 naredbe instalirane Bash i LS. Srećom CD i PWD su ugrađene naredbe u bash školjci, pa ih možete i koristiti.
Uključite se u direktorij pokušajte pristupiti 'CD /../' ili nečemu slično. Pokušajte razbiti zatvor, vjerojatno nećete moći. :)
Izlazak iz zatvora
$ exit
Najvažniji i zanimljiviji dio je da kada trčite
$ ps aux
i pronaći postupak za koji ćete otkriti da postoji samo jedan postupak
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash
Zanimljivo je da se procesi u zatvorenoj školjci pokreću kao jednostavan dječji proces ove školjke. Svi procesi unutar zatvorenog okruženja samo su jednostavni postupak razine korisnika u OS -u domaćina i izolirani su prostorima imena koje pruža kernel, tako da postoje minimalni režijski troškovi i kao dodatna korist dobivamo izolaciju.
Slično tome, možete dodati više naredbi u svoj virtualni zatvoreni okruženje. Da biste dodali složenije programe, možda ćete trebati stvoriti više direktorija poput '/Proc' i '/Dev'. Oni povećavaju složenost procesa. Nadamo se da to ne zahtijevamo u našu svrhu.
Ovo je sve što trebate znati o chrootu i zatvoru direktorija. Naš krajnji cilj je razumjeti što su spremnici i kako su usluge poput AWS -a (Amazon Web Services) Google Cloud i Docker u mogućnosti pružiti toliko virtualnih instanci operativnih sustava na zahtjev. Također kako SYS-Admin pokreće više web-poslužitelja za više domena na jednom fizičkom stroju. Ovo je bio samo jedan korak prema razumijevanju
font gimp