virli/tutorial/3/chroot.md

91 lines
2.1 KiB
Markdown

\newpage
L'isolation ... du pauvre
=========================
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`.
## 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 :
```shell
mkdir newroot
```
### `busybox`
On a déjà parlé du projet Busybox : c'est un programme linké statiquement,
c'est-à-dire qu'il n'a pas de dépendance sur des bibliothèques
dynamiques. Il se suffit donc à lui-même dans un chroot (dans lequel on ne peut
pas accéder aux bibliothèques du système, il faudrait toutes les copier à la
main).
```shell
cp $(which busybox) newroot/
chroot newroot /busybox ash
```
### `debootstrap`
`debootstrap` est le programme utilisé par l'installeur des distributions
Debian et ses dérivés. Il permet d'installer dans un dossier (en général, ce
dossier correspond au point de montage de la nouvelle racine choisie par
l'utilisateur lors de l'installation) le système de base.
```shell
debootstrap jessie newroot/ http://httpredir.debian.org/debian/
```
`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 :
```shell
wget ftp://gentoo.mirrors.ovh.net/gentoo-distfiles/releases/amd64/autobuilds/20160929/stage3-amd64-20160929.tar.bz2
tar xpf stage3-amd64-*.tar.bz2 -C newroot/
```
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.
## Exercice
Écrivons maintenant un programme dont le seul but est de s'échaper du `chroot`:
```shell
make escape
echo bar > ../foo
chroot .
```
Dans le nouvel environnement, vous ne devriez pas pouvoir faire :
```shell
cat ../foo
```
Mais une fois votre programme `escape` exécuté, vous devriez pouvoir !
```shell
./escape
cat /path/to/foo
```
## Rendu
### Questions
1. Citez une solution empêchant l'échappement d'un `chroot`.