.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2013, 2016, 2017 by Michael Kerrisk .\" and Copyright (c) 2012 by Eric W. Biederman .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH NAMESPACES 7 "1 ноября 2020 г." Linux "Руководство программиста Linux" .SH ИМЯ namespaces \- обзор пространств имён Linux .SH ОПИСАНИЕ Пространства имён облекают глобальный системный ресурс в абстрактную форму, в которой он представляется процессам внутри пространства имён таким образом, что процессы имеют свои собственные изолированные экземпляры глобального ресурса. Изменения глобального ресурса видимы другим процессам, которые являются членами пространства имён, и невидимы остальным процессам. Одно из применений пространств имён — реализация контейнеров. .PP .\" This page provides pointers to information on the various namespace types, describes the associated \fI/proc\fP files, and summarizes the APIs for working with namespaces. .SS "Namespace types" The following table shows the namespace types available on Linux. The second column of the table shows the flag value that is used to specify the namespace type in various APIs. The third column identifies the manual page that provides details on the namespace type. The last column is a summary of the resources that are isolated by the namespace type. .TS lB lB lB lB l1 lB1 l1 l. Пространство имён Flag Page Изоляция Cgroup CLONE_NEWCGROUP \fBcgroup_namespaces\fP(7) корневой каталог cgroup IPC CLONE_NEWIPC \fBipc_namespaces\fP(7) T{ System V IPC, .br POSIX message queues T} Network CLONE_NEWNET \fBnetwork_namespaces\fP(7) T{ сетевые устройства, .br стеки, порты … T} Mount CLONE_NEWNS \fBmount_namespaces\fP(7) Точки монтирования PID CLONE_NEWPID \fBpid_namespaces\fP(7) идентификаторы процессов Time CLONE_NEWTIME \fBtime_namespaces\fP(7) T{ Boot and monotonic .br clocks T} User CLONE_NEWUSER \fBuser_namespaces\fP(7) Идентификаторы пользователей и групп UTS CLONE_NEWUTS \fButs_namespaces\fP(7) T{ Hostname and NIS .br domain name T} .TE .\" .\" ==================== The namespaces API ==================== .\" .SS "Программный интерфейс пространств имён" и различные файлы в \fI/proc\fP описаны далее. В API пространств имён имеются следующие системные вызовы: .TP \fBclone\fP(2) Системный вызов \fBclone\fP(2) создаёт новый процесс. Если в аргументе \fIflags\fP указан один или несколько флагов \fBCLONE_NEW*\fP, перечисленных далее, то для каждого флага создаётся новое пространство имён, и дочерний процесс становится членом этих пространств имён (данный системный вызов также служит для других целей, не относящихся к пространствам имён). .TP \fBsetns\fP(2) Системный вызов \fBsetns\fP(2) позволяет вызывающему процессу присоединиться к существующему пространству имён. Требуемое пространство имён указывается через файловый дескриптор, который ссылается на один из файлов \fI/proc/[pid]/ns\fP, описанных далее. .TP \fBunshare\fP(2) Системный вызов \fBunshare\fP(2) перемещает вызывающий процесс в новое пространство имён. Если в аргументе \fIflags\fP указан один или несколько флагов \fBCLONE_NEW*\fP, перечисленных далее, то для каждого флага создаётся новое пространство имён, и дочерний процесс становится членом этих пространств имён (данный системный вызов также служит для других целей, не относящихся к пространствам имён). .TP \fBioctl\fP(2) Для получения информации о пространствах имё можно использовать различные операции \fBioctl\fP(2). Их можно найти в \fBioctl_ns\fP(2). .PP .\" .\" ==================== The /proc/[pid]/ns/ directory ==================== .\" Для создания новых пространств имён с помощью \fBclone\fP(2) и \fBunshare\fP(2), в большинстве случаев, требуется мандат \fBCAP_SYS_ADMIN\fP, так как в новом пространстве имён создатель будет обладать возможностью изменять глобальные ресурсы, которые видимы другим процессам, создаваемым или присоединяемым к пространству имён со временем. Исключение составляют пользовательские пространства имён: начиная с Linux 3.8 для создания пользовательского пространства имён особых прав не требуется. .SS "Каталог /proc/[pid]/ns/" .\" See commit 6b4e306aa3dc94a0545eb9279475b1ab6209a31f Для каждого процесса в \fI/proc/[pid]/ns/\fP есть подкаталог, в котором содержится по одной записи на каждое пространство имён, через которые ими можно управлять с помощью \fBsetns\fP(). .PP .in +4n .EX $ \fBls \-l /proc/$$/ns | awk \(aq{print $1, $9, $10, $11}\(aq\fP 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] .EE .in .PP При привязке монтирования (bind mounting) (смотрите \fBmount\fP(2)) одного из файлов этого каталога в другое место в файловой системе данное пространство имён процесса с \fIpid\fP не удаляется, даже если все процессы в пространстве имён завершились. .PP При открытии одного из файлов этого каталога (или файла, который был привязан монтированием в один из этих файлов) возвращается файловый описатель соответствующего пространства имён процесса заданного \fIpid\fP. Пока этот файловый дескриптор остаётся открытым, пространство имён будет оставаться действующим, даже если все процессы в пространстве имён завершились. Файловый дескриптор может быть передан в \fBsetns\fP(2). .PP .\" commit bf056bfa80596a5d14b26b17276a56a0dcb080e5 .\" Eric Biederman: "I reserve the right for st_dev to be significant .\" when comparing namespaces." .\" https://lore.kernel.org/lkml/87poky5ca9.fsf@xmission.com/ .\" Re: Documenting the ioctl interfaces to discover relationships... .\" Date: Mon, 12 Dec 2016 11:30:38 +1300 В Linux 3.7 и старее эти файлы видимы как жёсткие ссылки. Начиная с Linux 3.8 они представляются символьными ссылками. Если два процесса находятся в одном пространстве имён, то значения идентификаторов устройств и номера инод их символьных ссылок \fI/proc/[pid]/ns/xxx\fP одинаковы; приложение может проверить это через поля \fIstat.st_dev\fP и \fIstat.st_ino\fP, возвращаемые \fBstat\fP(2). Содержимое этой символьной ссылки представляет собой строку с типом пространства имён и значением иноды: .PP .in +4n .EX $ \fBreadlink /proc/$$/ns/uts\fP uts:[4026531838] .EE .in .PP В этом подкаталоге содержатся символические ссылки: .TP \fI/proc/[pid]/ns/cgroup\fP (начиная с Linux 4.6) Данный файл является описателем пространства имён cgroup этого процесса. .TP \fI/proc/[pid]/ns/ipc\fP (начиная с Linux 3.0) Данный файл является описателем пространства имён IPC этого процесса. .TP \fI/proc/[pid]/ns/mnt\fP (начиная с Linux 3.8) .\" commit 8823c079ba7136dc1948d6f6dcb5f8022bde438e Данный файл является описателем пространства имён mount этого процесса. .TP \fI/proc/[pid]/ns/net\fP (начиная с Linux 3.0) Данный файл является описателем пространства имён network этого процесса. .TP \fI/proc/[pid]/ns/pid\fP (начиная с Linux 3.8) .\" commit 57e8391d327609cbf12d843259c968b9e5c1838f Этот является описателем пространства имён PID этого процесса. Данный описатель постоянен на протяжении всей жизни процесса (т. е., членство пространства имён PID процесса никогда не меняется). .TP \fI/proc/[pid]/ns/pid_for_children\fP (начиная с Linux 4.12) .\" commit eaa0d190bfe1ed891b814a52712dcd852554cb08 Этот файл является описателем пространства имён PID дочерних процессов, созданных этим процессом. Он может изменяться послевызовов \fBunshare\fP(2) и \fBsetns\fP(2) (смотрите \fBpid_namespaces\fP(7)), поэтому файл может отличаться от \fI/proc/[pid]/ns/pid\fP. Данные по символьной ссылке появляются только после создания в пространстве имён первого дочернего процесса (до этого вызов \fBreadlink\fP(2) с символьной ссылкой вернёт пустой буфер). .TP \fI/proc/[pid]/ns/time\fP (начиная с Linux 5.6) This file is a handle for the time namespace of the process. .TP \fI/proc/[pid]/ns/time_for_children\fP (начиная с Linux 5.6) This file is a handle for the time namespace of child processes created by this process. This can change as a consequence of calls to \fBunshare\fP(2) and \fBsetns\fP(2) (see \fBtime_namespaces\fP(7)), so the file may differ from \fI/proc/[pid]/ns/time\fP. .TP \fI/proc/[pid]/ns/user\fP (начиная с Linux 3.8) .\" commit cde1975bc242f3e1072bde623ef378e547b73f91 Данный файл является описателем пространства имён user этого процесса. .TP \fI/proc/[pid]/ns/uts\fP (начиная с Linux 3.0) Данный файл является описателем пространства имён UTS этого процесса. .PP .\" .\" ==================== The /proc/sys/user directory ==================== .\" Право разыменовывать или читать (\fBreadlink\fP(2)) данные символические ссылки определяется проверкой режима доступа ptrace \fBPTRACE_MODE_READ_FSCREDS\fP; смотрите \fBptrace\fP(2). .SS "Каталог /proc/sys/user" Файлы в каталоге \fI/proc/sys/user\fP (появился в Linux начиная с версии 4.9) отражают ограничения на количество пространств имён различных типов, которые могут быть созданы. Файлы: .TP \fImax_cgroup_namespaces\fP Значение в этом файле определяет ограничение по каждому пользователю на количество пространств имён cgroup, которые могут быть созданы в пространстве имён пользователя. .TP \fImax_ipc_namespaces\fP Значение в этом файле определяет ограничение по каждому пользователю на количество пространств имён ipc, которые могут быть созданы в пространстве имён пользователя. .TP \fImax_mnt_namespaces\fP Значение в этом файле определяет ограничение по каждому пользователю на количество пространств имён монтирования, которые могут быть созданы в пространстве имён пользователя. .TP \fImax_net_namespaces\fP Значение в этом файле определяет ограничение по каждому пользователю на количество сетевых пространств имён, которые могут быть созданы в пространстве имён пользователя. .TP \fImax_pid_namespaces\fP Значение в этом файле определяет ограничение по каждому пользователю на количество пространств имён PID, которые могут быть созданы в пространстве имён пользователя. .TP \fImax_time_namespaces\fP (начиная с Linux 5.7) .\" commit eeec26d5da8248ea4e240b8795bb4364213d3247 The value in this file defines a per\-user limit on the number of time namespaces that may be created in the user namespace. .TP \fImax_user_namespaces\fP Значение в этом файле определяет ограничение по каждому пользователю на количество пользовательских пространств имён, которые могут быть созданы в пространстве имён пользователя. .TP \fImax_uts_namespaces\fP Значение в этом файле определяет ограничение по каждому пользователю на количество пространств имён uts, которые могут быть созданы в пространстве имён пользователя. .PP Замечания к этим файлам: .IP * 3 Значения в этих файлам могут изменяться привилегированными процессами. .IP * Значения, отражаемые в этих файлах, являются ограничениями пользовательского пространства имён, в котором располагается открывающий процесс. .IP * Ограничение устанавливается по каждому пользователю отдельно. Каждый пользователь в одном пространстве имён пользователя может создать столько пространств имён, сколько допускается это ограничение. .IP * Ограничения применяются ко всем пользователям, даже имеющим UID 0. .IP * Эти ограничения применяются в дополнении к другим накладываемым ограничениям, касающимся каждого пространства имён (например, для пользовательского пространства имён и пространства имён PID). .IP * При достижении этих ограничений вызовы \fBclone\fP(2) и \fBunshare\fP(2) завершаются ошибкой \fBENOSPC\fP. .IP * Для первоначального пространства пользовательского пространства имён значение по умолчанию в каждом файле равно половине ограничения на количество нитей, которые могут быть созданы (\fI/proc/sys/kernel/threads\-max\fP). В всех дочерних пользовательских пространств имён значение по умолчанию каждого файла равно \fBMAXINT\fP. .IP * Когда пространство имён создаётся, этот объект также учитывается в родительских пространствах имён. То есть: .RS .IP + 3 Каждое пользовательское пространство имён имен создателя UID. .IP + Когда пространство имён создаётся, это учитывается в UID создателя в каждом родительском пользовательском пространстве имён, и ядро проверяет, что соответствующее ограничение на пространство имён для UID создателя не превысило значение в родительском пространстве имён. .IP + Это гарантирует, что созданием нового пользовательского пространства имён нельзя воспользоваться для выхода за ограничения, установленные для текущего пользователя. .RE .\" .SS "Время жизни пространства имён" При отсутствии других факторов, пространство имён автоматически удаляется, когда последний процесс в пространстве имён завершается или покидает его. Однако есть несколько факторов, которые могут задержать существование пространства имён даже при отсутствии процессов в нём. К таким факторам относятся следующие: .IP * 3 Существуют открытый дескриптор файла или привязанное монтирование для соответствующего файла \fI/proc/[pid]/ns/*\fP. .IP * Пространство имён иерархично (т. е., пространство имён PID или пользовательское) и имеет дочернее пространство имён. .IP * Это пользовательское пространство имен, которое владеет одним или несколькими непользовательскими пространствами имён. .IP * Это пространство имён PID и существует процесс, который ссылается на пространство имён через символьную ссылку \fI/proc/[pid]/ns/pid_for_children\fP. .IP * It is a time namespace, and there is a process that refers to the namespace via a \fI/proc/[pid]/ns/time_for_children\fP symbolic link. .IP * Это пространство имён IPC и соответствующее монтирование файловой системы \fImqueue\fP (смотрите \fBmq_overview\fP(7)) ссылается на это пространство имён. .IP * Это пространство имён PID и соответствующее монтирование файловой системы \fBproc\fP(5) ссылается на это пространство имён. .SH ПРИМЕРЫ Смотрите \fBclone\fP(2) и \fBuser_namespaces\fP(7). .SH "СМ. ТАКЖЕ" \fBnsenter\fP(1), \fBreadlink\fP(1), \fBunshare\fP(1), \fBclone\fP(2), \fBioctl_ns\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5), \fBcapabilities\fP(7), \fBcgroup_namespaces\fP(7), \fBcgroups\fP(7), \fBcredentials\fP(7), \fBipc_namespaces\fP(7), \fBnetwork_namespaces\fP(7), \fBpid_namespaces\fP(7), \fBuser_namespaces\fP(7), \fButs_namespaces\fP(7), \fBlsns\fP(8), \fBpam_namespace\fP(8), \fBswitch_root\fP(8) .SH ЗАМЕЧАНИЯ Эта страница является частью проекта Linux \fIman\-pages\fP версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу \%https://www.kernel.org/doc/man\-pages/. .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alex Nik , Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .