chroot - chroot

Un chroot pe sistemele de operare Unix este o operație care schimbă directorul rădăcină aparent pentru procesul curent de rulare și copiii acestuia . Un program care este rulat într-un astfel de mediu modificat nu poate denumi (și, prin urmare, în mod normal, nu poate accesa) fișiere în afara arborelui de director desemnat. Termenul "chroot" se poate referi la apelul de sistem chroot (2) sau la programul de împachetare chroot (8) . Mediul modificat se numește închisoare chroot .

Istorie

Apelul la sistemul chroot a fost introdus în timpul dezvoltării versiunii 7 Unix în 1979. O sursă sugerează că Bill Joy l-a adăugat la 18 martie 1982 - cu 17 luni înainte de lansarea 4.2BSD - pentru a testa sistemul de instalare și construire. Toate versiunile de BSD care aveau un nucleu au chroot (2). O utilizare timpurie a termenului „închisoare”, așa cum este aplicat la chroot, vine din Bill Cheswick, care a creat un pot de miere pentru a monitoriza un hacker în 1991.

Primul articol despre un jailbreak a fost discutat pe coloana de securitate a SunWorld Online, scrisă de Carole Fennelly; edițiile din august 1999 și ianuarie 1999 acoperă majoritatea subiectelor chroot ().

Pentru a-l face util pentru virtualizare , FreeBSD a extins conceptul și în versiunea sa 4.0 din 2000 a introdus comanda închisorii .

Până în 2002, un articol scris de Nicolas Boiteux descria cum să creezi o închisoare pe Linux

Până în 2003, primii furnizori de microservicii de internet cu închisori Linux furnizează servicii SAAS / PAAS (containere shell, proxy, ircd, roboți, ...) servicii facturate pentru consum în închisoare prin utilizare

Până în 2005, Sun a lansat Solaris Containers (cunoscute și sub numele de Zonele Solaris), descrise ca „chroot pe steroizi”.

Până în 2008, LXC (pe care a fost construit ulterior Docker ) a adoptat terminologia „container” și a câștigat popularitate în 2013 datorită includerii în nucleul Linux 3.8 a spațiilor de nume ale utilizatorilor .

Utilizări

Un mediu chroot poate fi utilizat pentru a crea și găzdui o copie virtualizată separată a sistemului software. Acest lucru poate fi util pentru:

Testare și dezvoltare
Un mediu de testare poate fi configurat în chroot pentru software care altfel ar fi prea riscant pentru a fi implementat pe un sistem de producție.
Controlul dependenței
Software-ul poate fi dezvoltat, construit și testat într-un chroot populat numai cu dependențele sale așteptate. Acest lucru poate preveni anumite tipuri de înclinare a legăturilor care pot rezulta din dezvoltarea dezvoltatorilor de proiecte cu diferite seturi de biblioteci de programe instalate.
Compatibilitate
Software-ul vechi sau software-ul care utilizează un ABI diferit trebuie să fie rulat uneori într-un chroot, deoarece bibliotecile sau fișierele de date de sprijin ar putea să se ciocnească în numele sau legătura cu cele ale sistemului gazdă.
Recuperare
În cazul în care un sistem devine imposibil de pornit, un chroot poate fi folosit pentru a reveni în mediul deteriorat după bootstrapping dintr-un sistem de fișiere rădăcină alternativ (cum ar fi de pe suportul de instalare sau de pe un CD live ).
Separarea de privilegii
Programelor li se permite să transporte descriptori de fișiere deschise (pentru fișiere, conducte și conexiuni de rețea) în chroot, ceea ce poate simplifica proiectarea închisorii, făcând inutilă lăsarea fișierelor de lucru în directorul chroot. Acest lucru simplifică, de asemenea, aranjamentul comun de a rula părțile potențial vulnerabile ale unui program privilegiat într-un sandbox, pentru a conține în mod preventiv o încălcare a securității. Rețineți că chroot nu este neapărat suficient pentru a conține un proces cu privilegii de root.

Limitări

Mecanismul chroot nu este destinat să apere împotriva manipulării intenționate de către utilizatori privilegiați (root). Pe majoritatea sistemelor, contextele chroot nu se stivuiesc corect și programele chrootate cu privilegii suficiente pot efectua un al doilea chroot pentru a izbucni. Pentru a atenua riscul acestei slăbiciuni de securitate, programele chrootate ar trebui să renunțe la privilegiile de rădăcină de îndată ce este practic după chrotare, sau ar trebui utilizate în schimb alte mecanisme - cum ar fi închisorile FreeBSD . Rețineți că unele sisteme, cum ar fi FreeBSD , iau măsuri de precauție pentru a preveni al doilea atac chroot.

Pe sistemele care acceptă noduri de dispozitiv pe sisteme de fișiere obișnuite, un utilizator rădăcină chrootat poate crea în continuare noduri de dispozitiv și poate monta sistemele de fișiere pe ele; astfel, mecanismul chroot nu este destinat de la sine să fie utilizat pentru a bloca accesul la nivel scăzut la dispozitivele de sistem de către utilizatori privilegiați. Nu este destinat să restricționeze utilizarea resurselor precum I / O , lățimea de bandă, spațiul pe disc sau timpul procesorului. Majoritatea Unixurilor nu sunt complet orientate către sistem de fișiere și lasă funcționalități potențial perturbatoare, cum ar fi rețeaua și controlul proceselor, disponibile prin interfața apelului de sistem către un program chrootat.

La pornire, programele se așteaptă să găsească spațiu de zgârieturi , fișiere de configurare, noduri de dispozitiv și biblioteci partajate în anumite locații prestabilite. Pentru ca un program chrooot să înceapă cu succes, directorul chroot trebuie să fie completat cu un set minim de aceste fișiere. Acest lucru poate face chrootul dificil de utilizat ca mecanism general de sandboxing. Instrumente precum Jailkit pot ajuta la ușurarea și automatizarea acestui proces.

Numai utilizatorul root poate efectua un chroot. Acest lucru este destinat să împiedice utilizatorii să introducă un program setuid într-o închisoare special concepută pentru chroot (de exemplu, cu un fișier fals / etc / passwd și / etc / shadow ) care l-ar păcăli într-o escaladă de privilegii .

Unele Unixes oferă extensii ale mecanismului chroot pentru a aborda cel puțin unele dintre aceste limitări (consultați Implementări ale tehnologiei de virtualizare la nivel de sistem de operare ).

Aplicații grafice pe chroot

Este posibil să rulați aplicații grafice pe un mediu chrootat, folosind metode precum:

  • Utilizați xhost (sau copiați secretul din .Xauthority)
  • Serverele X imbricate ca Xnest sau mai modern Xephyr (sau porni un server X real , din interiorul închisoare)
  • Accesarea chroot-ului prin SSH utilizând funcția de redirecționare X11 (ssh -X)
  • xchroot o versiune extinsă de chroot pentru utilizatori și redirecționare Xorg / X11 (socat / mount)
  • Un server VNC X11 și conectarea unui client VNC în afara mediului.

Aplicații notabile

Agentul de transfer de poștă Postfix funcționează ca o conductă de programe de ajutor chrootate individual.

La fel ca 4.2BSD înainte, fermele Debian și Ubuntu de construire a pachetelor interne folosesc chroots pe scară largă pentru a prinde dependențe de construcție neintenționate între pachete. SUSE folosește o metodă similară cu programul său de construire . Fedora, Red Hat și diverse distribuții bazate pe RPM construiesc toate RPM folosind un instrument chroot, cum ar fi mock .

Multe servere FTP pentru sistemele POSIX utilizează mecanismul chroot pentru a rezolva clienții FTP de încredere. Acest lucru se poate face prin bifurarea unui proces pentru a gestiona o conexiune de intrare, apoi chrooting copilul (pentru a evita să populați chroot cu biblioteci necesare pentru pornirea programului).

Dacă este activată separarea de privilegii, daemonul OpenSSH va crea un proces de ajutor neprivilegiat într-un director gol pentru a gestiona traficul de rețea de pre-autentificare pentru fiecare client. Deemonul poate, de asemenea, să testeze sesiunile SFTP și shell într-un chroot (de la versiunea 4.9p1 în continuare).

Sistemul de operare Chrome poate utiliza un chroot pentru a rula o instanță Linux utilizând Crouton , oferind un sistem de operare altfel subțire, cu acces la resursele hardware. Implicațiile de securitate legate de acest articol se aplică aici.

Sisteme de fișiere virtuale și fișiere de configurare ale nucleului gazdă Linux

Pentru a avea un mediu chroot funcțional în Linux, sistemele de fișiere virtuale kernel și fișierele de configurare trebuie, de asemenea, să fie montate / copiate de la gazdă la chroot.

# Mount Kernel Virtual File Systems
TARGETDIR="/mnt/chroot"
mount -t proc proc $TARGETDIR/proc
mount -t sysfs sysfs $TARGETDIR/sys
mount -t devtmpfs devtmpfs $TARGETDIR/dev
mount -t tmpfs tmpfs $TARGETDIR/dev/shm
mount -t devpts devpts $TARGETDIR/dev/pts

# Copy /etc/hosts
/bin/cp -f /etc/hosts $TARGETDIR/etc/

# Copy /etc/resolv.conf 
/bin/cp -f /etc/resolv.conf $TARGETDIR/etc/resolv.conf

# Link /etc/mtab
chroot $TARGETDIR rm /etc/mtab 2> /dev/null 
chroot $TARGETDIR ln -s /proc/mounts /etc/mtab

Vezi si

Referințe

linkuri externe