logo

Linux virtualizáció - Chroot börtön

A UNIX operációs rendszerek chroot egy olyan művelet, amely megváltoztatja a jelenlegi futási folyamat és gyermekei látszólagos gyökérkönyvtárát. Az ebben a módosított környezetben futó programok nem férhetnek hozzá a kijelölt könyvtárfán kívüli fájlokhoz. Ez lényegében korlátozza a könyvtárfához való hozzáférésüket, és így megkapják a „Chroot börtön” nevet.

Az ötlet az, hogy hozzon létre egy könyvtárfát, ahol másolhatja vagy linkre kerül az összes rendszerfájlban, amely a folyamat futtatásához szükséges. Ezután a Chroot Rendszerhívást használja a gyökérkönyvtár megváltoztatásához, hogy az új fa alján legyen, és elindítsa a folyamatot abban a chrooted környezetben. Mivel a módosított gyökéren kívüli utak valójában nem tudnak referenciaként hivatkozni, nem tud rosszindulatúan olvasni vagy írni ezekre a helyekre.



Miért van szükség erre, és hogyan különbözik a virtuális gépektől?

Ez a működési rendszer szintű virtualizációja, és gyakran a virtuális gépek helyett használják a gazdaszervezet többszörös izolált példányainak létrehozására. Ez egy kernel-szintű virtualizáció, és gyakorlatilag nincs általános költsége, összehasonlítva a virtuális gépekkel, amelyek az alkalmazásréteg virtualizációja, ennek eredményeként nagyon jó módszert kínál több izolált példány létrehozására ugyanazon a hardveren. A virtuális gép (VM) egy gép szoftver megvalósítása, és gyakran kihasználják az úgynevezett hardver virtualizációt, hogy a működő operációs rendszer virtuális képét hozzák létre.

char-ból integer java

Hogyan kell használni a chroot börtönöt

A Chroot börtön létrehozásának alapvető parancs a következő:

 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

Megjegyzés: Csak egy gyökér/privilegizált felhasználó használhatja a Chroot rendszerhívást. A parancshoz való hozzáféréssel rendelkező nem privilegizált felhasználó megkerülheti a Chroot börtönét.



Lépések a „bash” és az „ls” parancs mini-jail létrehozására


1. Hozzon létre egy könyvtárat, amely a parancs gyökere.

 $ mkdir jailed  
$ cd jailed

2. Készítse el az összes alapvető könyvtárat a futtatáshoz: Az operációs rendszertől függően a szükséges könyvtárak megváltozhatnak. Logikusan létrehozzuk ezeket a könyvtárakat, hogy megőrizzük a szükséges könyvtárak másolatát. Ahhoz, hogy megnézze, milyen könyvtárakra van szükség, lásd a 4. lépést.

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

3.A 'melyik' parancs: Futtassa a 'melyik' parancsot az LS és a bash parancs helyének megtalálásához. Futtatás után, amely a börtönök „bin” könyvtárában található bináris fájlokat. Győződjön meg róla, hogy ezeknek a parancsoknak nem szabad álneve. Mostantól a könyvtárunkra hivatkozunk 'Bebörtönzött' könyvtár a kényelem érdekében.



 $ 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. Másolja a megfelelő könyvtárakat/objektumokat : A fájlok végrehajthatóságaihoz Bebörtönzött Könyvtár A munkához a megfelelő könyvtárakat/objektumokat kell másolnunk a börtönben lévő könyvtárban. Alapértelmezés szerint a futtatható a '/' -nel kezdődő helyekre nézi. A függőségek megtalálásához az 'ldd' parancsot használjuk

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

Futtassa a következő parancsokat a megfelelő könyvtárak létrehozásához.

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

Hasonlóan az LS -hez 

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


A végső könyvtári struktúrának hasonlónak kell lennie ehhez

húr c

Chroot börtön' title=

5. Sudo Chroot: Futtassa ezt a parancsot, hogy a gyökéret a börtönbe helyezze a börtönbe, valamint a héj elérési útjára. Alapértelmezés szerint megpróbálja betölteni a '/bin/sh' héjat.

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

Lehet, hogy szembesülne ezzel a hibával a chroot parancs futtatásakor 

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

Ennek oka lehet 2 okból, ha a fájl nem létezik (ami nyilvánvaló), vagy ha a betöltési könyvtár meghibásodik, vagy nem érhető el. Duplán ellenőrizze, ha a könyvtárak megfelelő helyen vannak.

6. Egy új héjnak fel kell bukkannia: Ez a mi börtönbe vett bash. Jelenleg csak 2 parancs van telepítve a bash és az ls. Szerencsére a CD és a PWD épített parancsok a bash héjban, és így is használhatják őket.

Roam a könyvtár körül próbáljon hozzáférni a 'CD /../' vagy valami hasonlóhoz. Próbálja meg megtörni a börtönöt, valószínűleg nem lesz képes. :)

többsoros megjegyzés powershell

Kilépni a börtönből 

 $ exit

A legfontosabb és legérdekesebb rész az, hogy amikor futsz 

java karakter int
 $ ps aux

és keresse meg azt a folyamatot, amelyben csak egy folyamat létezik 

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

Érdekes módon a börtönben lévő héjban zajló folyamatok a héj egyszerű gyermekfolyamataként futnak. A börtönben lévő környezetben lévő összes folyamat egyszerű felhasználói szintű folyamat a gazda OS -ben, és a kernel által biztosított névterek elkülönítik, így minimális a feje, és további előnye, hogy elszigeteltek.

Hasonlóképpen hozzáadhat további parancsokat a virtuális börtönben lévő környezethez. A bonyolultabb programok hozzáadásához esetleg további könyvtárakat kell létrehoznia, például a '/proc' és a '/dev'. Ezek növelik a folyamat bonyolultságát. Remélhetőleg nem követeljük meg a célunkra.

Ez minden, amit tudnod kell a Chrootról és a könyvtárak börtönéről. Legfontosabb célunk az, hogy megértsük, mi a konténerek, és hogy azok a szolgáltatások, mint az AWS (Amazon Web Services) Google Cloud és Docker, képesek olyan sok operációs rendszert biztosítani az operációs rendszerek igény szerint. Azt is, hogy a Sys-Admin hogyan futtat több web-szerver több tartományhoz egyetlen fizikai gépen. Ez csak egy lépés volt a megértés felé