chroot

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

Comanda chroot pe un sistem de tip UNIX schimbă în mod aparent directorul root pentru procesul curent și pentru toate procesele derivate din acesta. Procesul nu poate accesa fișiere în afara directorului root asignat. Uneori, acest director setat cu chroot mai poartă și numele de chroot jail (închisoare).

Comanda chroot a fost introdusă în UNIX Versiunea 7, și a fost adăugată în BSD în 18 martie 1982 de Bill Joy pentru a testa sistemul de instalare și de build din BSD. Sub Linux, chroot este implementat în pachetul GNU coreutils.

Pe lângă comandă, paginile de manual mai documentează și o funcție de sistem chroot(2). Funcția schimbă directorul root pentru procesul care o apelează. Prototipul funcție este următorul:

#include <unistd.h>

int chroot(const char *path);

Sintaxă[modificare | modificare sursă]

chroot [OPTION] NEWROOT [COMMAND [ARG]...]

NEWROOT desemnează noul director root, în timp ce COMAND [ARG]... desemnează o comandă specifică care să fie rulată de chroot. Dacă comanda nu este specificată, chroot este aplicat procesului curent (în cele mai multe cazuri sesiunea shell curentă).

Dintre opțiunile posibile amintim

--userspec=USER[:GROUP] - implicit, procesul este rulat de utilizatorul curent; utilizatorul poate fi schimbat cu această opțiune
--groups=GROUPS - grupul poate fi și el schimbat


Utilizare[modificare | modificare sursă]

Comanda chroot poate fi utilizată pentru a crea o copie virtuală a sistemului de operare. Aceasta poate fi utilizată pentru:

Testare și dezvoltare 
Un mediu de test poate fi setat cu chroot, evitându-se astfel rularea testului pe un sistem aflat deja în producție.
Controlul dependințelor
chroot este o modalitate foarte bună de control al dependințelor dintre diferite module software aflate în dezvoltare.
Compatibilitate 
Uneori este nevoie să rulăm software mai vechi care necesită versiuni mai vechi ale unor biblioteci. Un mediu chroot este ideal pentru rularea acestui software.
Recuperare 
Sisteme care nu mai pot fi pornite de pe hard disc, se pot uneori porni rapid într-un mediu chroot plecând de la un Live CD sau alt mediu de pornire.
Separarea privilegiilor 
Programe care în mod potențial constituie o problemă de securitate se pot rula într-un mediu chroot. Se aplică în general serverelor.


Limitări[modificare | modificare sursă]

  • chroot nu a fost conceput ca o metodă apărare în cazul atacurilor directe de escaladare a privilegiilor de utilizator. În multe sistem, este posibil un al doilea chroot pentru a ieșii din cel oficial. Pentru a reduce probabilitatea ca așa ceva să se întâmple, programele rulate prin chroot trebuie să renunțe la privilegiile de root imediat după schimbarea chroot. Există sisteme concepute de la bun început unde un al doilea chroot nu este posibil, de exemplu FreeBSD jail.ref>http://man.freebsd.org/chroot/2</ref>
  • La pornire, procesele așteaptă să găsească o serie de resurse, precum spațiu de disc într-un director temporare, drivere, biblioteci software etc. Toate aceste resurse sunt presupuse a fi la o locație fixă în directorul root. În cazul unui sistem chroot, noul director root trebuie să fie populat cu toate aceste resurse.
  • Numai utilizatorul root poate efectua un chroot. Intenția este de a împiedica utilizatorul să adauge un program setuid într-un director chroot jail împreună cu fișire /etc/password și /etc/shadow care ar duce la o escaladare a privilegiilor. Îl împiedică de asemenea pe utilizator să seteze un sandbox neprivilegiat unde să ruleze aplicații în care nu se poate avea încredere.
  • Mecanismul chroot nu a fost intenționat pentru a gestiona resurse de sistem precum [I/O], bandwidth, cpu, disc. Nu toate resursele sistemelor UNIX sunt vizibile ca fișiere și deci nu pot fi controlate prin chroot. Multe resurse sunt accesibile direct printr-un apel de funcție de sistem.

Unele sistem UNIX extind sistemul chroot pentru a depăși aceste limitări. Termenul folosit pentru a descrie aceaste extensii este virtualizare la nivel de sistem de operare (în engleză operating system-level virtualization). Exemple:


Aplicații grafice rulate în chroot[modificare | modificare sursă]

Unele aplicații grafice pot fi rulate într-un mediu chroot[1][2]. Modalități de rulare:

  • xhost (se copiază fișierul .Xauthority)
  • Xnest, Xephyr (sau orice alt server X real pornit din mediul chroot)
  • Accesarea mediului chroot prin SSH folosind facilitatea de X11 forwarding (ssh -X)
  • openroot în cazurile în care serverul X a fost pornit cu opțiunea -nolisten și un server SSH nu este prezent


Aplicații unde chroot este utilizat[modificare | modificare sursă]

  • Gentoo Linux utilizează un sistem chroot pentru instalarea sistemului de operare. Calculatorul se pornește de pe un Live-CD, odată pornit un mediu chroot este setat unde are loc instalarea noului sistem de operare.
  • Ca și în BSD, Debian și Ubuntu folosesc chroot extensiv în etapa de dezvoltare și build pentru a detecta problemele generate de dependințele dintre diversele module software. Această metodă de build poartă uneori numele de sandboxing, și este prezentă de asemenea în Gentoo, SUSE etc. Fedora și Red Hat sunt construite în mediu chroot folosind programul utilitar mock.
  • Severul de mail Postfix folosește o serie de programe individule, fiecare dintre ele într-un mediu chroot separat.
  • Multe server FTP folosesc chroot pentru separarea privilegiilor odată ce utilizatorul a fost autentificat.
  • OpenSSH folosește chroot în mod extensiv pentru separarea privilegiilor. Fiecare client autentificat este plasat într-un mediu chroot separat.[3]


Referințe[modificare | modificare sursă]


Legături externe[modificare | modificare sursă]


 v  d  m  Programe în linia de comandă pentru Unix (mai multe)
Management de fișiere: cat | cd | chmod | chown | chgrp | cksum | cmp | cp | du | df | file | fsck | ln | ls | lsof | mkdir | mount | mv | pwd | rm | rmdir | split | touch
Management de procese: at | chroot | cron | exit | kill | killall | nice | pgrep | pidof | pkill | ps | pstree | sleep | time | top | wait
Management utilizator/mediu: env | finger | id | mesg | passwd | su | sudo | uname | uptime | w | wall | who | whoami | write
Procesare text: awk | comm | cut | ed | ex | fmt | head | iconv | join | less | more | paste | sed | sort | tac | tail | tr | uniq | wc | xargs
Programare Shell: basename | echo | expr | false | printf | test | true | unset Imprimare:
lp
Communicații:
inetd | netstat | ping | rlogin | traceroute
Căutare:
find | grep | strings
Diverse:
banner | bc | cal | dd | man | size | yes