A chroot egy művelet a gyökérkönyvtár megváltoztatására Unix-szerű operációs rendszerekben . A megváltozott gyökérkönyvtárral elindított program csak az abban a könyvtárban található fájlokhoz férhet hozzá. Ezért, ha a programnak hozzáférést kell biztosítania más könyvtárakhoz vagy fájlrendszerekhez (például / proc), akkor a szükséges könyvtárakat vagy eszközöket előre be kell illesztenie a célkönyvtárba.
A chroot kifejezés utalhat akár a gyökérkönyvtár-módosítások fogalmára, akár a chroot(2) rendszerhívásra , vagy a chroot(8) programra , amint az általában a szövegkörnyezetből kiderül.
A gyökérkönyvtár módosítása a chroot(2) rendszerhívással történik . A gyökérkönyvtár módosítása csak az aktuális folyamatot érinti (vagyis azt a folyamatot, amely a chroot(2) rendszerhívást indította el ) és annak összes leszármazottját. Ha valamilyen programot szeretne futtatni egy megváltozott gyökérkönyvtárral, de ez a program nem biztosítja a chroot(2) hívás végrehajtását , használja a chroot(8) programot . Ez a program paraméterként egy új gyökérkönyvtárat és a program elérési útját veszi fel. Először egy chroot(2) hívást hajt végre , hogy saját gyökérkönyvtárát a megadottra változtassa, majd a megadott elérési úton futtatja a programot. Mivel a megváltozott gyökérkönyvtárat a gyermekfolyamatok öröklik, a program a megváltozott gyökérkönyvtárral indul.
Az a program, amelynek gyökere egy másik könyvtárba került, nem férhet hozzá a könyvtáron kívüli fájlokhoz. Ez kényelmes módot biztosít a " sandbox " tesztelésére, megbízhatatlan vagy bármely más potenciálisan káros programra. Ez is egy egyszerű módja a „ börtön ” mechanizmus használatának. A dokumentáció azonban óva int az ilyen használattól [1] . De a chrootot leggyakrabban disztribúciók vagy egyedi programok készítésére használják "tiszta" környezetben. Lásd még bootstrapping .
A gyakorlatban nehéz chrootolni azokat a programokat, amelyek arra számítanak, hogy indításkor szabad lemezterületet találnak, konfigurációs fájlokat, eszközfájlokat és dinamikus könyvtárakat bizonyos helyeken. Annak érdekében, hogy a programok futhassanak egy chroot könyvtárban, minimális számú ilyen fájlt kell biztosítani számukra, lehetőleg gondosan megválasztva, hogy megakadályozzák a rendszerhez való véletlen hozzáférést kívülről (pl. eszközfájlokon vagy FIFO -kon keresztül ).
A programok megnyithatnak fájlleírókat (fájlokhoz, csővezetékekhez és hálózati kapcsolatokhoz) chroot-ban, ami megkönnyítheti a börtönbe zárást, mivel szükségtelenné teszi a működő fájlok tárolását egy chroot könyvtárban. Használható olyan kezdetleges képességrendszerként is, amelyben a program kifejezetten hozzáférést kap a chroot-on kívüli erőforrásokhoz a benne található leírók alapján.
Csak a superuser (root) tudja végrehajtani a chroot(2) rendszerhívást . Ennek célja, hogy megakadályozza a felhasználó támadását, ha egy setuid programot egy speciálisan kialakított chroot börtönbe helyez (például egy hamis /etc/passwd fájllal ), ami a jogosultság kiterjesztését eredményezi.
Önmagában a chroot mechanizmus nem teljesen biztonságos. Ha egy chroot-ban futó program root jogosultsággal rendelkezik, akkor egy második chrootot is végrehajthat a kilépéshez . Ez azért működik, mert egyes Unix kernelek nem teszik lehetővé a chroot kontextusok megfelelő egymásba ágyazását.
A legtöbb Unix rendszer nem teljesen fájlrendszer-orientált, és potenciálisan romboló funkciókat, például hálózatépítést és folyamatvezérlést hagy a rendszerhívási interfészen keresztül elérhetővé egy program számára a chrootban.
Maga a chroot mechanizmus nem tudja, hogyan kényszerítse ki az erőforrás-korlátokat, például az I/O sávszélességet, a lemezterületet vagy a CPU-időt.
Unix parancsok | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
|