Provided by: manpages-fr_4.26.0-1_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  d'hôte  et  nom de domaine
                                                             NIS

   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-dessus, 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-dessus,
              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_nsfs(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/time_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_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)

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.

Pages du manuel de Linux 6.9.1                    13 juin 2024                                     namespaces(7)