chroot(2)

NUME
chroot - schimbă directorul rădăcină

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <unistd.h>

int chroot(const char *ruta);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

chroot():
    Începând cu glibc 2.2.2:
        _XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
            || /* Începând cu glibc 2.20: */ _DEFAULT_SOURCE
            || /* glibc <= 2.19: */ _BSD_SOURCE
    Înainte de glibc 2.2.2:
        nimic

DESCRIERE
chroot() schimbă directorul rădăcină al procesului apelant în cel specificat în rută. Acest director va fi utilizat pentru numele de rută care încep cu /. Directorul rădăcină este moștenit de toți copiii procesului apelant.

Numai un proces privilegiat (Linux: unul cu capacitatea CAP_SYS_CHROOT în spațiul de nume al utilizatorului) poate apela chroot().

Acest apel modifică un ingredient în procesul de rezolvare a numelui de rută și nu face nimic altceva. În special, nu este destinat să fie utilizat în niciun fel de scop de securitate, nici pentru a face o „cutie de nisip” completă a unui proces, nici pentru a restricționa apelurile de sistem ale sistemului de fișiere. În trecut, chroot() a fost utilizat de către demoni pentru a se restricționa înainte de a transmite rutele de acces furnizate de utilizatori care nu prezintă încredere la apelurile de sistem, cum ar fi open(2). Cu toate acestea, dacă un dosar este mutat în afara directorului chroot, un atacator poate exploata acest lucru pentru a ieși și din directorul chroot. Cel mai simplu mod de a face acest lucru este să facă chdir(2) la directorul care urmează să fie mutat, să aștepte ca acesta să fie mutat, apoi să deschidă o rută precum „../../../etc/passwd”.

O variantă puțin mai complicată funcționează, de asemenea, în anumite circumstanțe, dacă chdir(2) nu este permis. Dacă un demon permite specificarea unui „director chroot”, aceasta înseamnă, de obicei, că dacă doriți să împiedicați utilizatorii de la distanță să acceseze fișiere din afara directorului chroot, trebuie să vă asigurați că dosarele nu sunt niciodată mutate în afara acestuia.

Acest apel nu modifică directorul de lucru curent, astfel încât, după apel, „.” poate fi în afara arborelui cu rădăcina „/”.În special, superutilizatorul poate scăpa dintr-o „închisoare chroot” făcând:

    mkdir foo; chroot foo; cd ..

Acest apel nu închide descriptorii de fișiere deschise, iar astfel de descriptori de fișiere pot permite accesul la fișiere din afara arborelui chroot.

VALOAREA RETURNATĂ
În caz de succes, se returnează zero. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI
În funcție de sistemul de fișiere, pot fi returnate și alte erori. Cele mai generale erori sunt enumerate mai jos:

EACCES
    Permisul de căutare este refuzat pentru o componentă a prefixului rutei; (a se vedea, de asemenea, path_resolution(7).)

EFAULT
    ruta indică în afara spațiului de adrese accesibil.

EIO A apărut o eroare de In/Ieș.

ELOOP
    S-au întâlnit prea multe legături simbolice în rezolvarea rutei.

ENAMETOOLONG
    ruta este prea lungă.

ENOENT
    Fișierul nu există.

ENOMEM
    Nu a fost disponibilă suficientă memorie pentru nucleu.

ENOTDIR
    O componentă a rutei nu este un director.

EPERM
    Apelantul nu are privilegii suficiente.

STANDARDE
Niciunul.

ISTORIC
SVr4, 4.4BSD, SUSv2 ( marcată ca „LEGACY”). Această funcție nu face parte din POSIX.1-2001.

NOTE
Un proces-copil creat prin fork(2) moștenește directorul rădăcină al părintelui său. Directorul rădăcină este lăsat neschimbat de execve(2).

Legătura simbolică magică, /proc/pid/root, poate fi utilizată pentru a descoperi directorul rădăcină al unui proces; a se vedea proc(5) pentru detalii.

FreeBSD are un apel de sistem jail() mai puternic.

CONSULTAȚI ȘI
chroot(1), chdir(2), pivot_root(2), path_resolution(7), switch_root(8)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.