2016-10-05 09:13:56 +00:00
|
|
|
|
\newpage
|
|
|
|
|
|
2016-10-05 20:49:08 +00:00
|
|
|
|
L'isolation ... du pauvre
|
|
|
|
|
=========================
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
2016-10-06 01:58:52 +00:00
|
|
|
|
Depuis les premières versions d'Unix, il est possible de changer le répertoire
|
2017-09-27 08:05:55 +00:00
|
|
|
|
vu comme étant la racine du système de fichiers. En anglais : *change root*:
|
2017-10-22 22:14:32 +00:00
|
|
|
|
`chroot`. Le processus effectuant cette action ainsi que tous ses fils, verront
|
|
|
|
|
donc une racine différente du reste du système.
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 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 :
|
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
mkdir newroot
|
2016-10-05 09:13:56 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
|
|
|
|
### `busybox`
|
|
|
|
|
|
2017-10-22 22:14:32 +00:00
|
|
|
|
Queques mots, pour commencer, à propos du projet Busybox : c'est un programme
|
2017-10-23 20:25:51 +00:00
|
|
|
|
*linké* statiquement, c'est-à-dire qu'il ne va pas chercher ni charger de
|
2017-10-22 22:14:32 +00:00
|
|
|
|
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
|
2018-11-16 01:38:41 +00:00
|
|
|
|
première isolation\ :
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
cp $(which busybox) newroot/
|
|
|
|
|
chroot newroot /busybox ash
|
2016-10-05 09:13:56 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
2017-10-22 22:14:32 +00:00
|
|
|
|
Jusque là ... ça fonctionne, rien de surprenant ! Mais qu'en est-il pour
|
|
|
|
|
`bash` :
|
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
42sh$ cp $(which bash) newroot/
|
|
|
|
|
42sh# chroot newroot /bash
|
|
|
|
|
chroot: failed to run command ‘bash’: No such file or directory
|
2017-10-22 22:14:32 +00:00
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
De quel fichier est-il question ici ?
|
|
|
|
|
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
|
|
|
|
### `debootstrap`
|
|
|
|
|
|
|
|
|
|
`debootstrap` est le programme utilisé par l'installeur des distributions
|
2017-10-22 22:14:32 +00:00
|
|
|
|
Debian et ses dérivées. Il permet d'installer dans un dossier (en général, ce
|
2016-10-06 01:58:52 +00:00
|
|
|
|
dossier correspond au point de montage de la nouvelle racine choisie par
|
2016-10-05 09:13:56 +00:00
|
|
|
|
l'utilisateur lors de l'installation) le système de base.
|
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
2019-10-22 16:03:09 +00:00
|
|
|
|
debootstrap buster newroot/ http://httpredir.debian.org/debian/
|
2016-10-05 09:13:56 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
|
|
|
|
`pacstrap` est le programme équivalent pour Archlinux.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### *stage3*
|
|
|
|
|
|
2018-10-22 14:49:38 +00:00
|
|
|
|
Les distributions *à l'ancienne* proposent encore de télécharger leur système
|
2018-11-16 01:38:41 +00:00
|
|
|
|
de base sous forme de tarball\ :
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
2021-09-11 12:41:43 +00:00
|
|
|
|
wget http://gentoo.mirrors.ovh.net/gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20201104T214503Z.tar.xz
|
2018-11-16 01:38:41 +00:00
|
|
|
|
tar xpf stage3-amd64-*.tar.xz -C newroot/
|
2016-10-05 09:13:56 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
2018-11-16 01:38:41 +00:00
|
|
|
|
## Exercice {-}
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
2018-11-16 01:38:41 +00:00
|
|
|
|
Écrivons maintenant un programme dont le seul but est de s'échapper du `chroot` :
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
make escape
|
|
|
|
|
echo bar > ../foo
|
|
|
|
|
chroot .
|
2016-10-05 09:13:56 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
|
|
|
|
Dans le nouvel environnement, vous ne devriez pas pouvoir faire :
|
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```bash
|
|
|
|
|
cat ../foo
|
2016-10-05 09:13:56 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
2016-10-05 20:49:08 +00:00
|
|
|
|
Mais une fois votre programme `escape` exécuté, vous devriez pouvoir !
|
2016-10-05 09:13:56 +00:00
|
|
|
|
|
2017-10-17 06:29:07 +00:00
|
|
|
|
<div lang="en-US">
|
2018-11-16 01:38:41 +00:00
|
|
|
|
```
|
|
|
|
|
(chroot) 42sh# ./escape
|
|
|
|
|
bash# cat /path/to/foo
|
2016-10-05 09:13:56 +00:00
|
|
|
|
```
|
2017-10-17 06:29:07 +00:00
|
|
|
|
</div>
|