- 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.
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?
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
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.
Osnovni primjer: zatvor u /opt/chroot_dir za pokretanje ls naredbe
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
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.
Korištenje chroota sa specifičnim ID-ovima: –userspec i provjera /etc/passwd
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
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:
- Kreirajte radni direktorij u koji ćete montirati ciljni datotečni sistem.
- Montirajte korijensku particiju sistema koju želite popraviti (na primjer, /dev/sda1).
- Povežite mount /proc, /dev i /sys kako bi alati ispravno radili unutar chroota.
- 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.
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.
Strastveni pisac o svijetu bajtova i tehnologije općenito. Volim dijeliti svoje znanje kroz pisanje, a to je ono što ću raditi na ovom blogu, pokazivati vam sve najzanimljivije stvari o gadžetima, softveru, hardveru, tehnološkim trendovima i još mnogo toga. Moj cilj je pomoći vam da se krećete u digitalnom svijetu na jednostavan i zabavan način.