Provided by: manpages-pl_4.23.1-1_all bug

NAZWA

       namespaces - przegląd linuksowych przestrzeni nazw

OPIS

       Przestrzeń  nazw  opakowuje  globalny  zasób  systemowy w warstwie abstrakcji tak, że dla procesów w niej
       występujących, wygląda to jakby miały własne, izolowane wystąpienie tego zasobu. Zmiany globalnego zasobu
       są widoczne dla innych członków tej przestrzeni nazw, ale są niewidoczne dla innych  procesów.  Jednym  z
       zastosowań przestrzeni nazw są kontenery.

       Niniejsza  strona  podręcznika zawiera odsyłacze do informacji o różnych typach przestrzeni nazw, opisuje
       powiązane pliki /proc i podsumowuje API służące do pracy z przestrzeniami nazw.

   Typy przestrzeni nazw
       Poniższa tabela ukazuje dostępne w Linuksie typy przestrzeni nazw. Druga kolumna tabeli zawiera  wartości
       znaczników  używanych  do  określenia  typu  przestrzeni nazw w różnych API. Trzecia kolumna identyfikuje
       stronę podręcznika systemowego ze szczegółowym opisem danego  typu  przestrzeni  nazw.  Ostatnia  kolumna
       podsumowuje zasoby, które są izolowane danym typem przestrzeni nazw.
       Prz. nazw   Znacznik        Podręcznik            Izoluje
       Cgroup      CLONE_NEWCGROUP cgroup_namespaces(7)  Główny katalog cgroup
       IPC         CLONE_NEWIPC    ipc_namespaces(7)     IPC  Systemu V, kolejki
                                                         komunikatów POSIX
       Sieci       CLONE_NEWNET    network_namespaces(7) Urządzenia    sieciowe,
                                                         stosy, porty itp.
       Montowania  CLONE_NEWNS     mount_namespaces(7)   Punkty montowania
       PID         CLONE_NEWPID    pid_namespaces(7)     Identyfikatory procesów
       Czasu       CLONE_NEWTIME   time_namespaces(7)    Zegary    rozruchu    i
                                                         monotoniczne
       Użytkownika CLONE_NEWUSER   user_namespaces(7)    ID użytkownika i grupy
       UTS         CLONE_NEWUTS    uts_namespaces(7)     Nazwę  stacji  i  nazwę
                                                         domeny NIS

   API przestrzeni nazw
       Oprócz  różnych  plików  /proc  opisanych  poniżej,  API  przestrzeni nazw obejmuje następujące wywołania
       systemowe:

       clone(2)
              Wywołanie systemowe clone(2) tworzy nowy proces. Jeśli argument flags wywołania określa jeden  lub
              więcej  ze  znaczników  CLONE_NEW*  wypisanych  wyżej, to dla każdego znacznika tworzona jest nowa
              przestrzeń nazw, a proces potomny staje się ich członkiem (to wywołanie implementuje również wiele
              funkcji niezwiązanych z przestrzeniami nazw).

       setns(2)
              Wywołanie systemowe setns(2) pozwala na dołączenie procesu wywołującego do istniejącej przestrzeni
              nazw. Podaje się ją za pomocą deskryptora pliku, odnoszącego się do jednego z plików  /proc/pid/ns
              opisanych poniżej.

       unshare(2)
              Wywołanie  systemowe  unshare(2)  przenosi  proces  wywołujący  do  nowej  przestrzeni nazw. Jeśli
              argument flags wywołania określa jeden lub więcej ze znaczników CLONE_NEW*  wypisanych  wyżej,  to
              dla  każdego  znacznika  tworzona  jest  nowa  przestrzeń  nazw, a proces wywołujący staje się ich
              członkiem (to wywołanie implementuje również wiele funkcji niezwiązanych z przestrzeniami nazw).

       ioctl(2)
              Różne operacje ioctl(2) służą do pozyskiwania informacji  o  przestrzeniach  nazw.  Są  opisane  w
              podręczniku systemowym ioctl_ns(2).

       Utworzenie  nowej  przestrzeni  nazw  za  pomocą  clone(2)  i  unshare(2),  w  większości sytuacji wymaga
       przywileju (ang. capability) CAP_SYS_ADMIN, ponieważ w nowej przestrzeni nazw,  twórca  ma  prawo  zmiany
       globalnych  zasobów  widocznych  dla  innych  procesów,  które  są  w  niej później tworzone albo do niej
       dołączają. Wyjątkiem są przestrzenie nazw użytkownika: od Linuksa  3.8  nie  są  wymagane  przywileje  do
       utworzenia przestrzeni nazw użytkownika.

   Katalog /proc/pid/ns/
       Każdy  proces  posiada podkatalog /proc/pid/ns/ zawierający po jednym wpisie dla każdej przestrzeni nazw,
       obsługującej zmienianie przez setns(2):

           $ ls -l /proc/$$/ns | awk '{print $1, $9, $10, $11}'
           total 0
           lrwxrwxrwx. cgroup -> cgroup:[4026531835]
           lrwxrwxrwx. ipc -> ipc:[4026531839]
           lrwxrwxrwx. mnt -> mnt:[4026531840]
           lrwxrwxrwx. net -> net:[4026531969]
           lrwxrwxrwx. pid -> pid:[4026531836]
           lrwxrwxrwx. pid_for_children -> pid:[4026531834]
           lrwxrwxrwx. time -> time:[4026531834]
           lrwxrwxrwx. time_for_children -> time:[4026531834]
           lrwxrwxrwx. user -> user:[4026531837]
           lrwxrwxrwx. uts -> uts:[4026531838]

       Zamontowanie przez podpięcie (ang. bind; zob. mount(2)) jednego z plików w tym katalogu, w  inne  miejsce
       systemu plików, utrzymuje istnienie odpowiadającej przestrzeni nazw procesu, określonego przez pid, nawet
       gdy zakończą się wszystkie procesy istniejące obecnie w tej przestrzeni.

       Otwarcie  jednego  z  plików  w  tym  katalogu (lub pliku zamontowanego przed podpięcie do jednego z tych
       plików), zwraca deskryptor pliku odpowiadającej przestrzeni nazw  procesu,  określonego  przez  pid.  Tak
       długo,  jak  ten  deskryptor pliku pozostaje otwarty, przestrzeń nazw będzie istniała, nawet gdy zakończą
       się wszystkie procesy istniejące obecnie w tej przestrzeni. Deskryptor pliku można przekazać do setns(2).

       W Linuksie 3.7 i wcześniejszych, pliki te były widoczne jako dowiązania zwykłe (stałe). Od Linuksa 3.8 są
       widoczne jako dowiązania symboliczne. Jeśli występują dwa  procesy  w  tej  samej  przestrzeni  nazw,  to
       identyfikatory  urządzeń  i  numery i-węzłów ich dowiązań symbolicznych /proc/pid/ns/xxx będą takie same;
       aplikacje mogą to sprawdzić za pomocą pól stat.st_dev i stat.st_ino zwracanych przez stat(2). Zawartością
       dowiązania symbolicznego jest łańcuch zawierający typ przestrzeni nazw i numer i-węzła, jak  w  poniższym
       przykładzie:

           $ readlink /proc/$$/ns/uts
           uts:[4026531838]

       W tym podkatalogu występują następujące dowiązania symboliczne

       /proc/pid/ns/cgroup (od Linuksa 4.6)
              Plik stanowi uchwyt do przestrzeni nazw cgroup procesu.

       /proc/pid/ns/ipc (od Linuksa 3.0)
              Plik stanowi uchwyt do przestrzeni nazw IPC procesu.

       /proc/pid/ns/mnt (since Linux 3.8)
              Plik stanowi uchwyt do przestrzeni nazw montowania procesu.

       /proc/pid/ns/net (od Linuksa 3.0)
              Plik stanowi uchwyt do przestrzeni nazw sieci procesu.

       /proc/pid/ns/pid (od Linuksa 3.8)
              Plik  stanowi  uchwyt  do  przestrzeni nazw PID procesu. Uchwyt ten jest stały w trakcie istnienia
              procesu (tj. członkowstwo w przestrzeni nazw PID nigdy się nie zmienia).

       /proc/pid/ns/pid_for_children (od Linuksa 4.12)
              Plik stanowi uchwyt do przestrzeni nazw PID procesu potomnego utworzonego przez ten  proces.  Może
              ulec  zmianie  jako wynik wywołań do unshare(2) i setns(2) (zob. pid_namespaces(7)), tak więc plik
              może się różnić  od  /proc/pid/ns/pid.  To  dowiązanie  symboliczne  zyskuje  wartość  dopiero  po
              utworzeniu  pierwszego  procesu potomnego w tej przestrzeni nazw (wcześniej, readlink(2) odnoszące
              się do dowiązania symbolicznego, zwróci pusty bufor).

       /proc/pid/ns/time (od Linuksa 5.6)
              Plik stanowi uchwyt do przestrzeni nazw czasu procesu.

       /proc/pid/ns/time_for_children (od Linuksa 5.6)
              Plik stanowi uchwyt do przestrzeni nazw czasu procesu potomnego utworzonego przez ten proces. Może
              ulec zmianie jako wynik wywołań do unshare(2) i setns(2) (zob. time_namespaces(7)), tak więc  plik
              może się różnić od /proc/pid/ns/pid.

       /proc/pid/ns/user (od Linuksa 3.8)
              Plik stanowi uchwyt do przestrzeni nazw użytkownika procesu.

       /proc/pid/ns/uts (od Linuksa 3.0)
              Plik stanowi uchwyt do przestrzeni nazw UTS procesu

       Uprawnieniem  do  rozwiązywania  lub  odczytywania  (readlink(2))  tych  dowiązań  symbolicznych zarządza
       sprawdzenie PTRACE_MODE_READ_FSCREDS trybu dostępu ptrace; zob. ptrace(2).

   Katalog /proc/sys/user
       Pliki w katalogu /proc/sys/user (obecnego od  Linuksa  4.9)  ujawniają  limity  liczby  przestrzeni  nazw
       poszczególnych typów, jakie można utworzyć. Występują następujące pliki:

       max_cgroup_namespaces
              Wartość  w  pliku określa limit liczby przestrzeni nazw cgroup na jednego użytkownika, jakie można
              utworzyć w przestrzeni nazw użytkownika.

       max_ipc_namespaces
              Wartość w pliku określa limit liczby przestrzeni nazw ipc  na  jednego  użytkownika,  jakie  można
              utworzyć w przestrzeni nazw użytkownika.

       max_mnt_namespaces
              Wartość  w  pliku  określa  limit liczby przestrzeni nazw montowania na jednego użytkownika, jakie
              można utworzyć w przestrzeni nazw użytkownika.

       max_net_namespaces
              Wartość w pliku określa limit liczby przestrzeni nazw sieci na jednego  użytkownika,  jakie  można
              utworzyć w przestrzeni nazw użytkownika.

       max_pid_namespaces
              Wartość  w  pliku  określa  limit  liczby przestrzeni nazw PID na jednego użytkownika, jakie można
              utworzyć w przestrzeni nazw użytkownika.

       max_time_namespaces (od Linuksa 5.7)
              Wartość w pliku określa limit liczby przestrzeni nazw czasu na jednego  użytkownika,  jakie  można
              utworzyć w przestrzeni nazw użytkownika.

       max_user_namespaces
              Wartość  w  pliku  określa limit liczby przestrzeni nazw użytkownika na jednego użytkownika, jakie
              można utworzyć w przestrzeni nazw użytkownika.

       max_uts_namespaces
              Wartość w pliku określa limit liczby przestrzeni nazw uts  na  jednego  użytkownika,  jakie  można
              utworzyć w przestrzeni nazw użytkownika.

       W odniesieniu do tych plików, proszę zauważyć co następuje:

       •  Wartości w plikach są modyfikowalne przez procesy uprzywilejowane.

       •  Wartości  ujawnione  w  plikach  są  limitami  dla  przestrzeni  nazw  użytkownika, w której występuje
          otwierający proces.

       •  Limity odnoszą się do jednego użytkownika. Każdy użytkownik w tej samej przestrzeni  nazw  użytkownika
          może utworzyć do określonej limitem liczby przestrzeni nazw.

       •  Limity stosują się do wszystkich użytkowników, w tym tego o UID 0.

       •  Limity  stosuje  się  nienaruszając innych limitów występujących na przestrzeń nazw (takich jak limity
          przestrzeni nazw PID i użytkownika).

       •  Po wyczerpaniu limitów, clone(2) i unshare(2) zawiodą z błędem ENOSPC.

       •  W przypadku pierwotnej przestrzeni nazw użytkownika, domyślną wartością w każdym z plików jest  połowa
          limitu  liczby  wątków możliwych do utworzenia (/proc/sys/kernel/threads-max). We wszystkich potomnych
          przestrzeniach nazw użytkownika, domyślną wartością w każdym z plików jest MAXINT.

       •  Gdy tworzona jest przestrzeń nazw,  obiekt  liczony  jest  również  wobec  przestrzeni  nazw  rodzica.
          Precyzyjniej:

          •  Każda przestrzeń użytkownika ma UID twórcy.

          •  Gdy  tworzona  jest  przestrzeń  nazw, jest liczona wobec UID-ów twórcy w każdej z przestrzeni nazw
             użytkownika rodzica, a jądro upewnia się, że odpowiedni limit przestrzeni nazw dla UID-u twórcy,  w
             przestrzeni nazw rodzica, nie jest przekroczony.

          •  Wyżej  wymieniony punkt zapewnia, że utworzenie nowej przestrzeni nazw użytkownika, nie może służyć
             jako sposób ominięcia limitów, obowiązujących dla bieżącej przestrzeni nazw użytkownika.

   Istnienie przestrzeni nazw
       Jeśli nie występują inne czynniki, przestrzeń nazw jest automatycznie likwidowana, gdy ostatni  proces  w
       przestrzeni  nazw  kończy  się  lub  opuszcza  przestrzeń  nazw.  Jednak  istnieje  również szereg innych
       czynników, które mogą utworzyć przestrzeń nazw, nawet gdy nie ma ona procesów członkowskich. Są to m.in.:

       •  Istnieje  montowanie  przez  podpięcie  lub  otwarty  deskryptor  pliku   do   odpowiadającego   pliku
          /proc/pid/ns/*.

       •  Przestrzeń  nazw  jest  hierarchiczna  (tzn.  jest  to  przestrzeń nazw PID lub użytkownika) i posiada
          potomną przestrzeń nazw.

       •  Jest to przestrzeń nazw użytkownika,  posiadająca  jedną  lub  więcej  przestrzeni  nazw,  niebędącymi
          przestrzeniami nazw użytkownika.

       •  Jest  to  przestrzeń  nazw  PID  i  występuje  proces odnoszący się do tej przestrzeni nazw, za pomocą
          dowiązania symbolicznego /proc/pid/ns/pid_for_children.

       •  Jest to przestrzeń nazw czasu i występuje proces odnoszący się do  tej  przestrzeni  nazw,  za  pomocą
          dowiązania symbolicznego /proc/pid/ns/time_for_children.

       •  Jest  to  przestrzeń  nazw  IPC  i  występuje  odpowiednie  montowanie  systemu  plików  mqueue  (zob.
          mq_overview(7)), odnoszące się do tej przestrzeni nazw.

       •  Jest to przestrzeń nazw PID i występuje odpowiednie montowanie systemu plików proc(5),  odnoszące  się
          do tej przestrzeni nazw.

PRZYKŁADY

       Zob. clone(2) i user_namespaces(7).

ZOBACZ TAKŻE

       nsenter(1),    readlink(1),   unshare(1),   clone(2),   ioctl_ns(2),   setns(2),   unshare(2),   proc(5),
       capabilities(7),      cgroup_namespaces(7),      cgroups(7),      credentials(7),      ipc_namespaces(7),
       network_namespaces(7), pid_namespaces(7), user_namespaces(7), uts_namespaces(7), lsns(8), switch_root(8)

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika są: 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  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.

Linux man-pages 6.8                              2 maja 2024 r.                                    namespaces(7)