Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       chroot - zmienia katalog główny

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <unistd.h>

       int chroot(const char *path);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       chroot():
           Od glibc 2.2.2:
               _XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
                   || /* Od glibc 2.20: */ _DEFAULT_SOURCE
                   || /* glibc <= 2.19: */ _BSD_SOURCE
           Przed glibc 2.2.2:
               brak

OPIS

       chroot() zmienia katalog główny procesu wywołującego na katalog podany w path. Ten katalog
       będzie używany do nazw ścieżek zaczynających się od /. Katalog  główny  jest  dziedziczony
       przez wszystkie procesy potomne wywołującego procesu.

       Funkcję  chroot(2)  może  wywołać  tylko  proces  uprzywilejowany  (pod  Linuksem:  ten  z
       przywilejem CAP_SYS_CHROOT w swojej przestrzeni nazw użytkownika).

       To  wywołanie  zmienia  tylko  i  wyłącznie  składnik  procesu  rozwiązywania  ścieżek.  W
       szczególności  nie  zostało zaprojektowane w jakimkolwiek stopniu do celów bezpieczeństwa,
       ani do utworzenia pełnej piaskownicy dla  procesu,  ani  do  ograniczenia  systemu  plików
       wywołaniom  systemowym.  W  przeszłości chroot() używały demony do ograniczenia się, przed
       przekazaniem ścieżki, otrzymanej od niezaufanych użytkowników, wywołaniom systemowym takim
       jak  open(2).  Jednak  jeśli katalog jest przenoszony z katalogu chroot, atakujący może to
       wykorzystać i wydostać się również poza katalog  chroot.  Najłatwiej  uczynić  to  poprzez
       chdir(2)  do  katalogu mającego być przeniesionego, poczekanie na przeniesienie i otwarcie
       ścieżki takiej jak ../../../etc/passwd.

       Nieco bardziej skomplikowany wariant działa również w pewnych  przypadkach,  gdy  chdir(2)
       nie  jest  dozwolone.  Jeśli demon pozwala na określenie „katalogu chroot”, zwykle oznacza
       to, że jeśli usiłuje  się  uniemożliwić  użytkownikom  zdalnym  dostępu  do  plików  spoza
       katalogu  chroot,  konieczne  jest  upewnienie  się,  że  katalogi  nigdy  nie  są z niego
       przenoszone.

       Wywołanie to nie zmienia bieżącego katalogu roboczego, więc „.”  może znajdować  się  poza
       drzewem  zakorzenionym  w „/”. W szczególności, superużytkownik może uciec z „uwięzienia w
       chroot” wykonując:

           mkdir foo; chroot foo; cd ..

       Wywołanie to nie zamyka otwartych deskryptorów plików, więc takie deskryptory plików  mogą
       zezwalać na dostęp poza nowym drzewem chroot.

WARTOŚĆ ZWRACANA

       Po  pomyślnym  zakończeniu  zwracane  jest  zero.  Po błędzie zwracane jest -1 i ustawiane
       errno, wskazując błąd.

BŁĘDY

       Dla niektórych  systemów  plików  mogą  być  zwracane  inne  błędy  niż  opisane  poniżej.
       Najogólniejsze błędy to:

       EACCES Brak praw do przeszukiwania dla składowej ścieżki (zob. także path_resolution(7)).

       EFAULT path wskazuje poza dostępną dla użytkownika przestrzeń adresową.

       EIO    Wystąpił błąd wejścia/wyjścia.

       ELOOP  Podczas rozwiązywania path napotkano zbyt wiele dowiązań symbolicznych.

       ENAMETOOLONG
              path jest zbyt długie.

       ENOENT Plik nie istnieje.

       ENOMEM Brak pamięci jądra.

       ENOTDIR
              Składowa ścieżki path nie jest katalogiem.

       EPERM  Wywołujący jest niewystarczająco uprzywilejowany.

STANDARDY

       Brak.

HISTORIA

       SVr4,  4.4BSD,  SUSv2  (oznaczone jako LEGACY - przestarzałe). Funkcja ta nie była częścią
       POSIX.1-2001.

UWAGI

       Proces potomny utworzony za pomocą  fork(2)  dziedziczy  katalog  główny  swojego  procesu
       macierzystego. Katalog główny jest pozostawiany bez zmiany przez execve(2).

       Do  poznania  katalogu  głównego  procesu  można  użyć magicznego dowiązania symbolicznego
       /proc/pid/root, więcej informacji w podręczniku proc(5).

       FreeBSD ma silniejsze wywołanie systemowe jail().

ZOBACZ TAKŻE

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

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony   podręcznika   są:   Przemek   Borys
       <pborys@dione.ids.pl>,    Robert    Luberda    <robert@debian.org>    i    Michał   Kułach
       <michal.kulach@gmail.com>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe  informacje  o  warunkach  licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub  nowszej.  Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres listy dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.