virli/tutorial/3/chroot.md

2.1 KiB

\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 :

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).

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.

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 :

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:

make escape
echo bar > ../foo
chroot .

Dans le nouvel environnement, vous ne devriez pas pouvoir faire :

cat ../foo

Mais une fois votre programme escape exécuté, vous devriez pouvoir !

./escape
  cat /path/to/foo

Rendu

Questions

  1. Citez une solution empêchant l'échappement d'un chroot.