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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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 ⟨⟩.