Kako korak po korak kreirati chroot jail u WSL2

Posljednje ažuriranje: 27/08/2025
Autor: Isaac
  • Chroot izoluje procese promjenom njihovog korijenskog direktorijuma datoteke u direktorijum.
  • Zatvor zahtijeva kopiranje binarnih datoteka i biblioteka pomoću ldd-a.
  • Može se koristiti za testiranje, ograničene usluge i oporavak.
  • U WSL2 to funkcioniše isto, sa praktičnim nijansama ruta i nosača.

Vodič za Chroot u WSL2

Kreiranje chroot zatvora u WSL2 To je jednostavan i moćan način za izolaciju 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 virtuelna mašina ili kontejner, pravilno konfigurisano vam omogućava da ograničite opseg 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 zavisnosti pomoću ldd, montiranje /proc, /dev i /sys kada je potrebno, podešavanje prompta itd.) zajedno s korisnim nijansama i prečicama u WSL2. Vidjet ćete tipične upotrebe, ograničenja kojih biste trebali biti svjesni i različite načine za ulazak u zatvor ovisno o vašoj situaciji.

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

Koncept chroota

Naredba chroot mijenja korijenski direktorij datotečnog sistema 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.
  • Izolujte mrežne usluge, kao što je FTP server ili čak web server, ograničavajući ono što možete vidjeti i dodirnuti.
  • Ograničena okruženja na uređajima ili sistemima gdje bi korisnici trebali imati samo minimalan skup funkcija.
  • Oporavak sistemaPokrećete sistem sa LiveCD-a, chroot-ujete ga i popravljate ga iznutra.

Prije nego što napravite kavez, 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-sistemi 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 sa chroot-om na bilo kojem Linuxu (uključujući distribuciju unutar WSL2) potrebne su vam privilegije korijenU WSL2 se možete prijaviti kao root pokretanjem na Windowsu: wsl -d NazivVašeDistribucije -u root, ili podizanje na root nivo unutar sesije pomoću su - ako ste to konfigurirali.

Štaviše, treba to shvatiti chroot nije apsolutno sigurnosno rješenjeIzoluje vas na nivou datotečnog sistema, ali nije ekvivalentno robusnom sandboxu poput kontejnera sa imenskim prostorima/cgrupama. Ipak, za gore opisane slučajeve, nevjerovatno je praktično i brzo se postavlja.

Na kraju, upamtite to Ne rade svi daemoni i programi dobro u chrootu.Neki očekuju sistemske strukture, sockete ili servise koji nisu prisutni. Među klasičnim uzročnicima problema je, na primjer, sendmail.

  Saznajte kako da isključite javna WiFi obavještenja na Android mobitelu

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

Osnovni primjer chroota

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

Identifikujte binarne zavisnosti sa ldd. Veoma je zgodno 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 kreirajte strukturu direktorija i kopirajte binarne datoteke i biblioteke u zatvor. Prilagodite rute prema svom sistemu (ldd vam daje tač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 pokrenete unutra bit će ograničeno na stablo /opt/chroot_dir; neće uticati na procese izvan kaveza a ako nedostaju neke zavisnosti, 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, kreirajte korisnika (od korijena):

su -
adduser pajaro
passwd pajaro

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

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

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

chmod a+x /bin/jaula

Sada kreirajte osnovnu strukturu direktorija unutar korisničkog početnog direktorija i pripremite zavisnosti. Zapamtite da U zavisnosti od arhitekture, pored biblioteke lib, možda će vam trebati i biblioteka lib64.:

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

Pregledajte bash zavisnosti i kopirajte sve što vam je potrebno 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 sa 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 direktno nakon prijave, dodijelite svoju zadanu ljusku:

usermod -s /bin/jaula pajaro

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

  Kako mogu ukloniti nepovezani Bluetooth na Macu?

Korištenje chroota sa specifičnim ID-ovima: –userspec i provjera /etc/passwd

chroot sa korisničkom specifikacijom

Ponekad biste možda željeli ući u zatvor kao određeni UID i GID, na primjer za testiranje dozvola. Pomoću chroota to možete učiniti koristeći –userspec=UID:GID.

Prvo, identificirajte ciljne korisničke ID-ove gledajući na / etc / passwdMožete koristiti grep da biste ga brzo pronašli:

cat /etc/passwd | grep ${usuario}

Polja su odvojena dvotačkama, i Treće i četvrto polje odgovaraju UID-u i GID-u., respektivno. Sa 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 ukazuje na to da još niste kopirali binarni fajl i njegove biblioteke u jail strukturu. Ponovite ldd proces na /bin/bash i /bin/ls i premjestite zavisnosti na njihove odgovarajuće lokacije.

Oporavak sistema: Chrootovanje sa Live CD-a

Oporavak pomoću LiveCD-a i chroota

Druga vrlo uobičajena situacija je korištenje chroota za popravak sistema instaliranog na disku prvo pokretanje sistema sa Live CD-a. Ovo vam omogućava da se prijavite kao da ste normalno pokrenuli sistem, ali iz live okruženja.

Generički koraci bi bili:

  1. Kreirajte radni direktorij u koji ćete montirati ciljni datotečni sistem.
  2. Montirajte korijensku particiju sistema 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 za mount direktorij.
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 sistem je dostupan na obje tačke, čuvajući okruženje potrebno za normalno funkcionisanje naredbi kao što su apt, update-initramfs ili editori unutar chroota.

Korisne funkcije ako radite u WSL2

Lagana virtuelna mašinaU WSL2, Linux se pokreće unutar lagane virtuelne mašine (VM), ali svi prethodni koraci se primjenjuju 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 da biste otvorili direktnu root sesiju i montirali svoj jail 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 LiveCD odjeljku da bi stvari radile.
  • Skripte i školjkeUzorak kreiranja /bin/jail i njegovog dodjeljivanja sa usermod -s funkcioniše isto u WSL2; samo se uvjerite da ste kopirali binarne datoteke i biblioteke provjerom ldd kao i obično i kreiranje skripti u bashu pogodan.
  Kako aktivirati "karticu za programere" u Microsoft Officeu - Excel Word PowerPoint

Iako WSL2 nudi izolaciju od Windowsa, Chroot kavez funkcioniše unutar same distribucije.Ako tražite jaču izolaciju na nivou kernela, razmislite o njenom dopunjavanju specifičnim kontejnerima ili sandbox okruženjima ili pregledajte kako konfigurišite WSL2 sa prilagođenim kernelom.

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

Ako vam zatvor nije dovoljan, u Debianu možete koristiti debootstrap za jailbreak kompletnog sistema unutar direktorija, tako da izgleda vrlo slično minimalnoj instalaciji. To je vrlo čist način da imate samodovoljno okruženje unutar vaše distribucije, čak i u WSL2.

Zapamtite već spomenutu nijansu: Nisu svi servisi spremni za chroot bez dodatnih konfiguracija (putanja, socketa, statusnih datoteka itd.). Sendmail je klasičan primjer. Za moderne servise, kontejner ili systemd-nspawn servis mogu biti korisniji ako vam je potrebno nešto vrlo slično mini-sistemu.

Običaj koji pomaže u izbjegavanju zabune je ostavite prompt shell-a jasno označen unutar kaveza (kao što smo uradili sa PS1) i postavite rezanje i konfiguracije u konzistentnim putanjama. Na ovaj način, bez obzira da li se prijavljujete sa 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 još komandi u kavez, ponovi uzorakPronađite binarnu datoteku koja vam je potrebna, pregledajte njene zavisnosti 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 servise ili obavljati administrativne zadatke bez straha od poremećaja glavnog sistema. Sa WSL2 iskustvo je jednako direktno i vrlo praktično za testiranje na Windowsu bez postavljanja teških virtuelnih mašina.

Postavljanje razvojnog okruženja sa Windows podsistemom za Linux
Vezani članak:
Postavljanje razvojnog okruženja sa WSL-om na Windowsu

Ostavite komentar