tuto4: done

This commit is contained in:
nemunaire 2017-11-09 01:30:41 +01:00
commit a476cd8b6d
14 changed files with 643 additions and 331 deletions

View file

@ -1,21 +1,21 @@
\newpage
Le *namespace* `PID`
Le *namespace* `PID` {#pid-ns}
=====================
## Introduction
## Introduction {#pid-ns-intro}
Le *namespace* `PID` est celui qui va nous permettre d'isoler un sous-arbre de
processus en créant un nouvel arbre, qui aura son propre processus considéré
L'espace de noms `PID` est celui qui va nous permettre d'isoler un sous-arbre
de processus en créant un nouvel arbre, qui aura son propre processus considéré
comme l'`init`.
Contrairement aux autres *namespaces* où l'on peut demander à se séparer du
*namespace* en question à n'importe quel moment de l'exécution du processus,
via `unshare(2)` ou `setns(2)` par exemple, dans le cas du *namespace* PID, le
changement n'est valable qu'après le prochain `fork(2)` (ou similaire). Le
*namespace* PID du processus courant n'est pas changé, afin que le processus ne
change pas de PID en cours de route (en fonction du *namespace* dans lequel il
se trouve).
via `unshare(2)` ou `setns(2)` par exemple, ici, le changement n'est valable
qu'après le prochain `fork(2)` (ou similaire).
L'espace de noms PID du processus courant n'est pas changé, afin que le
processus ne change pas de PID en cours de route (puisque fonction du
*namespace* dans lequel il se trouve).
## Isolons !
@ -24,12 +24,12 @@ Première étape s'isoler :
<div lang="en-US">
```shell
unshare --pid --fork /bin/bash
42sh# unshare --pid --fork /bin/bash
```
</div>
Nous utilisons ici l'option `-f`, pour que le passage dans le nouvel espace de
noms des PID soit effectif (cf. Introduction).
noms des PID soit effectif (cf. [Introduction](#pid-ns-intro)).
Un coup d'œil à `top` ou `ps aux` devrait nous montrer que l'on est maintenant
seul processus ... pourtant, il n'en est rien, ces deux commandes continuent
@ -39,10 +39,10 @@ Cela est dû au fait que ces deux programmes, sous Linux, se basent sur le
contenu de `/proc`. D'ailleurs, si l'on affiche le PID du processus courant
`echo $$`, on obtient bien 1.
En l'état, beaucoup d'information fuitent. Mais il n'est pas possible de monter
le bon `/proc` car il serait également monté pour les processus de notre
système initial. Pour s'en sortir, il est nécessaire de s'isoler du *namespace*
`mount`.
En l'état, beaucoup d'informations sont divulguées. Mais il n'est pas possible
de monter le bon `/proc` car il serait également monté pour les processus de
notre système initial. Pour s'en sortir, il est nécessaire de s'isoler du
*namespace* `mount`.
### Double isolation : ajout du *namespace* `mount`
@ -51,7 +51,7 @@ Voici la nouvelle ligne de commande que l'on va utiliser :
<div lang="en-US">
```shell
unshare --pid --mount --fork --mount-proc /bin/bash
42sh# unshare --pid --mount --fork --mount-proc /bin/bash
```
</div>
@ -64,16 +64,15 @@ Cette fois, `top` et `ps` nous rapportent bien que l'on est seul dans notre
## Arborescence à l'extérieur du *namespace*
Vous l'avez sans doute remarqué lors de votre première tentative de `top`,
lorsque le `/proc` était encore monté sur le procfs de l'espace initial : votre
processus au PID 1 dans son nouveau *namespace* était présent dans
l'arborescence de l'espace initial avec un PID dans la continuité des autres
processus, étonnant !
Lors de notre première tentative de `top`, lorsque `/proc` était encore monté
sur le `procfs` de l'espace de noms initial : votre processus (au PID 1 dans
son nouveau *namespace*) était présent dans l'arborescence de l'espace initial
avec un PID dans la continuité des autres processus, étonnant !
En fait, l'isolation consiste en une virtualisation des numéros du processus :
la plupart des processus du système intial ne sont pas accessibles, et ceux qui
font parti de l'espace de noms créé disposent d'une nouvelle numérotation. Et
c'est cette nouvelle numérotation qui est montré au processus.
font partie de l'espace de noms créé disposent d'une nouvelle numérotation. Et
c'est cette nouvelle numérotation qui est montrée au processus.
Si l'on veut interagir avec ce processus depuis un de ses espaces de noms
parent, il faut le faire avec son identifiant de processus du même *namespace*
@ -89,13 +88,13 @@ Si un processus est orphelin, il est donc affiché comme étant fils du PID 1
dans son *namespace* ; il n'est pas sorti de l'espace de nom.
Lorsque l'on lance un processus via `nsenter(1)` ou `setns(2)`, cela crée un
processus qui n'est sans doute pas un fils direct du processus d'init de notre
conteneur. Malgré tout, même s'il est affiché comme n'étant pas un fils à
l'extérieur du conteneur, les propriétés d'init sont biens appliquées à
processus qui n'est sans doute pas un fils direct du processus d'`init` de
notre conteneur. Malgré tout, même s'il est affiché comme n'étant pas un fils à
l'extérieur du conteneur, les propriétés d'`init` sont biens appliquées à
l'intérieur pour conserver un comportement cohérent.
## Aller plus loin
N'hésitez pas à jeter un œil à la page de manuel consacré à ce *namespace* :
`pid_namespaces(7)`.
N'hésitez pas à jeter un œil à la page de manuel consacré à cet espace de
noms : `pid_namespaces(7)`.