plucky (2) chroot.2.gz

Provided by: manpages-pl-dev_4.25.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⟩.