Naredba chroot stvara izolirano okruženje na Linuxu promjenom korijenskog direktorija za sve pokrenute procese.

Želite li pokretati aplikacije ili usluge u izoliranom prostoru na Linuxu? Ili možda želite testirati i otkloniti pogreške u aplikaciji a da ona ne ometa ostatak vašeg sustava? Ako je tako, htjet ćete naučiti više o chrootu, moćnom mehanizmu ugrađenom u Linux koji vam omogućuje stvaranje zasebnog okruženja unutar vašeg sustava.

Istražimo detaljno chroot, naučimo o njegovim prednostima, slučajevima korištenja, kako ga postaviti na Linux sustav i, ako je potrebno, kako ga pobjeći.

Što je chroot u Linuxu?

chroot ili change-root je nedvojbeno jedan od najjednostavnijih i najstarijih oblika softvera za kontejnerizaciju koji korisniku omogućuje sigurno postavljanje aplikacija i usluga u sandbox. Sandboxing, u računalnim terminima, je proces izolacije programa u ograničenom prostoru s unaprijed definiranim resursima.

Ako ste upoznati s Docker i kako radi, o chrootu možete razmišljati kao o njegovoj znatno ogoljenoj verziji. chroot funkcionira mijenjajući korijenski direktorij programa, ograničavajući pristup i vidljivost, te tako pruža dodatni sloj izolacije i sigurnosti.

U biti, stvorite zaseban direktorij, kopirate sve ovisnosti programa u novi direktorij, a zatim pokrenete naredbu chroot. To omogućuje programu da ispravno funkcionira dok nema pristup osnovnom datotečnom sustavu.

chrooting programa je odličan način testiranja njegove pouzdanosti u sigurnom prostoru bez mijenjanja stvarnih datoteka sustava. Štoviše, također možete smanjiti sigurnosni rizik uzrokovan kompromitiranim paketom jer u chrootiranom okruženju kompromitirani paket neće moći pristupiti i modificirati osjetljive sistemske datoteke.

Program će samo moći pristupiti i vidjeti datoteke uvezene u chrooted direktorij, inače poznat kao "chroot zatvor". To sprječava da program i njegovi podprocesi ne ometaju osnovni sustav.

Što je chroot zatvor?

Chroot zatvor je izolirano okruženje u kojem se nalaze i izvršavaju chroot programi. Izraz chroot zatvor izveden je iz koncepta da proces i njegovi podprocesi unutar chroot okruženja nemaju pristup niti vidljivost osnovnog datotečnog sustava i zarobljeni su unutar granica chroota s unaprijed određenim resursi.

Sada kada vam je koncept chroota jasan, krenimo u praksu i naučimo kako možete stvoriti chroot zatvor i pokrenuti procese u njemu.

Kako stvoriti chroot zatvor i izvršavati programe u njemu

Chroot zatvor je u biti direktorij koji sadrži sve potrebne resurse, datoteke, binarne datoteke i druge ovisnosti koje bi program trebao ispravno funkcionirati.

Međutim, za razliku od uobičajenog okruženja Linuxa, okruženje chroot zatvora je vrlo ograničeno i program ne može pristupiti vanjskim ili dodatnim datotekama i resursima sustava.

Na primjer, da biste pokrenuli Bash shell u chroot zatvoru, trebali biste kopirati Bash binarnu datoteku i sve njene ovisnosti u chroot direktorij.

Evo koraka za stvaranje chroot zatvora i stvaranje Bash ljuske:

  1. Da bi se program uspješno izvodio, trebate kopirati sve njegove ovisnosti u chrooted direktorij. Pronađimo binarnu datoteku, u ovom slučaju Bash, i lokaciju svih njezinih ovisnosti pomoću naredbi which i ldd:
    koji bash
    ldd /usr/bin/bash
  2. Sada kada znate lokacije binarne datoteke i njezinih ovisnosti, kopirajte ih u direktorij koji želite pretvoriti u chroot zatvor. Pomoću naredbe mkdir kreirajte potrebne direktorije i pomoću naredba cp, kopirajte sve datoteke u odgovarajuće direktorije:
    mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
  3. Konačno, s kopiranim programom i njegovim ovisnostima, možete pokrenuti naredbu chroot s povišenim privilegijama koristeći sudo prefiks za stvaranje chroot okruženja u odabranom direktoriju. Prema zadanim postavkama izrodit će Bash shell. Evo naredbe koju treba upisati:
    sudo chroot ime_direktorija

To su svi koraci za stvaranje chroot zatvora i pokretanje programa unutar njega.

Kako pobjeći iz chroot zatvora

Dok su chroot zatvori dobri za testiranje nestabilnog softvera, također su korisni pri rukovanju SSH vezama jer je chroot povezanih korisnika jedan od mnogih načine da osigurate svoj SSH poslužitelj.

S druge strane, ako ste tester penetracije i prijavili ste se na SSH poslužitelj vaše mete, otkriće da se radi o chrooted okruženju može biti frustrirajuće i činiti se kao slijepa ulica.

Međutim, postoji dosta načina za bijeg iz pogrešno konfiguriranog chroot zatvora, neki zahtijevaju vještine C programiranja dok se drugi mogu automatizirati pomoću alata. Nekoliko jednostavnih načina za chroot bijeg su:

  • Ugniježđeni chroot pozivi
  • Ugniježđeni chroot pozivi sa spremljenim deskriptorom datoteke
  • Metoda montiranja korijena
  • procfs pobjeći
  • ptrace bijeg

Imajte na umu da ćete za izvođenje chroot escape-a pomoću bilo koje od ovih metoda morati imati eskalirane privilegije u sustavu. Saznajte više o ovim metodologijama bijega tako da prijeđete na GitHub repozitorij chw00t, chroot escape alat za automatizaciju.

Sada znate sve o chroot-u u Linuxu

Sada kada znate što je chroot, kako radi i kako ga implementirati, trebali biste moći bez napora spremati aplikacije u sandbox s terminala. Imajte na umu da, kao što znate, postoji više načina da se izvučete iz crooted okruženja.

Ovo pokazuje da chroot ni na koji način nije dizajniran da se implementira kao sigurnosna značajka. Dakle, trebali biste koristiti chroot s puno opreza jer neodgovarajuća konfiguracija može imati negativan učinak i ugroziti sigurnost vašeg sustava.

Najbolje je držati se namjenskih rješenja za sandboxing poput softvera za kontejnerizaciju ili virtualnih strojeva. Oba su usredotočena na sandboxing i sigurnost, tako da osim ako se ne pojavi novi zero-day u gradu, ne biste se trebali brinuti o sigurnosti i integritetu vašeg sustava.

Ako niste sigurni koji odabrati između softvera za kontejnerizaciju i virtualizaciju, trebali biste isprobati oba i sami vidjeti koji je bolji.