Kako korak po korak stvoriti chroot jail u WSL2

Zadnje ažuriranje: 27/08/2025
Autor: Isaac
  • Chroot izolira procese promjenom korijena njihove datoteke u direktorij.
  • Zatvor zahtijeva binarne datoteke i biblioteke kopirane uz pomoć ldd-a.
  • Može se koristiti za testiranje, ograničene usluge i oporavak.
  • U WSL2 radi isto, s praktičnim nijansama ruta i nosača.

Vodič za Chroot u WSL2

Stvaranje chroot zatvora u WSL2 To je jednostavan i moćan način izolacije procesa unutar vaše distribucije. Linux en Windows (Omogućite način rada za razvojne programere u sustavu Windows 11), idealno za testiranje bez straha od kvara. Iako nije virtualni stroj ili kontejner, pravilno konfiguriran omogućuje vam ograničavanje opsega naredbe i aplikacije u određeno stablo direktorija.

U sljedećim redovima naći ćete detaljan vodič korak po korak koji integrira klasične Linux chroot prakse (kopiranje binarnih datoteka i ovisnosti s ldd, montiranje /proc, /dev i /sys kada je potrebno, prilagođavanje prompta itd.) zajedno s korisnim nijansama i prečacima u WSL2. Vidjet ćete tipične upotrebe, ograničenja kojih biste trebali biti svjesni i različite načine ulaska u zatvor ovisno o vašoj situaciji.

Što je chroot cage i kada ga je najbolje koristiti?

Koncept chroota

Naredba chroot mijenja korijenski direktorij datotečnog sustava procesa u direktorij po vašem izboru; od tog trenutka nadalje, taj proces "vjeruje" da je to kavezU praksi se koristi za nekoliko vrlo korisnih scenarija:

  • Testni pješčanik pokretati sumnjive ili nepouzdane programe bez utjecaja na ostale.
  • Izolirajte mrežne usluge, kao što je FTP poslužitelj ili čak web poslužitelj, ograničavajući ono što možete vidjeti i dodirnuti.
  • Ograničena okruženja na uređajima ili sustavima gdje bi korisnici trebali imati samo minimalan skup funkcija.
  • Oporavak sustavaPokrećete sustav s LiveCD-a, chroot-ate se na oštećeni sustav i popravljate ga iznutra.

Prije izrade kaveza, postoji zlatno pravilo kojeg se treba pridržavati: Unutar chroota morate smjestiti sve što ćete koristiti (binarne datoteke, biblioteke, konfiguracijske datoteke i, ako je primjenjivo, pseudo-sustavi poput /proc, /dev i /sys montirani s bind). Ako uslužni program nije dostupan u jail-u, neće raditi.

Ključni zahtjevi i koncepti prije početka

Zahtjevi za Chroot

Za rad s chrootom na bilo kojem Linuxu (uključujući distribuciju unutar WSL2) trebaju vam privilegije korijenU WSL2 se možete prijaviti kao root pokretanjem na Windowsima: wsl -d NazivVašeDistribucije -u rootili podizanje na root unutar sesije pomoću su - ako ste to konfigurirali.

Nadalje, treba razumjeti da chroot nije apsolutno sigurnosno rješenjeIzolira vas na razini datotečnog sustava, ali nije ekvivalentno robusnom sandboxu poput kontejnera s imenskim prostorima/cgrupama. Ipak, za gore opisane slučajeve, nevjerojatno je praktično i brzo se postavlja.

Na kraju, upamtite to Ne rade svi daemoni i programi dobro u chrootuNeki očekuju sistemske strukture, utičnice ili usluge koje nisu prisutne. Među klasičnim uzročnicima problema je, na primjer, sendmail.

  Sigurno overclockanje na Windowsima 11 uz Afterburner, AI Suite i EasyTune

Osnovni primjer: zatvor u /opt/chroot_dir za pokretanje ls naredbe

Osnovni primjer chroota

Počnimo s jednostavnim primjerom: stvorite zatvor u /opt/chroot_dir gdje možemo pokrenuti ls (i bash), kopirajući biblioteke koje su im potrebne. To se jednako odnosi na WSL2 i bilo koju standardnu ​​Linux distribuciju.

Identificirajte binarne ovisnosti s ldd. Vrlo je praktično istovremeno pregledavati bash i ls:

ldd /bin/bash /bin/ls

Vidjet ćete izlaz sličan sljedećem, koji pokazuje koje dinamičke biblioteke treba kopirati u zatvor: libtinfo.so.6, libdl.so.2, libc.so.6, dinamički učitivač ld-linuxa itd. Primjer onoga što biste mogli dobiti:

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

Zatim stvorite strukturu direktorija i kopirajte binarne datoteke i biblioteke u zatvor. Prilagodite rute svom sustavu (ldd vam daje točne tragove):

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/

Nije obavezno, ali možete prilagoditi prompt unutar chroota da ga odmah prepozna. Na primjer, dodajte PS1 privlačan prefiks:

echo "PS1='JAULA $ '" | sudo tee /opt/chroot_dir/etc/bash.bashrc

Uđi u kavez pokretanje bash-a kao početnog procesa:

chroot /opt/chroot_dir /bin/bash

Od tog trenutka nadalje, sve što pokrećete unutra bit će ograničeno na stablo /opt/chroot_dir; neće utjecati na procese izvan kaveza a ako nedostaju neke ovisnosti, odmah ćete znati jer se binarna datoteka neće pokrenuti.

Jail po korisniku: skripta za prijavu i minimalna struktura u /home

Kavez po korisniku

Drugi pristup je priprema kaveza specifično za određenog korisnikaZamislite da želite ograničiti korisnika pajaro na /home/pajaro, s pristupom bash-u i osnovnim uslužnim programima poput ls i cp.

Prvo, stvorite korisnika (od korijena):

su -
adduser pajaro
passwd pajaro

Zatim postavite "wrapper" shell koji pokreće chroot pri ulasku. Uredi /bin/cage s vašim omiljenim urednikom i stavite ovaj sadržaj:

vim /bin/jaula
#!/bin/bash
/usr/sbin/chroot /home/pajaro /bin/bash

Dajte dozvole za izvršavanje rukopis tako da se može koristiti kao školjka. Bitno je da usermoder to prihvati:

chmod a+x /bin/jaula

Sada stvorite osnovnu strukturu direktorija unutar korisnikovog početnog direktorija i pripremite ovisnosti. Imajte na umu da Ovisno o arhitekturi, možda će vam trebati lib64 uz lib:

mkdir -p /home/pajaro/{bin,lib,lib64,usr/lib}

Pregledajte bash ovisnosti i kopirajte sve što vam treba kako je naznačeno u ldd:

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/

Također uključuje uobičajene uslužne programe kao što su ls i cp i njihove biblioteke. Potvrdite s ldd koje datoteke trebate preuzeti:

cp /bin/ls /home/pajaro/bin/
cp /bin/cp /home/pajaro/bin/
ldd /bin/ls
ldd /bin/cp

Da bi korisnik ušao u kavez odmah nakon prijave, dodijelite svoju zadanu ljusku:

usermod -s /bin/jaula pajaro

Spremno: kada se ptica prijavi, sletjet će unutar /home/pajaro chroota i radit će s minimalnim skupom alata koje ste kopirali.

  Zadani pisač zadržava promjene u početnom sustavu Windows 10

Korištenje chroota s određenim ID-ovima: –userspec i provjera /etc/passwd

chroot s korisničkom specifikacijom

Ponekad biste možda htjeli ući u zatvor kao određeni UID i GID, na primjer za testiranje dozvola. S chrootom to možete učiniti pomoću –userspec=UID:GID.

Prvo, identificirajte ciljne korisničke ID-ove gledajući / Etc / passwd; možete koristiti grep kako biste ga brzo pronašli:

cat /etc/passwd | grep ${usuario}

Polja su odvojena dvotočkom i Treće i četvrto polje odgovaraju UID-u i GID-u., respektivno. S tim vrijednostima pri ruci, pokrenite chroot navodeći željeni jail i ID-ove. Na primjer, ako zatvoreni korisnik ima UID 1002 i GID 1003, a vaš jail se nalazi na /usr/src/jail:

chroot --userspec=1002:1003 /usr/src/jaula/

Ako prilikom pokušaja prijave vidite grešku koja ukazuje na to bash se ne nalazi unutar kaveza, ovo znači da još niste kopirali binarnu datoteku i njezine biblioteke u strukturu zatvora. Ponovite ldd postupak na /bin/bash i /bin/ls i premjestite ovisnosti na njihove odgovarajuće lokacije.

Oporavak sustava: Chrootiranje s Live CD-a

Oporavak s LiveCD-om i chrootom

Druga vrlo česta situacija je korištenje chroota za popravak sustava instaliranog na disku podizanje sustava prvo s Live CD-a. To vam omogućuje prijavu kao da ste normalno pokrenuli sustav, ali iz live okruženja.

Generički koraci bi bili:

  1. Stvorite radni direktorij u koji ćete montirati ciljni datotečni sustav.
  2. Montirajte korijensku particiju sustava koju želite popraviti (na primjer, /dev/sda1).
  3. Povežite mount /proc, /dev i /sys kako bi alati ispravno radili unutar chroota.
  4. Pokrenite chroot naredbu u direktorij za montiranje.
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

Opcija –bind uzrokuje isti datotečni sustav dostupan je na obje točke, čuvajući okruženje potrebno za normalno funkcioniranje naredbi poput apt, update-initramfs ili editora unutar chroota.

Korisne značajke ako radite u WSL2

Lagani virtualni strojU WSL2, Linux se pokreće unutar laganog virtualnog stroja, ali svi prethodni koraci primjenjuju se gotovo isto. Evo nekoliko praktičnih savjeta koji će vam olakšati život u ovom okruženju i koji se uklapaju u ono što smo već vidjeli:

  • Brzo se prijavite kao rootIz Windowsa, koristite wsl -d YourDistro -u root za otvaranje izravne root sesije i montiranje vašeg jaila bez problema.
  • Rute i montaže: ako trebaš pristup Windows datotekama, imajte na umu da se nalaze pod /mnt/c, /mnt/d, itd. Nije uobičajeno montirati ih unutar chroota, ali možete to učiniti ako vaš slučaj to zahtijeva.
  • /proc, /sys i /devPrilikom pripreme jaila za pokretanje sistemskih alata unutar WSL2, možete koristiti mount –bind kao u odjeljku LiveCD kako bi stvari radile.
  • Skripte i ljuskeUzorak stvaranja /bin/jail i njegovog dodjeljivanja s usermod -s funkcionira isto u WSL2; samo provjerite jeste li kopirali binarne datoteke i biblioteke provjerom ldd kao i obično i stvaranje skripti u bashu prikladan.
  Sadržaj nije kopiran u međuspremnik: Potpuni vodič za uzroke i rješenja

Iako WSL2 nudi izolaciju od Windowsa, Chroot kavez radi unutar same distribucije.Ako tražite jaču izolaciju na razini kernela, razmislite o nadopunjavanju specifičnim kontejnerima ili sandboxima ili pregledajte kako konfigurirajte WSL2 s prilagođenom jezgrom.

Proširenja, ograničenja i trikovi za potpuniji kavez

Ako vam zatvor nije dovoljan, u Debianu možete koristiti debootstrap za jailbreak cijelog sustava unutar direktorija, pa izgleda vrlo slično minimalnoj instalaciji. To je vrlo čist način za imati samodostatno okruženje unutar vaše distribucije, čak i u WSL2.

Zapamtite već spomenutu nijansu: Nisu sve usluge spremne za chroot bez dodatnih konfiguracija (putanja, utičnica, datoteka statusa itd.). Sendmail je klasičan primjer. Za moderne usluge, kontejner ili usluga systemd-nspawn mogu biti korisniji ako vam je potrebno nešto vrlo slično mini-sustavu.

Običaj koji pomaže u izbjegavanju zabune je ostavite prompt ljuske jasno označen unutar kaveza (kao što smo učinili s PS1) i stavite drva i konfiguracije u konzistentnim putanjama. Na taj način, bez obzira prijavljujete li se s chroot –userspec ili putem ljuske /bin/jail, uvijek ćete znati da ste unutra.

Da izađeš iz kaveza, samo trči izlaz U bash sesiji koju ste započeli s chrootom; odmah ćete se vratiti u svoje normalno okruženje, bez ikakvih nuspojava ako ste kopirali samo potrebne dijelove.

Ako želite dodati više naredbi u kavez, ponovi uzorakPronađite binarnu datoteku koja vam je potrebna, pregledajte njezine ovisnosti pomoću ldd-a i kopirajte sve na ekvivalentne putanje unutar zatvorske mape. Binarne datoteke obično idu u bin ili usr/bin; biblioteke u lib ili lib64, ovisno o aplikaciji.

Nakon završetka, imat ćete zatvoreno okruženje u kojem možete pokretati određene uslužne programe, izolirati jednostavne usluge ili obavljati administrativne zadatke bez straha od poremećenja glavnog sustava. S WSL2 iskustvo je jednako izravno i vrlo praktično za testiranje na Windowsima bez postavljanja teških virtualnih strojeva.

Postavljanje razvojnog okruženja s Windows podsustavom za Linux
Povezani članak:
Postavljanje razvojnog okruženja s WSL-om na Windowsima