Tuto 3 done
This commit is contained in:
parent
15236db9af
commit
8c402e6d65
15 changed files with 604 additions and 310 deletions
|
|
@ -1,18 +1,15 @@
|
|||
\newpage
|
||||
|
||||
L'isolation ... du pauvre
|
||||
=========================
|
||||
L'isolation ... à 1 € ?
|
||||
-----------------------
|
||||
|
||||
Depuis les premières versions d'Unix, il est possible de changer le répertoire
|
||||
vu comme étant la racine du système de fichiers. En anglais : *change root*:
|
||||
`chroot`. Le processus effectuant cette action ainsi que tous ses fils, verront
|
||||
donc une racine différente du reste du système.
|
||||
vu comme étant la racine du système de fichiers. En anglais : *change root*:
|
||||
`chroot`. Le processus effectuant cette action ainsi que tous ses fils verront
|
||||
donc une racine différente du reste du système.\
|
||||
|
||||
|
||||
## Mise en place de l'environnement
|
||||
|
||||
Pour se créer un environnement afin de changer notre racine, il va falloir
|
||||
commencer par créer le dossier de notre nouvelle racine :
|
||||
commencer par créer le dossier de notre nouvelle racine, peu importe où dans
|
||||
l'arborescence :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
|
@ -20,13 +17,21 @@ mkdir newroot
|
|||
```
|
||||
</div>
|
||||
|
||||
|
||||
Nous allons ensuite remplir ce dossier afin qu'il soit vraiment utilisable
|
||||
comme une racine : rien n'est strictement obligatoire, on s'assure simplement
|
||||
d'avoir de quoi bidouiller : un shell sera amplement suffisant pour commencer.
|
||||
|
||||
### `busybox`
|
||||
|
||||
Queques mots, pour commencer, à propos du projet Busybox : c'est un programme
|
||||
*linké* statiquement, c'est-à-dire qu'il ne va pas chercher ni charger de
|
||||
bibliothèque dynamique à son lancement. Il se suffit donc à lui-même dans un
|
||||
*chroot*, car il n'a pas de dépendances. Nous pouvons donc tester notre
|
||||
première isolation\ :
|
||||
Queques mots, pour commencer, à propos du projet Busybox : c'est un programme
|
||||
couteau-suisse qui implémente tous les binaires vitaux pour avoir un système
|
||||
fonctionnel et utilisable : `ls`, `sh`, `cat`, mais aussi `init`, `mdev` (un
|
||||
`udev`-like, cela permet de découvrir les périphériques attachés afin de les
|
||||
exposer dans `/dev` notamment). C'est un programme *linké* statiquement,
|
||||
c'est-à-dire qu'il ne va pas chercher ni charger de bibliothèque dynamique à
|
||||
son lancement. Il se suffit donc à lui-même dans un *chroot*, car il n'a pas de
|
||||
dépendances. Nous pouvons donc tester notre première isolation :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
|
@ -35,8 +40,11 @@ chroot newroot /busybox ash
|
|||
```
|
||||
</div>
|
||||
|
||||
Jusque là ... ça fonctionne, rien de surprenant ! Mais qu'en est-il pour
|
||||
`bash` :
|
||||
Nous voici donc maintenant dans un nouveau shell (il s'agit d'`ash`, le shell
|
||||
de `busybox`).
|
||||
|
||||
Jusque là ... ça fonctionne, rien de surprenant ! Mais qu'en est-il pour
|
||||
`bash` :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
|
|
@ -46,10 +54,10 @@ chroot: failed to run command ‘bash’: No such file or directory
|
|||
```
|
||||
</div>
|
||||
|
||||
De quel fichier est-il question ici ?
|
||||
De quel fichier est-il question ici ?
|
||||
|
||||
|
||||
### `debootstrap`
|
||||
### `debootstrap`, `pacstrap`
|
||||
|
||||
`debootstrap` est le programme utilisé par l'installeur des distributions
|
||||
Debian et ses dérivées. Il permet d'installer dans un dossier (en général, ce
|
||||
|
|
@ -58,54 +66,76 @@ l'utilisateur lors de l'installation) le système de base.
|
|||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
debootstrap buster newroot/ http://httpredir.debian.org/debian/
|
||||
debootstrap bullseye newroot/ http://httpredir.debian.org/debian/
|
||||
```
|
||||
</div>
|
||||
|
||||
`pacstrap` est le programme équivalent pour Archlinux.
|
||||
|
||||
|
||||
### *stage3*
|
||||
|
||||
Les distributions *à l'ancienne* proposent encore de télécharger leur système
|
||||
de base sous forme de tarball\ :
|
||||
`pacstrap` est le programme équivalent pour Arch Linux. Alors que `debootstrap`
|
||||
peut s'utiliser depuis n'importe quel environnement ou distribution,
|
||||
`pacstrap` nécessite d'avoir installé et configuré `pacman` (le gestionnaire de
|
||||
paquets d'Arch Linux), ce qui est le cas si vous êtes sous Arch Linux ou ses
|
||||
dérivées.
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
wget http://gentoo.mirrors.ovh.net/gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20201104T214503Z.tar.xz
|
||||
pacstrap newroot/
|
||||
```
|
||||
</div>
|
||||
|
||||
Dans les deux cas, nous nous retrouvons avec un dossier `newroot` contenant une
|
||||
distribution complète minimale, dans laquelle nous pouvons entrer :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
chroot newroot/ bash
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
### Archives *stage3*, *miniroot*
|
||||
|
||||
Les distributions *à l'ancienne* proposent de télécharger leur système de base
|
||||
sous forme de tarball :
|
||||
|
||||
|
||||
#### Gentoo\
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
wget http://gentoo.mirrors.ovh.net/gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20210630T214504Z.tar.xz
|
||||
tar xpf stage3-amd64-*.tar.xz -C newroot/
|
||||
```
|
||||
</div>
|
||||
|
||||
::::: {.more}
|
||||
L'avantage de télécharger l'archive de Gentoo est que l'on a déjà `gcc` dans un
|
||||
environnement qui tient dans 300 MB.
|
||||
environnement qui tient dans 200 MB.
|
||||
:::::
|
||||
|
||||
|
||||
## Exercice {-}
|
||||
|
||||
Écrivons maintenant un programme dont le seul but est de s'échapper du `chroot` :
|
||||
Comme pour les autres distributions vues précédemment, nous pouvons entrer dans
|
||||
notre nouvelle racine comme ceci :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
make escape
|
||||
echo bar > ../foo
|
||||
chroot .
|
||||
chroot newroot/ bash
|
||||
```
|
||||
</div>
|
||||
|
||||
Dans le nouvel environnement, vous ne devriez pas pouvoir faire :
|
||||
|
||||
#### Alpine\
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
cat ../foo
|
||||
wget https://dl-cdn.alpinelinux.org/alpine/v3.14/releases/x86_64/alpine-minirootfs-3.14.2-x86_64.tar.gz
|
||||
tar xpf alpine-minirootfs-*.tar.xz -C newroot/
|
||||
```
|
||||
</div>
|
||||
|
||||
Mais une fois votre programme `escape` exécuté, vous devriez pouvoir !
|
||||
Alpine se contentant de Busybox pour son système de base, nous n'avons pas
|
||||
`bash`, mais on peut tout de même lancer `ash` :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
(chroot) 42sh# ./escape
|
||||
bash# cat /path/to/foo
|
||||
```bash
|
||||
chroot newroot/ ash
|
||||
```
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue