- A Chroot a folyamatokat úgy izolálja, hogy a fájl gyökerét egy könyvtárra cseréli.
- A jailhez az ldd segítségével másolt bináris fájlokra és könyvtárakra van szükség.
- Használható tesztelésre, korlátozott szolgáltatásokra és helyreállításra.
- A WSL2-ben ugyanúgy működik, az útvonalak és a hátizsákok gyakorlatias árnyalataival.

Chroot jail létrehozása WSL2-ben Ez egy egyszerű és hatékony módja a folyamatok elkülönítésének a disztrón belül. Linux en Windows (Fejlesztői mód engedélyezése a Windows 11 rendszerben), ideális teszteléshez anélkül, hogy attól kellene tartania, hogy bármi elromlik. Bár nem virtuális gép vagy konténer, megfelelően konfigurálva lehetővé teszi a hatókör korlátozását parancsok és az alkalmazásokat egy adott könyvtárfába.
A következő sorokban megtalálod részletes, lépésről lépésre haladó útmutató amely integrálja a klasszikus Linux chroot gyakorlatokat (binárisok és függőségek másolása ldd paranccsal, /proc, /dev és /sys csatolása szükség esetén, a prompt módosítása stb.) a WSL2 hasznos árnyalataival és gyorsbillentyűivel együtt. Ismerkedni fogsz a tipikus felhasználási módokkal, a tudnod kellő korlátokkal és a jailbe jutás különböző módjaival, az adott helyzettől függően.
Mi az a chroot ketrec, és mikor a legjobb használni?

A chroot parancs a folyamat fájlrendszerének gyökerét egy tetszőleges könyvtárra módosítja; ettől a ponttól kezdve, az a folyamat "hiszi", hogy az/az a ketrecA gyakorlatban számos nagyon hasznos forgatókönyvhöz használják:
- Tesztelési homokozó gyanús vagy megbízhatatlan programok futtatása a többi program befolyásolása nélkül.
- Hálózati szolgáltatások elkülönítése, például egy FTP-kiszolgáló vagy akár egy webkiszolgáló, korlátozva a látható és megérinthető tartalmakat.
- Korlátozott környezetek olyan eszközökön vagy rendszereken, ahol a felhasználóknak csak minimális funkciókkal kell rendelkezniük.
- Rendszer-helyreállításLiveCD-ről bootolsz, chroot-olsz a sérült rendszerbe, és belülről megjavítod.
A ketrec létrehozása előtt van egy aranyszabály, amelyet be kell tartani: A chrooton belül mindent el kell helyezni, amit használni fogsz. (binárisok, függvénykönyvtárak, konfigurációs fájlok, és ha alkalmazható, pszeudo-rendszerek, mint például a /proc, /dev és /sys, bind paranccsal csatolva). Ha egy segédprogram nem érhető el a jailben, akkor nem fog működni.
Főbb követelmények és fogalmak a kezdés előtt
Chroottal való együttműködés bármilyen Linux rendszeren (beleértve a WSL2-n belüli disztribúciókat is) jogosultságokra van szükséged gyökérA WSL2-ben root felhasználóként jelentkezhet be Windows rendszeren: wsl -d A DisztribúcióNeved -u root, vagy root jogosultságok emelése a munkameneten belül a su paranccsal – ha be van állítva.
Továbbá azt is meg kell érteni A chroot nem egy abszolút biztonsági megoldásFájlrendszer szinten izolál, de nem egyenértékű egy robusztus, sandboxhoz hasonló konténerekkel, névterekkel/cgroupokkal. A fent leírt esetekben mégis hihetetlenül praktikus és gyorsan beállítható.
Végül emlékszem erre Nem minden démon és program működik jól chrootbanVannak, akik olyan rendszerstruktúrákra, socketekre vagy szolgáltatásokra számítanak, amelyek nincsenek jelen. A klasszikus bajkeverők közé tartozik például a sendmail.
Alap példa: egy jail a /opt/chroot_dir könyvtárban az ls futtatásához

Kezdjük egy egyszerű példával: hozz létre egy jail-t a /opt/chroot_dir könyvtárban ahol futtathatjuk az ls (és a bash) parancsot, átmásolva a szükséges könyvtárakat. Ez ugyanúgy vonatkozik a WSL2-re és bármely szabványos Linux disztribúcióra.
Bináris függőségek azonosítása ldd-vel. Nagyon kényelmes egyszerre megtekinteni a bash-t és az ls-t:
ldd /bin/bash /bin/ls
A következőhöz hasonló kimenetet fog látni, amely jelzi, hogy mely dinamikus könyvtárakat kell másolni a jailbe: libtinfo.so.6, libdl.so.2, libc.so.6, az ld-linux dinamikus betöltő stb. Egy példa arra, hogy mit kaphatsz:
linux-gate.so.1 => (0x0013c000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
Ezután hozd létre a könyvtárstruktúrát, és másold a bináris fájlokat és a függvénykönyvtárakat a jailbe. Igazítsa az útvonalakat a rendszeréhez (az ldd pontos nyomokat ad):
mkdir -p /opt/chroot_dir/{bin,lib,lib64,usr/lib}
cp /bin/bash /opt/chroot_dir/bin/
cp /bin/ls /opt/chroot_dir/bin/
cp /lib/x86_64-linux-gnu/libtinfo.so.6 /opt/chroot_dir/lib/
cp /lib/x86_64-linux-gnu/libdl.so.2 /opt/chroot_dir/lib/
cp /lib/x86_64-linux-gnu/libc.so.6 /opt/chroot_dir/lib/
cp /lib64/ld-linux-x86-64.so.2 /opt/chroot_dir/lib64/
Nem kötelező, de a chroot-on belül testreszabhatod a promptot, hogy azonnal felismerje. Például: a PS1-et egy figyelemfelkeltő előtaggal kell ellátni:
echo "PS1='JAULA $ '" | sudo tee /opt/chroot_dir/etc/bash.bashrc
Lépj be a ketrecbe bash indítása kezdeti folyamatként:
chroot /opt/chroot_dir /bin/bash
Ettől a pillanattól kezdve minden, amit belül futtatsz, a /opt/chroot_dir fára korlátozódik; nem befolyásolja a ketrecen kívüli folyamatokat és ha bármilyen függőség hiányzik, azonnal tudni fogod, mert a bináris fájl nem indul el.
Felhasználónkénti jail: bejelentkezési szkript és minimális struktúra a /home könyvtárban

Egy másik megközelítés a ketrec előkészítése egy adott felhasználóra jellemzőKépzeld el, hogy a pajaro felhasználót a /home/pajaro könyvtárra szeretnéd korlátozni, hozzáféréssel a bash-hez és az olyan alapvető segédprogramokhoz, mint az ls és a cp.
Először hozd létre a felhasználót (gyökérből):
su -
adduser pajaro
passwd pajaro
Ezután állíts be egy „wrapper” shell-t, amely belépéskor elindítja a chroot-ot. Szerkesztés /bin/cage a kedvenc szerkesztőddel, és tedd be ezt a tartalmat:
vim /bin/jaula
#!/bin/bash
/usr/sbin/chroot /home/pajaro /bin/bash
Adj végrehajtási engedélyeket a forgatókönyv hogy héjként lehessen használni. A usermod számára elengedhetetlen az elfogadása.:
chmod a+x /bin/jaula
Most hozd létre az alapvető könyvtárstruktúrát a felhasználó saját könyvtárában, és készítsd elő a függőségeket. Ne feledd, hogy Az architektúrától függően a lib mellett szükség lehet a lib64-re is.:
mkdir -p /home/pajaro/{bin,lib,lib64,usr/lib}
Bash függőségek vizsgálata és másold át mindent, amire szükséged van, ahogy az ldd jelzi:
ldd /bin/bash
cp /bin/bash /home/pajaro/bin/
cp /lib/x86_64-linux-gnu/libtinfo.so.6 /home/pajaro/lib/
cp /lib/x86_64-linux-gnu/libdl.so.2 /home/pajaro/lib/
cp /lib/x86_64-linux-gnu/libc.so.6 /home/pajaro/lib/
cp /lib64/ld-linux-x86-64.so.2 /home/pajaro/lib64/
Tartalmaz olyan gyakori segédprogramokat is, mint az ls és a cp, valamint azok könyvtárait. Erősítsd meg az ldd-vel, hogy mely fájlokat kell elvinned:
cp /bin/ls /home/pajaro/bin/
cp /bin/cp /home/pajaro/bin/
ldd /bin/ls
ldd /bin/cp
Ahhoz, hogy a felhasználó bejelentkezéskor közvetlenül a ketrecbe lépjen, alapértelmezett shell hozzárendelése:
usermod -s /bin/jaula pajaro
Készen áll: amikor a madár bejelentkezik, a /home/pajaro chroot könyvtárba fog érkezni és a másolt minimális eszközkészlettel fog működni.
Chroot használata adott azonosítókkal: –userspec és az /etc/passwd ellenőrzése

Előfordulhat, hogy a jailbe egy adott UID és GID azonosítót kell megadni, például a jogosultságok teszteléséhez. A chroot segítségével ezt a következőképpen teheted meg: –userspec=UID:GID.
Először is, azonosítsa a célfelhasználói azonosítókat a következők alapján: / Etc / passwd; a grep segítségével gyorsan megtalálhatod:
cat /etc/passwd | grep ${usuario}
A mezőket kettőspont választja el egymástól, és A harmadik és negyedik mező az UID-nak és a GID-nek felel meg., rendre. Ha ezek az értékek a rendelkezésünkre állnak, futtassuk a chroot parancsot a kívánt jail és azonosítók megadásával. Például, ha a jailbe zárt felhasználó UID-ja 1002 és GID-je 1003, és a jail a /usr/src/jail könyvtárban található:
chroot --userspec=1002:1003 /usr/src/jaula/
Ha bejelentkezéskor hibát lát, amely azt jelzi, hogy A bash nem található a ketrecben, ez azt jelzi, hogy még nem másoltad át a bináris fájlt és annak függvénykönyvtárait a jail struktúrába. Ismételd meg az ldd folyamatot a /bin/bash és /bin/ls könyvtárakon, és helyezd át a függőségeket a megfelelő helyükre.
Rendszer-helyreállítás: Chrootolás Live CD-ről
Egy másik nagyon gyakori eset a chroot használata lemezre telepített rendszer javítása először egy élő CD-ről indítsd el a rendszert. Ez lehetővé teszi, hogy úgy jelentkezz be, mintha normál módon indultál volna, de az élő környezetből.
Az általános lépések a következők lennének:
- Hozz létre egy munkakönyvtárat, ahová a cél fájlrendszert csatolni fogod.
- Csatold fel a javítani kívánt rendszer root partícióját (például /dev/sda1).
- A mount /proc, /dev és /sys könyvtárak kötésével biztosíthatod az eszközök megfelelő működését a chroot-on belül.
- Futtassa a chroot parancsot a mount könyvtárban.
mkdir /media/jaula
mount /dev/sda1 /media/jaula
mount --bind /proc /media/jaula/proc
mount --bind /dev /media/jaula/dev
mount --bind /sys /media/jaula/sys
chroot /media/jaula
A –bind opció okozza ugyanaz a fájlrendszer érhető el mindkét ponton, megőrizve a parancsok, például az apt, az update-initramfs vagy az editors chroot-on belüli normál működéséhez szükséges környezetet.
Hasznos funkciók, ha WSL2-ben dolgozol
Egy könnyűsúlyú virtuális gépA WSL2-ben egy könnyű virtuális gépen belül futtatsz Linuxot, de az összes korábbi lépés szinte ugyanúgy érvényes. Íme néhány gyakorlati tipp, amelyek megkönnyítik az életedet ebben a környezetben, és amelyek illeszkednek a már látottakhoz:
- Gyors bejelentkezés rootkéntWindows rendszeren a wsl -d YourDistro -u root paranccsal nyisson meg egy közvetlen root munkamenetet, és akadálytalanul csatolja fel a jailjét.
- Útvonalak és montázsok: ha szükséged van Windows fájlok elérése, ne feledd, hogy a /mnt/c, /mnt/d stb. könyvtárak alatt találhatók. Nem szokásos a chrooton belül csatolni őket, de ha a helyzeted megkívánja, megteheted.
- /proc, /sys és /dev fájlokAmikor egy jail-t előkészítünk a WSL2-n belüli rendszereszközök futtatására, a LiveCD részben leírtakhoz hasonlóan a mount –bind kapcsolóval beállíthatjuk a dolgokat.
- Szkriptek és shell-ekA /bin/jail létrehozása és a usermod -s paranccsal való hozzárendelésének mintája ugyanúgy működik a WSL2-ben; csak győződj meg róla, hogy a bináris fájlokat és a függvénykönyvtárakat lemásoltad az ldd szokásos ellenőrzésével, és szkriptek létrehozása bash-ban alkalmas.
Bár a WSL2 elszigeteltséget kínál a Windowstól, A chroot ketrec magán a disztrón belül működik.Ha erősebb izolációra vágysz kernel szinten, érdemes lehet kiegészíteni specifikus konténerekkel vagy sandboxokkal, vagy áttekinteni, hogyan... WSL2 konfigurálása egyéni kernellel.
Bővítések, korlátok és trükkök egy teljesebb ketrechez
Ha a jail nem elég neked, Debianban használhatod debootstrap-pel jailbreakelni egy teljes rendszert egy könyvtáron belül, tehát nagyon hasonlít egy minimális telepítéshez. Ez egy nagyon letisztult módja annak, hogy egy önálló környezetet hozz létre a disztródon belül, még a WSL2-ben is.
Ne feledkezzünk meg a már említett árnyalatról: Nem minden szolgáltatás chroot-kompatibilis további konfigurációk (elérési utak, socketek, állapotfájlok stb.) nélkül. A Sendmail egy klasszikus példa. Modern szolgáltatások esetén egy konténer vagy egy systemd-nspawn szolgáltatás előnyösebb lehet, ha valami nagyon mini-rendszerhez hasonlóra van szükség.
Egy szokás, amely segít elkerülni a zavart, az hagyd jól láthatóan kijelölve a shell promptot a ketrec belsejében (ahogy a PS1-gyel tettük) és helyezzük el naplók és a konfigurációkat konzisztens elérési utakon. Így akár a chroot –userspec paranccsal, akár a /bin/jail shell segítségével jelentkezel be, mindig tudni fogod, hogy be vagy jelentkezve.
Hogy kijuss a ketrecből, csak fuss kijárat A chroot-tal indított bash munkamenetben azonnal visszatérsz a normál környezetedbe, mellékhatások nélkül, ha csak a szükséges részeket másoltad át.
Ha további parancsokat szeretne hozzáadni a ketrechez, ismételd meg a mintátKeresd meg a szükséges bináris fájlt, vizsgáld meg a függőségeit az ldd paranccsal, és másold át mindent a jailen belüli megfelelő elérési utakra. A bináris fájlok általában a bin vagy az usr/bin könyvtárba kerülnek; a függvénykönyvtárak pedig a lib vagy lib64 könyvtárba, az alkalmazástól függően.
A befejezést követően egy ketreces környezettel fogsz rendelkezni, ahol futtathatsz speciális segédprogramokat, elkülöníthetsz egyszerű szolgáltatásokat, vagy adminisztratív feladatokat végezhetsz anélkül, hogy attól kellene tartanod, hogy összezavarod a fő rendszered. A WSL2-vel az élmény ugyanolyan közvetlen és nagyon kényelmes Windows rendszeren történő teszteléshez nehéz virtuális gépek beállítása nélkül.
Szenvedélyes író a bájtok és általában a technológia világáról. Szeretem megosztani tudásomat írásban, és ezt fogom tenni ebben a blogban, megmutatom a legérdekesebb dolgokat a kütyükről, szoftverekről, hardverekről, technológiai trendekről stb. Célom, hogy egyszerű és szórakoztató módon segítsek eligazodni a digitális világban.

