UNIX -käyttöjärjestelmien chroot on toimenpide, joka muuttaa nykyisen juoksuprosessin ja sen lasten näennäistä juurhakemistoa. Tässä muokatussa ympäristössä toimivat ohjelmat eivät pääse nimetyn hakemistopuun ulkopuolella oleviin tiedostoihin. Tämä rajoittaa pääasiassa heidän pääsynsä hakemistopuulle ja siten he saavat nimen 'Chroot Jail'.
Ajatuksena on, että luot hakemistopuun, johon kopioit tai linkit kaikkiin järjestelmän tiedostoihin, joita tarvitaan prosessin suorittamiseen. Käytä sitten Chroot System -puhelua muuttaaksesi juurhakemiston tämän uuden puun pohjassa ja käynnistämään prosessi, joka toimii siinä chrooted -ympäristössä. Koska se ei oikeastaan voi viitata polkuja muokatun juuren ulkopuolelle, se ei voi haitallisesti lukea tai kirjoittaa näille sijainneille.
Miksi sitä vaaditaan ja miten se eroaa virtuaalikoneista?
Tämä on käyttöjärjestelmän tason virtualisointi, ja sitä käytetään usein virtuaalikoneiden sijasta isäntäjärjestelmän useita eristettyjä tapauksia. Tämä on ytimen tason virtualisointi, eikä sillä ole käytännössä mitään yleiskustannuksia verrattuna virtuaalikoneisiin, jotka ovat sovelluskerroksen virtualisointia, minkä seurauksena se tarjoaa erittäin hyvän menetelmän saman laitteiston useita eristettyjä esiintymiä. Virtuaalikone (VM) on koneen ohjelmiston toteutus ja he hyödyntävät usein sitä, mitä laitteistovirtualisoinnista tunnetaan toimivasta käyttöjärjestelmästä virtuaalikuvan.
Kuinka käyttää Chroot -vankilaa
Peruskomento Chroot -vankilaan luomiseksi on seuraava:
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
HUOMAUTUS: Vain juuri/etuoikeutettu käyttäjä voi käyttää Chroot -järjestelmän puhelua. Ei-etuoikeutettu käyttäjä, jolla on pääsy komentoon, voi ohittaa Chroot-vankilan.
Vaiheet mini-vankilön luomiseksi 'bash' ja 'ls' -komennolle
1. Luo hakemisto, joka toimii komennon juurena.
$ mkdir jailed
$ cd jailed
2. Luo kaikki välttämättömät hakemistot komennolle: Käyttöjärjestelmästäsi riippuen vaadittavat hakemistot voivat muuttua. Loogisesti luomme kaikki nämä hakemistot pitämään kopion vaadituista kirjastoista. Katso vaihe 4 nähdäksesi mitä kaikki hakemistot vaaditaan.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu3.Run ', jonka komento: Suorita 'mitä' komento löytää LS- ja Bash -komennon sijainti. Käynnissä, jotka komentavat nuo binaarit vankilamme 'bin' -hakemistossa. Varmista, että sinulla ei ole mitään näistä komennoista. Tästä eteenpäin viitamme hakemistoon "Vangittu" Hakemisto mukavuutta varten.
$ 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. Kopioi sopivat kirjastot/objektit : Vangittu Hakemisto työhön, meidän on kopioitava asianmukaiset kirjastot/esineet vankilassa olevaan hakemistoon. Oletusarvoisesti suoritettava tarkastelee sijainteja, jotka alkavat '/'. Riippuvuuksien löytämiseksi käytämme komentoa '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)
Suorita seuraavat komennot luodaksesi asianmukaiset hakemistot.
$ 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/
Samoin LS: lle
$ 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/
Lopullisen hakemistorakenteen on oltava samanlainen kuin tämä

5. sudo chroot: Suorita tämä komento muuttaaksesi juuren vankilaan liittyväksi hakemistoksi yhdessä kuoreen. Oletuksena se yrittää ladata '/bin/sh' -kuoren.
$ cd ..
$ sudo chroot jailed /bin/bash
Saatat kohdata tämän virheen käydessään chroot -komentoa
chroot: failed to run command `/bin/bash': No such file or directoryTämä voi johtua kahdesta syystä joko tiedostoa ei ole (mikä on ilmeistä) tai kun latauskirjasto epäonnistuu tai ei ole käytettävissä. Tarkista, jos kirjastot ovat oikeassa paikassa.
6. Uuden kuoren on ponnahdus: Se on vankilamme bash. Meillä on tällä hetkellä vain 2 komentoa asennettuna Bash ja LS. Onneksi CD ja PWD ovat rakennettuja komentoja bash -kuoressa, joten voit käyttää niitä myös.
Hakemiston ympärillä oleva vaeltaminen yritä käyttää 'CD /../' tai jotain vastaavaa. Yritä rikkoa vankila todennäköisesti et voi. :)
Poistua vankilasta
diana mary blacker
$ exitTärkein ja mielenkiintoisin osa on, että kun juokset
$ ps auxja löydä prosessi, jonka havaitset, että prosessia on vain yksi
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bashMielenkiintoista prosessit vankilassa olevassa kuoressa suoritettavana tämän kuoren yksinkertaisena lapsiprosessina. Kaikki vankitun ympäristön sisällä olevat prosessit ovat vain yksinkertaisia käyttäjätasoprosesseja isäntäjärjestelmässä, ja ne eristetään ytimen tarjoamilla nimitiloilla, joten yleiskustannukset ovat minimaaliset ja lisäetuina saamme eristyksen.
Samoin voit lisätä lisää komentoja sinulle virtuaaliseen vangittuun ympäristöön. Lisätäksesi monimutkaisempia ohjelmia, joita saatat joutua luomaan lisää hakemistoja, kuten '/proc' ja '/dev'. Ne lisäävät prosessin monimutkaisuutta. Toivottavasti emme vaadi sitä tarkoitukseemme.
Tämä on kaikki mitä sinun on tiedettävä Chrootista ja hakemistojen vangitsemisesta. Perimmäisenä tavoitteemme on ymmärtää, mitkä ovat säilöt ja miten palvelut, kuten AWS (Amazon Web Services) Google Cloud ja Docker, pystyvät tarjoamaan niin monia virtuaalisia tapauksia käyttöjärjestelmistä pyynnöstä. Myös miten sys-admin suorittaa useita web-palvelimia useille verkkotunnuksille yhdellä fyysisellä koneella. Tämä oli vain yksi askel kohti sen ymmärtämistä