New part on pivot_root
This commit is contained in:
parent
ff75a07312
commit
a5249d48a5
@ -1,4 +1,4 @@
|
|||||||
SOURCES = tutorial.md mount.md namespaces.md networkns.md userns.md pidns.md clone.md seccomp.md project.md
|
SOURCES = tutorial.md mount.md namespaces.md networkns.md pidns.md mountns.md userns.md clone.md seccomp.md project.md
|
||||||
PANDOCOPTS = --latex-engine=xelatex \
|
PANDOCOPTS = --latex-engine=xelatex \
|
||||||
--standalone \
|
--standalone \
|
||||||
--normalize \
|
--normalize \
|
||||||
|
@ -226,8 +226,6 @@ Il est courant de faire appel à cette option lorsque l'on souhaite changer la
|
|||||||
racine de notre système de fichier : passer de l'initramfs au système au
|
racine de notre système de fichier : passer de l'initramfs au système au
|
||||||
booter, de notre système hôte au système d'un conteneur, ...
|
booter, de notre système hôte au système d'un conteneur, ...
|
||||||
|
|
||||||
## `switch_root` ou `pivot_root`
|
|
||||||
|
|
||||||
|
|
||||||
## Aller plus loin
|
## Aller plus loin
|
||||||
|
|
||||||
|
130
tutorial/4/mountns.md
Normal file
130
tutorial/4/mountns.md
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
\newpage
|
||||||
|
|
||||||
|
Le *namespace* `mount`
|
||||||
|
======================
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Le *namespace* `mount`, comme nous l'avons vu au chapitre précédent, permet
|
||||||
|
d'isoler la vision du système de fichiers qu'à un processus et ses fils.
|
||||||
|
|
||||||
|
Peut-être que l'on peut trouver avec ça, un moyen de faire un `chroot` plus sûr ?
|
||||||
|
|
||||||
|
|
||||||
|
## Préparation du changement de racine
|
||||||
|
|
||||||
|
### Avant propos
|
||||||
|
|
||||||
|
Nous allons essayer de changer la racine de notre système de fichier. À la
|
||||||
|
différence d'un `chroot(2)`, changer de racine est quelque chose d'un peu plus
|
||||||
|
sportif car il s'agit de ne plus avoir aucune trace de l'ancienne racine. Au
|
||||||
|
moins ici, il ne sera certainement pas possible de revenir en arrière dans
|
||||||
|
l'arborescence !
|
||||||
|
|
||||||
|
Pour l'instant, votre système utilise sans doute la partition d'un disque
|
||||||
|
physique comme racine de son système de fichier. Le changement de racine, va
|
||||||
|
nous permettre d'utiliser un autre système.
|
||||||
|
|
||||||
|
Bien sûr, nous n'allons pas changer la racine de votre système hôte, nous
|
||||||
|
allons faire cela dans un *namespace* qui nous permet d'avoir des points de
|
||||||
|
montage virtuels. Le changement de racine sera donc effectif uniquement dans
|
||||||
|
cet espace de noms.
|
||||||
|
|
||||||
|
|
||||||
|
### L'environnement
|
||||||
|
|
||||||
|
Pour pouvoir changer de racine, il est nécessaire que la nouvelle racine soit
|
||||||
|
la racine d'un point de montage, comme l'explique `pivot_root(2)`. En effet, il
|
||||||
|
serait encore possible hypothétiquement de remonter dans l'arborescence si l'on
|
||||||
|
ne se trouvait pas à la racine d'une partition au moment du basculement.
|
||||||
|
|
||||||
|
Si vous n'avez pas de partition à disposition, vous pouvez utiliser un `tmpfs` :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mkdir /mnt/newroot
|
||||||
|
mount -t tmpfs none /mnt/newroot
|
||||||
|
```
|
||||||
|
|
||||||
|
Placez ensuite dans cette nouvelle racine le système de votre choix (cf. le TP
|
||||||
|
précédent pour les différentes méthodes et liens).
|
||||||
|
|
||||||
|
|
||||||
|
## Changer de racine
|
||||||
|
|
||||||
|
Voici les grandes étapes du changement de racine :
|
||||||
|
|
||||||
|
1. S'isoler dans les *namespaces* adéquats ;
|
||||||
|
2. Démonter ou déplacer toutes les partitions de l'ancienne racine vers la
|
||||||
|
nouvelle racine ;
|
||||||
|
3. `pivot_root` !
|
||||||
|
|
||||||
|
|
||||||
|
### S'isoler
|
||||||
|
|
||||||
|
Notre but étant de démonter toutes les partitions superflues, nous allons
|
||||||
|
devoir nous isoler sur :
|
||||||
|
|
||||||
|
* les points de montages, ça semble évident ;
|
||||||
|
* les PIDs : car on ne pourra pas démonter une partition en cours
|
||||||
|
d'utilisation. S'il n'y a pas de processus, il n'y a personne pour nous
|
||||||
|
empêcher de démonter une partition !
|
||||||
|
* les autres *namespaces* ne sont pas forcément nécessaires.
|
||||||
|
|
||||||
|
Isolons-nous :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
unshare -p -m -f --mount-proc
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Dissocier la propagation des démontages
|
||||||
|
|
||||||
|
Attention ! avant de pouvoir commencer à démonter les partitions, il faut
|
||||||
|
s'assurer que les démontages ne se propagent pas via une politique de *shared
|
||||||
|
mount*.
|
||||||
|
|
||||||
|
Commençons donc par étiqueter tous nos points de montage (de ce *namespace*),
|
||||||
|
comme esclave :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mount --make-rslave /
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Démonter tout !
|
||||||
|
|
||||||
|
À vous maintenant de démonter vos points d'attache. Il ne devrait vous rester
|
||||||
|
après cette étape que : `/`, `/dev`, `/sys`, `/proc`, `/run` et leurs fils.
|
||||||
|
|
||||||
|
|
||||||
|
### Switch !
|
||||||
|
|
||||||
|
À ce stade, dans votre console, vous avez plusieurs solutions : utiliser
|
||||||
|
`switch_root(8)` ou `pivot_root(8)`. La première abstrait plus de choses que la
|
||||||
|
seconde.
|
||||||
|
|
||||||
|
|
||||||
|
#### `switch_root`
|
||||||
|
|
||||||
|
Cette commande s'occupe de déplacer les partitions restantes pour vous, et lance
|
||||||
|
la première commande (*init*) de votre choix.
|
||||||
|
|
||||||
|
|
||||||
|
#### `pivot_root`
|
||||||
|
|
||||||
|
Cette commande, plus proche du fonctionnement de l'appel système
|
||||||
|
`pivot_root(2)`, requiert de notre part que nous ayons préalablement déplacées
|
||||||
|
les partitions systèmes à leur place dans la nouvelle racine.
|
||||||
|
|
||||||
|
L'appel de la commande, qui prend en argument le chemin de la nouvelle racine
|
||||||
|
et le chemin dans la nouvelle racine où placer l'ancienne, va donc intervertir
|
||||||
|
les deux racines.
|
||||||
|
|
||||||
|
Une fois le pivot effectué, on peut démonter l'ancienne racine.
|
||||||
|
|
||||||
|
Pour lancer la première commande dans la nouvelle racine, on passe généralement
|
||||||
|
par :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
exec chroot / command
|
||||||
|
```
|
Loading…
x
Reference in New Issue
Block a user