tuto3: Precise chroot part
This commit is contained in:
parent
6665cfbace
commit
af26d0989b
@ -4,8 +4,42 @@ L'isolation ... avec `chroot`
|
||||
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.\
|
||||
donc une racine différente du reste du système.
|
||||
|
||||
::::: {.code}
|
||||
|
||||
Le noyau stocke le chemin de la racine courante dans les informations de notre
|
||||
processus :
|
||||
|
||||
<div lang="en-US">
|
||||
```c
|
||||
// From linux/sched.h
|
||||
struct task_struct {
|
||||
[...]
|
||||
/* Filesystem information: */
|
||||
struct fs_struct *fs;
|
||||
[...]
|
||||
};
|
||||
|
||||
// From linux/fs_struct.h
|
||||
struct fs_struct {
|
||||
int users;
|
||||
spinlock_t lock;
|
||||
seqcount_spinlock_t seq;
|
||||
int umask;
|
||||
int in_exec;
|
||||
struct path root;
|
||||
struct path pwd;
|
||||
};
|
||||
```
|
||||
</div>
|
||||
|
||||
Ici dans `root`.
|
||||
|
||||
On retrouve la racine exposée sous forme de lien symbolique dans
|
||||
`/proc/$$/root`.
|
||||
|
||||
:::::
|
||||
|
||||
Pour se créer un environnement afin de changer notre racine, il va falloir
|
||||
commencer par créer le dossier de notre nouvelle racine, peu importe où dans
|
||||
@ -43,6 +77,20 @@ chroot newroot /busybox ash
|
||||
Nous voici donc maintenant dans un nouveau shell (il s'agit d'`ash`, le shell
|
||||
de `busybox`).
|
||||
|
||||
::::: {.question}
|
||||
|
||||
#### Faut-il être `root` pour faire un `chroot` ? {-}
|
||||
|
||||
Oui, seul un utilisateur avec la *capability* `CAP_SYS_CHROOT` peut le faire !\
|
||||
|
||||
En fait, il est possible de duper le système avec un fichier `/etc/passwd` et
|
||||
`/etc/shadow` que l'on maîtrise, et un binaire *setuid root* tel que `su` :
|
||||
`su` pourra nous demander le mot de passe `root` ou d'autre autre utilisateur,
|
||||
mais comme on a la maîtrise du fichier `/etc/shadow`, on aura mis préalablement
|
||||
une valeur qui nous arrange.
|
||||
|
||||
:::::
|
||||
|
||||
Jusque-là ... ça fonctionne, rien de surprenant ! Mais qu'en est-il pour
|
||||
`bash` :
|
||||
|
||||
@ -92,13 +140,7 @@ 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
|
||||
### Gentoo
|
||||
|
||||
<http://gentoo.mirrors.ovh.net/gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64-openrc/stage3-amd64-openrc-20211128T170532Z.tar.xz>
|
||||
|
||||
@ -123,7 +165,7 @@ chroot newroot/ bash
|
||||
</div>
|
||||
|
||||
|
||||
#### Alpine
|
||||
### Alpine
|
||||
|
||||
<https://dl-cdn.alpinelinux.org/alpine/v3.14/releases/x86_64/alpine-minirootfs-3.14.2-x86_64.tar.gz>
|
||||
|
||||
@ -141,3 +183,27 @@ Alpine se contentant de Busybox pour son système de base, nous n'avons pas
|
||||
chroot newroot/ ash
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
### Utiliser une image OCI ?
|
||||
|
||||
Pourquoi pas : nous avons réalisé précédemment un script pour interagir avec le
|
||||
registre, c'est le moment de l'utiliser !
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
./registry_play.sh library/hello-world:latest
|
||||
```
|
||||
</div>
|
||||
|
||||
Si on se contente de l'image `hello-world`, on va pouvoir exécuter le binaire
|
||||
principal :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
chroot rootfs/ /hello
|
||||
```
|
||||
</div>
|
||||
|
||||
Bien sûr, des images de base comme `debian` ou `alpine` devraient fonctionner
|
||||
également sans difficulté.
|
||||
|
Loading…
x
Reference in New Issue
Block a user