Provided by: manpages-fr_4.13-4_all bug

NOM

       espaces de noms – Présentation des espaces de noms sous Linux

DESCRIPTION

       Un  espace  de  noms  transforme  une ressource globale du système en une abstraction qui la présente aux
       processus dans cet espace de noms comme une instance indépendante de  la  ressource  globale.  Seuls  les
       processus  qui  appartiennent  à  l'espace  de  noms peuvent voir les changements apportés à la ressource
       globale. Les espaces de noms sont notamment utilisés mettre en œuvre les conteneurs.

       Cette page présente les différents espaces de noms, leurs fichiers /proc respectifs,  et  récapitule  les
       API qui permettent de travailler avec ces espaces de noms.

   Types d’espaces de noms
       La table suivante présente les types d’espace de noms disponibles dans Linux. La seconde colonne présente
       la  valeur  de  l’indicateur  utilisé  pour  indiquer  le type d’espace de noms dans les diverses API. La
       troisième colonne indique la page de manuel qui fournit des détails sur le  type  d’espace  de  noms.  La
       dernière colonne est un résumé des ressources qui sont isolées par le type d’espace de noms.
       Espaces de noms Indicateur      Page                  Isolation
       Cgroup          CLONE_NEWCGROUP cgroup_namespaces(7)  Répertoire racine cgroup
       IPC             CLONE_NEWIPC    ipc_namespaces(7)     IPC System V,
                                                             files de messages POSIX
       Réseau          CLONE_NEWNET    network_namespaces(7) Périphériques réseau,
                                                             piles, ports, etc.
       Montage         CLONE_NEWNS     mount_namespaces(7)   Points de montage
       PID             CLONE_NEWPID    pid_namespaces(7)     Identifiants de processus (PID)
       Temps           CLONE_NEWTIME   time_namespaces(7)    Horloges de
                                                             démarrage et monotones
       Utilisateur     CLONE_NEWUSER   user_namespaces(7)    ID utilisateur et groupe
       UTS             CLONE_NEWUTS    uts_namespaces(7)     Nom de domaine
                                                             NIS et nom d'hôte

   API des espaces de noms
       En  plus  des  divers  fichiers  /proc  décrits  plus  bas, l'API des espaces de noms comprend les appels
       systèmes suivants :

       clone(2)
              L'appel système clone(2) crée un nouveau processus. Si lors de l'appel, l'argument  flags  précise
              un  ou plusieurs des indicateurs CLONE_NEW* décrits ci-dessous, un nouvel espace de noms sera créé
              pour chaque indicateur et le processus enfant sera membre  de  ces  espaces  de  noms.  Cet  appel
              système implémente également plusieurs fonctionnalités sans lien avec les espaces de noms.

       setns(2)
              L'appel  système  setns(2) permet à un processus appelant de rejoindre un espace de noms existant.
              Cet espace de noms est précisé au moyen d'un descripteur de fichier  qui  renvoie  vers  l'un  des
              fichiers /proc/[pid]/ns décrits ci-dessous.

       unshare(2)
              L'appel système unshare(2) déplace le processus appelant dans un nouvel espace de noms. Si lors de
              l'appel, son argument flags précise un ou plusieurs des indicateurs CLONE_NEW* décrits ci-dessous,
              un  nouvel espace de noms sera créé pour chaque indicateur et le processus appelant sera membre de
              ces espaces de noms. Cet appel système implémente également plusieurs  fonctionnalités  sans  lien
              avec les espaces de noms.

       ioctl(2)
              Diverses  opérations  ioctl(2) peuvent être utilisées pour connaître des informations à propos des
              espaces de noms. Ces opérations sont décrites dans ioctl_ns(2).

       Dans la plupart des cas, la création de nouveaux espaces de noms  en  utilisant  clone(2)  ou  unshare(2)
       nécessite  de  disposer de la capacité CAP_SYS_ADMIN, puisque, dans le nouvel espace de noms, le créateur
       aura le pouvoir de changer les ressources globales qui sont visibles aux  autres  processus  qui  y  sont
       créés  ultérieurement  ou  de  joindre  l’espace  de  noms.  Les  espaces de noms utilisateur forment une
       exception : à partir de Linux 3.8, la création d'un espace  de  noms  utilisateur  ne  nécessite  pas  de
       privilège particulier.

   Le répertoire /proc/[pid]/ns/
       Chaque processus a un sous-répertoire /proc/[pid]/ns/ contenant une entrée pour chaque espace de noms qui
       prend en charge sa manipulation par 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]

       Lier  le  montage  (consulter  mount(2))  d'un des fichiers de ce répertoire dans un autre emplacement du
       système de fichiers maintient l'espace de noms du processus désigné par pid en  fonctionnement,  même  si
       tous les processus de l'espace de noms sont terminés.

       L'ouverture  d'un  des  fichiers de ce répertoire (ou d'un fichier qui est un montage bind de l'un de ces
       fichiers) renvoie un gestionnaire de fichier pour l'espace de noms correspondant au processus désigné par
       pid. Tant que ce descripteur de fichier est ouvert, l'espace de noms reste opérationnel, même si tous les
       processus de l'espace de noms sont terminés. Le descripteur de fichier peut être  transmis  au  moyen  de
       setns(2).

       Jusqu’à  la  version 3.7  de  Linux  (incluse),  ces fichiers apparaissaient comme des liens physiques. À
       partir de Linux 3.8, ils apparaissent comme des liens symboliques. Si deux processus sont  dans  le  même
       espace  de  noms,  alors  ils auront les mêmes identifiants de périphérique et leurs numéros d’inœud pour
       leurs liens symboliques /proc/[pid]/ns/xxx  seront  les  mêmes.  Une  application  peut  consulter  cette
       information  grâce  aux  champs  stat.st_dev  et  stat.st_ino renvoyés par stat(2). Le contenu de ce lien
       symbolique est une chaîne de caractères contenant le type de l'espace de noms et le numéro d'inœud, comme
       dans l'exemple suivant :

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

       Les liens symboliques dans ce sous-répertoire sont les suivants :

       /proc/[pid]/ns/cgroup (depuis Linux 4.6)
              Ce fichier est un descripteur pour l'espace de noms cgroup du processus.

       /proc/[pid]/ns/ipc (depuis Linux 3.0)
              Ce fichier est un descripteur pour l'espace de noms IPC du processus.

       /proc/[pid]/ns/mnt (depuis Linux 3.8)
              Ce fichier est un descripteur pour l'espace de noms montage du processus.

       /proc/[pid]/ns/net (depuis Linux 3.0)
              Ce fichier est un descripteur pour l'espace de noms réseau du processus.

       /proc/[pid]/ns/pid (depuis Linux 3.8)
              Ce fichier est un descripteur pour l'espace de noms PID du processus. Ce descripteur est permanent
              pour toute la durée de vie du processus (c’est-à-dire que l’appartenance de l’espace de  noms  PID
              ne change jamais).

       /proc/[pid]/ns/pid_for_children (depuis Linux 4.12)
              Ce  fichier  est  un  descripteur  pour  l’espace  de  noms  PID des processus enfant créés par ce
              processus. Cela peut changer comme conséquence des appels à  unshare(2)  et  setns(2)   (consultez
              pid_namespaces(7)),  aussi  le  fichier  peut  différer  de /proc/[pid]/ns/pid. Le lien symbolique
              obtient une valeur seulement après que le premier processus enfant soit créé dans  cet  espace  de
              noms. Auparavant, readlink(2) sur le lien symbolique renvoyait un tampon vide.

       /proc/[pid]/ns/time (depuis Linux 5.6)
              Ce fichier est un descripteur pour l'espace de noms temps du processus.

       /proc/[pid]/ns/time_for_children (depuis Linux 5.6)
              Ce  fichier  est  un  descripteur  pour  l’espace  de noms temps des processus enfant créés par ce
              processus. Cela peut changer comme conséquence des appels à  unshare(2)  et  setns(2)   (consultez
              time_namespaces(7)), aussi le fichier peut différer de /proc/[pid]/ns/time.

       /proc/[pid]/ns/user (depuis Linux 3.8)
              Ce fichier est un descripteur pour l'espace de noms utilisateur du processus.

       /proc/[pid]/ns/uts (depuis Linux 3.0)
              Ce fichier est un descripteur pour l'espace de noms UTS du processus.

       La  permission  de  déréférencer  ou  lire  (readlink(2))  ces  liens  symboliques  est contrôlée par une
       vérification PTRACE_MODE_READ_FSCREDS du mode d’accès ptrace. Consultez ptrace(2).

   Répertoire /proc/sys/user
       Les fichiers dans le répertoire /proc/sys/user (qui existe depuis Linux 4.9) expose les limites du nombre
       d’espaces de noms des divers types pouvant être créés. Ces fichiers sont les suivants :

       max_cgroup_namespaces
              Cette valeur dans le fichier définit une limite par utilisateur du nombre d’espaces de noms cgroup
              pouvant être créés dans l’espace de noms utilisateur.

       max_ipc_namespaces
              Cette valeur dans le fichier définit une limite par utilisateur du nombre d’espaces  de  noms  IPC
              pouvant être créés dans l’espace de noms utilisateur.

       max_mnt_namespaces
              Cette  valeur  dans  le  fichier  définit  une  limite par utilisateur du nombre d’espaces de noms
              montage pouvant être créés dans l’espace de noms utilisateur.

       max_net_namespaces
              Cette valeur dans le fichier définit une limite par utilisateur du nombre d’espaces de noms réseau
              pouvant être créés dans l’espace de noms utilisateur.

       max_pid_namespaces
              Cette valeur dans le fichier définit une limite par utilisateur du nombre d’espaces  de  noms  PID
              pouvant être créés dans l’espace de noms utilisateur.

       max_time_namespaces (depuis Linux 5.7)
              Cette  valeur dans le fichier définit une limite par utilisateur du nombre d’espaces de noms temps
              pouvant être créés dans l’espace de noms utilisateur.

       max_user_namespaces
              Cette valeur dans le fichier définit une limite  par  utilisateur  du  nombre  d’espaces  de  noms
              utilisateur pouvant être créés dans l’espace de noms utilisateur.

       max_uts_namespaces
              Cette  valeur  dans  le fichier définit une limite par utilisateur du nombre d’espaces de noms UTS
              pouvant être créés dans l’espace de noms utilisateur.

       Remarquez les points suivants concernant ces fichiers :

       –  Les valeurs dans ces fichiers sont modifiables par les processus privilégiés.

       –  Les valeurs indiquées par ces fichiers sont les limites pour l’espace de noms utilisateur dans  lequel
          le processus ouvert réside.

       –  Les  limites  sont  pour chaque utilisateur. Chaque utilisateur dans le même espace de noms peut créer
          des espaces de noms jusqu’à la limite définie.

       –  Les limites s’appliquent à tous les utilisateurs, incluant l’UID 0.

       –  Ces limites s’appliquent en plus de n’importe quelles autres limites par espace de noms (tels que  les
          espaces de noms PID ou utilisateur) qui peuvent être imposées.

       –  En cas de dépassement de ces limites, clone(2) et unshare(2) échouent avec l’erreur ENOSPC.

       –  Pour  l’espace  de noms utilisateur de départ, la valeur par défaut dans chacun de ces fichiers est la
          moitié de la limite du nombre de threads pouvant être créés (/proc/sys/kernel/threads-max). Dans  tous
          les espaces de noms de la descendance, la valeur par défaut dans chaque fichier est MAXINT.

       –  Quand  un  espace  de  noms est créé, l’objet est aussi comptabilisé dans les espaces de noms ancêtre.
          Plus précisément :

          *  Chaque espace de noms utilisateur à un UID créateur.

          *  Quand un espace de noms est créé, il est comptabilisé  dans  les  UID  créateurs  dans  chacun  des
             espaces  de  noms  ancêtre  et le noyau assure que la limite de l’espace de noms correspondant pour
             l’UID créateur dans l’espace de noms ancêtre ne soit pas dépassée.

          *  Le point ci-dessus assure que la création d’un nouvel espace de noms utilisateur ne peut  pas  être
             utilisée pour se soustraire aux limites en vigueur dans l’espace de noms utilisateur actuel.

   Durée de vie des espaces de noms
       En  l’absence d’autres facteurs, un espace de noms est automatiquement détruit quand le dernier processus
       de l’espace de noms se termine ou le quitte. Cependant, il existe un certain nombre d’autres facteurs qui
       peuvent obliger l’existence de l’espace de noms même s’il n’a plus de processus membre, dont les facteurs
       suivants :

       –  Un  descripteur  de  fichier  ouvert  ou  un  montage  bind  existe  pour  le  fichier   correspondant
          /proc/[pid]/ns/*.

       –  L’espace  de  noms  est hiérarchique (c’est-à-dire un espace de noms PID ou utilisateur) et possède un
          espace de noms enfant.

       –  C’est un espace de noms utilisateur qui possède un ou plusieurs espaces de noms non utilisateur.

       –  C’est un espace de noms PID et il existe un  processus  qui  se  réfère  à  lui  à  l’aide  d’un  lien
          symbolique /proc/[pid]/ns/pid_for_children.

       –  C’est  un  espace  de  noms  temps  et  il  existe un processus qui se réfère à lui à l’aide d’un lien
          symbolique /proc/[pid]/ns/temps_for_children.

       –  C’est un espace de noms IPC et  un  montage  correspondant  d’un  système  de  fichiers  mqueue  (file
          d'attente de message — consultez mq_overview(7)) se réfère à cet espace de noms.

       –  C’est  un  espace de noms PID et un montage correspondant d’un système de fichiers proc(5) se réfère à
          cet espace de noms.

EXEMPLES

       Consultez clone(2) et user_namespaces(7).

VOIR AUSSI

       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),
       pam_namespace(8), switch_root(8)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions  pour  signaler  des  anomalies et la dernière version de cette page peuvent être trouvées à
       l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,    Denis    Barbier    <barbier@debian.org>,    David     Prévot
       <david@tilapin.org>,     Cédric     Boutillier     <cedric.boutillier@gmail.com>,    Frédéric    Hantrais
       <fhantrais@gmail.com> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

       Cette traduction est une documentation libre ; veuillez vous  reporter  à  la  GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si  vous  découvrez  un  bogue  dans la traduction de cette page de manuel, veuillez envoyer un message à
       debian-l10n-french@lists.debian.org.

Linux                                            1 novembre 2020                              ESPACES DE NOMS(7)