logo

Linux virtualizacija - croot zapor

Chroot v operacijskih sistemih UNIX je operacija, ki spreminja navidezni korenski imenik za trenutni postopek izvajanja in njene otroke. Programi, ki se izvajajo v tem spremenjenem okolju, ne morejo dostopati do datotek zunaj določenega drevesa imenika. To v bistvu omejuje njihov dostop do drevesa imenikov in tako dobi ime "croot zapor".

pretvori char v niz

Ideja je, da ustvarite drevo imenika, kjer kopirate ali povežete v vseh sistemskih datotekah, potrebnih za izvajanje postopka. Nato s sistemom Chroot System spremenite, da spremenite korenski imenik, da bo na dnu tega novega drevesa in začnete postopek, ki deluje v tem okolju. Ker se dejansko ne more sklicevati na poti zunaj spremenjene korenine, ne more zlonamerno brati ali pisati na te lokacije.



Zakaj je potrebno in kako se razlikuje od virtualnih strojev?

To je virtualizacija na ravni sistema in se pogosto uporablja namesto virtualnih strojev za ustvarjanje več izoliranih primerkov gostiteljskega OS. To je virtualizacija na ravni jedra in v primerjavi z virtualnimi stroji, ki so virtualizacija aplikacijskih plasti, praktično nimajo režijskih stroškov, kot rezultat, ki ponuja zelo dobro metodo za ustvarjanje več izoliranih primerkov na isti strojni opremi. Virtualni stroj (VM) je programska oprema naprave in pogosto izkoriščajo tisto, kar je znano kot strojna virtualizacija, da upodabljate virtualno sliko delovnega operacijskega sistema.

Kako uporabiti chroot zapor

Osnovni ukaz za ustvarjanje zapora Chroot je naslednji:

 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

Opomba: Samo koreninski/privilegiran uporabnik lahko uporabi sistemski sistem Chroot. Ne privilegiran uporabnik z dostopom do ukaza lahko zaobide zapor Chroot.



Koraki za ustvarjanje mini-jali za ukaz 'bash' in 'ls'


1. Ustvarite imenik, ki bo deloval kot koren ukaza.

 $ mkdir jailed  
$ cd jailed

2. Ustvarite vse bistvene imenike za vodenje ukaza: Odvisno od vašega operacijskega sistema se lahko zahtevani imeniki spremenijo. Logično ustvarimo vse te imenike, da ohranimo kopijo potrebnih knjižnic. Če želite videti, kaj so potrebni vsi imeniki, glej 4. korak.

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

3.Run Ukaz 'Kateri': Zaženite ukaz 'Kateri', da bi našli lokacijo LS in Bash Command. Po zagonu, ki poveljujte te binarne dvorane v imeniku 'bin' v našem zaporu. Prepričajte se, da nimate nobenega od teh ukazov. Od zdaj naprej bi se na naš imenik sklicevali kot 'Zaprti' imenik za udobje.



 $ 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 ustrezne knjižnice/predmete : Za izvršljive v naše V zaporu Imenik za delo moramo kopirati ustrezne knjižnice/predmete v zaprtem imeniku. Executait privzeto pogleda na lokacije, ki se začnejo z '/'. Če želite najti odvisnosti, uporabljamo ukaz '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)

Zaženite naslednje ukaze, da ustvarite ustrezne imenike.

$ 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/

Podobno 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/


Končna struktura imenika mora biti podobna temu

Croot zapor' title=

5. Sudo Chroot: Zaženite ta ukaz, da spremenite korenino v zaprti imenik, skupaj s potjo do lupine. Privzeto bo poskušal naložiti lupino '/bin/sh'.

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

Lahko se soočite s to napako med izvajanjem ukazov chroot 

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

To je lahko posledica dveh razlogov, da datoteka ne obstaja (kar je očitno) ali kadar knjižnica nalaganja ne uspe ali ni na voljo. Dvakrat preverite, če so knjižnice na pravilni lokaciji.

6. Nova lupina se mora pojaviti: To je naš zapor. Trenutno imamo nameščena samo 2 ukaza, ki sta nameščena BASH in LS. Na srečo sta CD in PWD vgrajeni ukazi v bash lupini in tako lahko tudi vi uporabite.

Potujte po imeniku, poskusite dostopati do 'cd /../' ali kaj podobnega. Poskusite prekiniti zapor, ki ga verjetno ne boste mogli. ::

Za izhod iz zapora 

 $ exit

Najpomembnejši in zanimiv del je, da ko tečete 

 $ ps aux

in poiščite postopek, ki ga boste ugotovili, da obstaja samo en postopek 

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

Zanimivo je, da procesi v zaporni lupini tečejo kot preprost otroški postopek te lupine. Vsi procesi znotraj zaprtega okolja so v gostiteljskem operacijskem sistemu le preprost proces uporabniške ravni in jih izoliramo s prostori za imene, ki jih zagotavlja

Podobno vam lahko dodate več ukazov v virtualno zaprto okolje. Če želite dodati bolj zapletene programe, boste morda morali ustvariti več imenikov, kot sta '/proc' in '/dev'. Ti povečajo kompleksnost procesa. Upajmo, da tega ne zahtevamo za svoj namen.

To je vse, kar morate vedeti o Chrootu in zaporu imenikov. Naš končni cilj je razumeti, kaj so zabojniki in kako so storitve, kot sta AWS (Amazon Web Services) Google Cloud in Docker, ki lahko na zahtevo zagotovijo toliko virtualnih primerov operacijskih sistemov. Tudi kako Sys-Admin vodi več spletnih strežnikov za več domen na enem fizičnem stroju. To je bil le en korak k njenemu razumevanju