| namespaces(7) | Miscellaneous Information Manual | namespaces(7) |
namespaces - przegląd linuksowych przestrzeni nazw
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.
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 |
Oprócz różnych plików /proc opisanych poniżej, API przestrzeni nazw obejmuje następujące wywołania systemowe:
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.
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
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).
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:
W odniesieniu do tych plików, proszę zauważyć co następuje:
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.:
Zob. clone(2) i user_namespaces(7).
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 niniejszej strony podręcznika: 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.
| 13 czerwca 2024 r. | Linux man-pages 6.9.1 |