plucky (7) namespaces.7.gz

Provided by: manpages-pl_4.25.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_nsfs(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_nsfs(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 ⟨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⟩.