chroot(2) System Calls Manual chroot(2)

chroot - schimbă directorul rădăcină

Biblioteca C standard (libc, -lc)

#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

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.

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

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

Permisul de căutare este refuzat pentru o componentă a prefixului rutei; (a se vedea, de asemenea, path_resolution(7).)
ruta indică în afara spațiului de adrese accesibil.
A apărut o eroare de In/Ieș.
S-au întâlnit prea multe legături simbolice în rezolvarea rutei.
ruta este prea lungă.
Fișierul nu există.
Nu a fost disponibilă suficientă memorie pentru nucleu.
O componentă a rutei nu este un director.
Apelantul nu are privilegii suficiente.

Niciunul.

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

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.

chroot(1), chdir(2), pivot_root(2), path_resolution(7), switch_root(8)

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 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.

3 aprilie 2023 Pagini de manual de Linux 6.05.01