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
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é