logo

„Linux“ virtualizavimas - „Chroot Jail“

„UNIX“ operacinių sistemų „Chroot“ yra operacija, keičianti akivaizdų dabartinio bėgimo proceso ir jo vaikų šaknies katalogą. Šioje modifikuotoje aplinkoje veikiančios programos negali pasiekti failų, esančių už nurodyto katalogo medžio, esančių. Tai iš esmės riboja jų prieigą prie katalogo medžio ir todėl jie gauna pavadinimą „Chroot Jail“.

Idėja yra ta, kad jūs sukuriate katalogo medį, kuriame kopijuojate ar susiejate visus sistemos failus, reikalingus procesui paleisti. Tada jūs naudojate „CHROOT“ sistemos skambutį, kad pakeistumėte šakninį katalogą, kad jis būtų šio naujo medžio pagrindas, ir pradėkite procesą, vykstantį toje „Chrooted“ aplinkoje. Kadangi jis iš tikrųjų negali nuorodų į modifikuotą šaknį, nesugeba piktybiškai skaityti ar rašyti tose vietose.



Kodėl to reikia ir kuo jis skiriasi nuo virtualių mašinų?

Tai yra operacinės sistemos lygio virtualizavimas ir dažnai naudojamas vietoj virtualių mašinų, kad būtų sukurta keli izoliuoti pagrindinio kompiuterio OS egzemplioriai. Tai yra branduolio lygio virtualizavimas ir, palyginti su virtualiomis mašinomis, kurios yra programos sluoksnio virtualizacijos, todėl jis yra labai geras būdas sukurti kelis izoliuotus egzempliorius toje pačioje aparatinėje įrangoje. Virtualioji mašina (VM) yra programinės įrangos įrengimas mašinoje ir jie dažnai naudoja vadinamąją aparatinės įrangos virtualizaciją, kad būtų padarytas virtualus darbinės operacinės sistemos vaizdas.

Kaip naudoti „Chroot Jail“

Pagrindinė komanda „Chroot Jail“ sukurti yra tokia:

 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

PASTABA: „CHROOT System Call“ gali naudoti tik šaknies/privilegijuotą vartotoją. Nepriklausomas vartotojas, turintis prieigą prie komandos, gali apeiti „Chroot“ kalėjimą.



Žingsniai, kaip sukurti mini kalėjimą „bash“ ir komandai „LS“


1. Sukurkite katalogą, kuris veiks kaip komandos šaknis.

 $ mkdir jailed  
$ cd jailed

2. Sukurkite visus svarbiausius komandos katalogus: Priklausomai nuo jūsų operacinės sistemos, reikalingi katalogai gali pasikeisti. Logiškai mes sukuriame visus šiuos katalogus, kad išlaikytume reikiamų bibliotekų kopiją. Norėdami pamatyti, ko reikia visiems katalogams, žr. 4 veiksmą.

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

3.Runkite komandą „kuri“: Paleiskite komandą „Kuris“, kad rastumėte LS ir BASH komandos vietą. Po to, kai paleisite tuos dvejetainius dokumentus, esančius mūsų kalėjimo „bin“ kataloge. Įsitikinkite, kad neturite nė vienos iš šių komandų. Nuo šiol mes nurodytume savo katalogą kaip „Kalinamas“ Patogumo katalogas.



 $ 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. Nukopijuokite tinkamas bibliotekas/objektus : Mūsų vykdomuosius asmenis Kalinamas Katalogas, skirtas dirbti, turime nukopijuoti atitinkamas bibliotekas/objektus kalinamame kataloge. Pagal numatytuosius nustatymus vykdomasis asmuo žiūri į vietas, pradedamas nuo „/“. Norėdami rasti priklausomybes, mes naudojame komandą „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)

Paleiskite šias komandas, kad sukurtumėte tinkamus katalogus.

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

Panašiai 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/


Galutinė katalogo struktūra turi būti panaši į šį

Chroot Jail' title=

5. Sudo Chroot: Paleiskite šią komandą, kad pakeistumėte šaknį į kalinamą katalogą kartu su keliu į apvalkalą. Pagal numatytuosius nustatymus jis bandys įkelti '/bin/sh' apvalkalą.

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

Galite susidurti su šia klaida paleisdami „Chroot“ komandą 

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

Tai gali būti dėl 2 priežasčių, dėl kurių failas neegzistuoja (o tai akivaizdu), arba kai įkėlimo biblioteka sugenda arba jos nėra. Dar kartą patikrinkite, ar bibliotekos yra teisingoje vietoje.

6. Naujas apvalkalas turi pasirodyti: Tai mūsų kalinamas bash. Šiuo metu turime tik 2 komandas, įdiegtas „Bash“ ir LS. Laimei, CD ir PWD yra įmontuotos komandos „Bash Shell“, todėl galite jas naudoti ir.

Kložti aplink katalogą Pabandykite pasiekti „CD /../“ ar panašiai. Pabandykite sulaužyti kalėjimą tikriausiai negalėsite. :)

Išeiti iš kalėjimo 

 $ exit

Svarbiausia ir įdomiausia yra tai, kad bėgant 

 $ ps aux

ir raskite procesą, kad rasite tik vieną procesą 

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

Įdomu tai, kad kalinamo apvalkalo procesai veikia kaip paprastas šio apvalkalo vaiko procesas. Visi kalinamoje aplinkos procesai yra tiesiog paprastas vartotojo lygio procesas pagrindiniame OS ir yra izoliuoti branduolio vardų srityse, taigi yra minimali pridėtinė vertė ir, kaip papildoma nauda, ​​mes gauname izoliaciją.

Panašiai galite pridėti daugiau komandų į savo virtualią kalinamą aplinką. Norėdami pridėti sudėtingesnes programas, gali tekti sukurti daugiau katalogų, tokių kaip „/Proc“ ir „/dev“. Tai padidina proceso sudėtingumą. Tikimės, kad mums to nereikia mūsų tikslui.

Tai viskas, ką reikia žinoti apie „Chroot“ ir katalogų kalinimą. Mūsų pagrindinis tikslas yra suprasti, kas yra konteineriai ir kaip yra tokios paslaugos kaip „AWS“ („Amazon Web Services“) „Google Cloud“ ir „Docker“, galintys pateikti tiek daug virtualių operacinių sistemų poreikių sistemų. Taip pat kaip „Sys-Admin“ paleidžia kelis žiniatinklio serverius keliems domenams vienoje fizinėje mašinoje. Tai buvo tik vienas žingsnis jo supratimo atžvilgiu