Provided by: manpages-ru_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       namespaces - обзор пространств имён Linux

ОПИСАНИЕ

       Пространства  имён  облекают глобальный системный ресурс в абстрактную форму, в которой он представляется
       процессам внутри пространства имён таким образом,  что  процессы  имеют  свои  собственные  изолированные
       экземпляры  глобального  ресурса. Изменения глобального ресурса видимы другим процессам, которые являются
       членами пространства имён, и  невидимы  остальным  процессам.  Одно  из  применений  пространств  имён  —
       реализация контейнеров.

       This page provides pointers to information on the various namespace types, describes the associated /proc
       files, and summarizes the APIs for working with namespaces.

   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.
       Пространство имён Flag            Page                  Изоляция
       Cgroup            CLONE_NEWCGROUP cgroup_namespaces(7)  корневой каталог cgroup
       IPC               CLONE_NEWIPC    ipc_namespaces(7)     System  V  IPC,  очереди
                                                               сообщений POSIX
       Network           CLONE_NEWNET    network_namespaces(7) сетевые устройства,
                                                                стеки, порты …
       Mount             CLONE_NEWNS     mount_namespaces(7)   Точки монтирования
       PID               CLONE_NEWPID    pid_namespaces(7)     идентификаторы процессов
       Time              CLONE_NEWTIME   time_namespaces(7)    Boot    and    monotonic
                                                               clocks
       User              CLONE_NEWUSER   user_namespaces(7)    Идентификаторы
                                                               пользователей и групп
       UTS               CLONE_NEWUTS    uts_namespaces(7)     имя узла и доменное  имя
                                                               NIS

   Программный интерфейс пространств имён
       и различные файлы в /proc описаны далее. В API пространств имён имеются следующие системные вызовы:

       clone(2)
              The  clone(2)  system call creates a new process.  If the flags argument of the call specifies one
              or more of the CLONE_NEW* flags listed above, then new namespaces are created for each  flag,  and
              the  child  process  is  made  a  member of those namespaces.  (This system call also implements a
              number of features unrelated to namespaces.)

       setns(2)
              Системный  вызов  setns(2)   позволяет  вызывающему  процессу   присоединиться   к   существующему
              пространству  имён.  Требуемое  пространство  имён  указывается через файловый дескриптор, который
              ссылается на один из файлов /proc/pid/ns, описанных далее.

       unshare(2)
              The unshare(2)  system call moves the calling process to a new namespace.  If the  flags  argument
              of  the  call  specifies one or more of the CLONE_NEW* flags listed above, then new namespaces are
              created for each flag, and the calling process is made a member of those namespaces.  (This system
              call also implements a number of features unrelated to namespaces.)

       ioctl(2)
              Various ioctl(2)  operations  can  be  used  to  discover  information  about  namespaces.   These
              operations are described in ioctl_nsfs(2).

       Для  создания  новых  пространств  имён с помощью clone(2) и unshare(2), в большинстве случаев, требуется
       мандат CAP_SYS_ADMIN, так как в новом пространстве имён создатель будет  обладать  возможностью  изменять
       глобальные  ресурсы,  которые видимы другим процессам, создаваемым или присоединяемым к пространству имён
       со временем. Исключение составляют пользовательские пространства имён: начиная с Linux 3.8  для  создания
       пользовательского пространства имён особых прав не требуется.

   The /proc/pid/ns/ directory
       Для  каждого  процесса  в  /proc/pid/ns/  есть подкаталог, в котором содержится по одной записи на каждое
       пространство имён, через которые ими можно управлять с помощью setns().

           $ 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]

       При привязке монтирования (bind mounting) (смотрите mount(2)) одного из файлов этого  каталога  в  другое
       место  в  файловой системе данное пространство имён процесса с pid не удаляется, даже если все процессы в
       пространстве имён завершились.

       При открытии одного из файлов этого каталога (или файла, который был привязан  монтированием  в  один  из
       этих  файлов)  возвращается файловый описатель соответствующего пространства имён процесса заданного pid.
       Пока этот файловый дескриптор остаётся открытым, пространство имён  будет  оставаться  действующим,  даже
       если все процессы в пространстве имён завершились. Файловый дескриптор может быть передан в setns(2).

       В  Linux  3.7  и  старее  эти  файлы  видимы  как  жёсткие ссылки. Начиная с Linux 3.8 они представляются
       символьными ссылками. Если два процесса находятся в одном пространстве имён, то значения  идентификаторов
       устройств  и  номера инод их символьных ссылок /proc/pid/ns/xxx одинаковы; приложение может проверить это
       через  поля  stat.st_dev  и  stat.st_ino,  возвращаемые  stat(2).  Содержимое  этой   символьной   ссылки
       представляет собой строку с типом пространства имён и значением иноды:

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

       В этом подкаталоге содержатся символические ссылки:

       /proc/pid/ns/cgroup (начиная с Linux 4.6)
              Данный файл является описателем пространства имён cgroup этого процесса.

       /proc/pid/ns/ipc (начиная с Linux 3.0)
              Данный файл является описателем пространства имён IPC этого процесса.

       /proc/pid/ns/mnt (начиная с Linux 3.8)
              Данный файл является описателем пространства имён mount этого процесса.

       /proc/pid/ns/net (начиная с Linux 3.0)
              Данный файл является описателем пространства имён network этого процесса.

       /proc/pid/ns/pid (начиная с Linux 3.8)
              Этот  является  описателем  пространства  имён  PID  этого процесса. Данный описатель постоянен на
              протяжении всей жизни процесса  (т.  е.,  членство  пространства  имён  PID  процесса  никогда  не
              меняется).

       /proc/pid/ns/pid_for_children (начиная с Linux 4.12)
              Этот  файл является описателем пространства имён PID дочерних процессов, созданных этим процессом.
              Он может изменяться послевызовов unshare(2) и setns(2) (смотрите pid_namespaces(7)), поэтому  файл
              может отличаться от /proc/pid/ns/pid. Данные по символьной ссылке появляются только после создания
              в  пространстве  имён  первого дочернего процесса (до этого вызов readlink(2) с символьной ссылкой
              вернёт пустой буфер).

       /proc/pid/ns/time (начиная с Linux 5.6)
              This file is a handle for the time namespace of the process.

       /proc/pid/ns/time_for_children (начиная с 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 unshare(2) and setns(2)  (see time_namespaces(7)), so the file
              may differ from /proc/pid/ns/time.

       /proc/pid/ns/user (начиная с Linux 3.8)
              Данный файл является описателем пространства имён user этого процесса.

       /proc/pid/ns/uts (начиная с Linux 3.0)
              Данный файл является описателем пространства имён UTS этого процесса.

       Право разыменовывать или читать (readlink(2)) данные символические ссылки определяется  проверкой  режима
       доступа ptrace PTRACE_MODE_READ_FSCREDS; смотрите ptrace(2).

   The /proc/sys/user directory
       Файлы  в  каталоге  /proc/sys/user  (появился  в  Linux  начиная  с  версии  4.9) отражают ограничения на
       количество пространств имён различных типов, которые могут быть созданы. Файлы:

       max_cgroup_namespaces
              Значение в этом файле определяет ограничение по каждому  пользователю  на  количество  пространств
              имён cgroup, которые могут быть созданы в пространстве имён пользователя.

       max_ipc_namespaces
              Значение  в  этом  файле  определяет ограничение по каждому пользователю на количество пространств
              имён ipc, которые могут быть созданы в пространстве имён пользователя.

       max_mnt_namespaces
              Значение в этом файле определяет ограничение по каждому  пользователю  на  количество  пространств
              имён монтирования, которые могут быть созданы в пространстве имён пользователя.

       max_net_namespaces
              Значение  в  этом  файле  определяет  ограничение  по  каждому  пользователю на количество сетевых
              пространств имён, которые могут быть созданы в пространстве имён пользователя.

       max_pid_namespaces
              Значение в этом файле определяет ограничение по каждому  пользователю  на  количество  пространств
              имён PID, которые могут быть созданы в пространстве имён пользователя.

       max_time_namespaces (начиная с Linux 5.7)
              The  value  in  this  file  defines  a per-user limit on the number of time namespaces that may be
              created in the user namespace.

       max_user_namespaces
              Значение  в  этом  файле  определяет   ограничение   по   каждому   пользователю   на   количество
              пользовательских пространств имён, которые могут быть созданы в пространстве имён пользователя.

       max_uts_namespaces
              Значение  в  этом  файле  определяет ограничение по каждому пользователю на количество пространств
              имён uts, которые могут быть созданы в пространстве имён пользователя.

       Замечания к этим файлам:

       •  Значения в этих файлам могут изменяться привилегированными процессами.

       •  Значения, отражаемые в этих файлах, являются  ограничениями  пользовательского  пространства  имён,  в
          котором располагается открывающий процесс.

       •  Ограничение устанавливается по каждому пользователю отдельно. Каждый пользователь в одном пространстве
          имён пользователя может создать столько пространств имён, сколько допускается это ограничение.

       •  Ограничения применяются ко всем пользователям, даже имеющим UID 0.

       •  Эти  ограничения  применяются  в  дополнении  к  другим накладываемым ограничениям, касающимся каждого
          пространства имён (например, для пользовательского пространства имён и пространства имён PID).

       •  При достижении этих ограничений вызовы clone(2) и unshare(2) завершаются ошибкой ENOSPC.

       •  Для первоначального пространства пользовательского пространства имён значение по  умолчанию  в  каждом
          файле    равно    половине   ограничения   на   количество   нитей,   которые   могут   быть   созданы
          (/proc/sys/kernel/threads-max).  В  всех  дочерних  пользовательских  пространств  имён  значение   по
          умолчанию каждого файла равно MAXINT.

       •  Когда пространство имён создаётся, этот объект также учитывается в родительских пространствах имён. То
          есть:

          •  Каждое пользовательское пространство имён имен создателя UID.

          •  Когда  пространство  имён  создаётся,  это  учитывается  в  UID  создателя  в  каждом  родительском
             пользовательском  пространстве  имён,  и  ядро  проверяет,  что  соответствующее   ограничение   на
             пространство имён для UID создателя не превысило значение в родительском пространстве имён.

          •  Это  гарантирует,  что  созданием нового пользовательского пространства имён нельзя воспользоваться
             для выхода за ограничения, установленные для текущего пользователя.

   Время жизни пространства имён
       При отсутствии других факторов, пространство имён автоматически  удаляется,  когда  последний  процесс  в
       пространстве  имён  завершается или покидает его. Однако есть несколько факторов, которые могут задержать
       существование пространства имён  даже  при  отсутствии  процессов  в  нём.  К  таким  факторам  относятся
       следующие:

       •  Существуют   открытый  дескриптор  файла  или  привязанное  монтирование  для  соответствующего  файла
          /proc/pid/ns/*.

       •  Пространство имён иерархично (т. е., пространство имён PID  или  пользовательское)  и  имеет  дочернее
          пространство имён.

       •  Это  пользовательское  пространство  имен,  которое  владеет одним или несколькими непользовательскими
          пространствами имён.

       •  Это пространство имён  PID  и  существует  процесс,  который  ссылается  на  пространство  имён  через
          символьную ссылку /proc/pid/ns/pid_for_children.

       •  It   is   a   time   namespace,   and  there  is  a  process  that  refers  to  the  namespace  via  a
          /proc/pid/ns/time_for_children symbolic link.

       •  Это  пространство  имён  IPC  и  соответствующее  монтирование  файловой  системы   mqueue   (смотрите
          mq_overview(7)) ссылается на это пространство имён.

       •  Это  пространство  имён  PID  и соответствующее монтирование файловой системы proc(5) ссылается на это
          пространство имён.

ПРИМЕРЫ

       Смотрите clone(2) и 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)

ПЕРЕВОД

       Русский перевод этой страницы руководства разработал(и) Alex Nik <rage.iz.me@gmail.com>, Azamat  Hackimov
       <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru>,
       Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                  13 июня 2024 г.                                   namespaces(7)