virli/tutorial/3/chroot.md

105 lines
2.3 KiB
Markdown
Raw Normal View History

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*:
`chroot`.
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">
2016-10-05 09:13:56 +00:00
```shell
mkdir newroot
```
2017-10-17 06:29:07 +00:00
</div>
2016-10-05 09:13:56 +00:00
### `busybox`
2016-10-06 01:58:52 +00:00
On a déjà parlé du projet Busybox : c'est un programme linké statiquement,
2016-10-05 09:13:56 +00:00
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).
2017-10-17 06:29:07 +00:00
<div lang="en-US">
2016-10-05 09:13:56 +00:00
```shell
cp $(which busybox) newroot/
chroot newroot /busybox ash
```
2017-10-17 06:29:07 +00:00
</div>
2016-10-05 09:13:56 +00:00
### `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
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">
2016-10-05 09:13:56 +00:00
```shell
2017-06-25 17:09:15 +00:00
debootstrap jessie 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*
Les distributions « à l'ancienne » proposent encore de télécharger leur système
de base sous forme de tarball :
2017-10-17 06:29:07 +00:00
<div lang="en-US">
2016-10-05 09:13:56 +00:00
```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/
```
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.
## Exercice
Écrivons maintenant un programme dont le seul but est de s'échaper du `chroot`:
2017-10-17 06:29:07 +00:00
<div lang="en-US">
2016-10-05 09:13:56 +00:00
```shell
make escape
echo bar > ../foo
chroot .
```
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">
2016-10-05 09:13:56 +00:00
```shell
cat ../foo
```
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">
2016-10-05 09:13:56 +00:00
```shell
./escape
2016-10-06 01:58:52 +00:00
cat /path/to/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
## Rendu
### Questions
2016-10-06 01:58:52 +00:00
1. Citez une solution empêchant l'échappement d'un `chroot`.