Work on tuto 3
This commit is contained in:
parent
f216cc220c
commit
84fbd90d66
|
@ -1,4 +1,4 @@
|
|||
SOURCES = tutorial.md installation.md pseudofs.md cgroups.md capabilities.md project.md
|
||||
SOURCES = tutorial.md installation.md chroot.md pseudofs.md capabilities.md cgroups.md project.md
|
||||
PANDOCOPTS = --latex-engine=xelatex \
|
||||
--standalone \
|
||||
--normalize \
|
||||
|
|
17
tutorial/3/capabilities.md
Normal file
17
tutorial/3/capabilities.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
\newpage
|
||||
|
||||
Les capabilities
|
||||
================
|
||||
|
||||
## Présentation
|
||||
|
||||
## La `libcap`
|
||||
|
||||
## Les attributs étendus
|
||||
|
||||
`getcap` et `setcap` sur `ping`
|
||||
|
||||
## Exercice : visualisateur de capabilities d'un processus
|
||||
|
||||
```shell
|
||||
```
|
|
@ -1,6 +1,7 @@
|
|||
\newpage
|
||||
|
||||
# Utiliser les *cgroup*s
|
||||
Utiliser les *cgroup*s
|
||||
======================
|
||||
|
||||
Les *cgroup*s (pour *Control Group*s) permettent de collecter des statistiques
|
||||
sur des groupes de processus (appelés tâches) et de leur attribuer des
|
||||
|
|
96
tutorial/3/chroot.md
Normal file
96
tutorial/3/chroot.md
Normal file
|
@ -0,0 +1,96 @@
|
|||
\newpage
|
||||
|
||||
L'isolation du pauvre
|
||||
=====================
|
||||
|
||||
Depuis les premières version d'Unix, il est possible de changer le répertoire
|
||||
vu comme étant la racine du système de fichiers.
|
||||
|
||||
|
||||
## 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 porjet 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 choisi par
|
||||
l'utilisateur lors de l'installation) le système de base.
|
||||
|
||||
```shell
|
||||
debootstrap jessie newroot/ http://httpredir.debian.org/
|
||||
```
|
||||
|
||||
`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 exécuté, vous devriez pouvoir !
|
||||
|
||||
```shell
|
||||
./escape
|
||||
cat /path/to/foo
|
||||
```
|
||||
|
||||
|
||||
## Rendu
|
||||
|
||||
### Fichiers
|
||||
|
||||
Rendez un fichier `.c` contenant un programme qui, lorsqu'il est compilé puis
|
||||
exécuté dans un chroot, permet de s'en échapper pour rejoindre la véritable
|
||||
racine.
|
||||
|
||||
|
||||
### Questions
|
||||
|
||||
1. Citez un moyen d'empêcher l'échappement du `chroot`.
|
|
@ -9,7 +9,53 @@ Vous allez commencer aujourd'hui un projet qui s'étendra au prochain TP et qui
|
|||
consistera à réaliser la partie d'isolation de la moulinette des ACUs !
|
||||
|
||||
Cette semaine, il faudra faire en sorte de restreindre un groupe de processus
|
||||
pour qu'il ne puisse pas faire de déni de service.
|
||||
pour qu'il ne puisse pas faire de déni de service sur notre machine.
|
||||
|
||||
Il n'y a pas de restriction sur le langage utilisé, vous pouvez tout aussi bien
|
||||
utiliser du C, du C++, du Python, etc.
|
||||
|
||||
L'usage de bibliothèques **non relatives** au projet est autorisé : le but de
|
||||
ce sujet est d'évaluer votre compréhension et votre utilisation de la
|
||||
tuyauterie bas-niveau du noyau liée à la virtualisation légère, à partir du
|
||||
moment où vous n'utilisez pas une bibliothèque qui abstrait complètement cette
|
||||
plomberie, n'hésitez pas à l'utiliser !
|
||||
|
||||
Gardez en tête que ce projet sera à continuer au prochain TP, où il sera
|
||||
principalement question de faire des appels système.
|
||||
|
||||
|
||||
### Stage 1 : Restreindre l'environnement
|
||||
|
||||
Après avoir mis en place les bases de votre programme,
|
||||
|
||||
|
||||
### Stage 2 : Réduire les capabilities
|
||||
|
||||
|
||||
### Stage 3 : Script d'initialisation
|
||||
|
||||
|
||||
### Stage 4 : Utilisable par un utilisateur
|
||||
|
||||
Une autre solution
|
||||
|
||||
|
||||
### Stage 5 : Création de l'environnement d'exécution
|
||||
|
||||
Plutôt que d'utiliser votre système hôte complet, il faudrait utiliser un
|
||||
système contenant le struct minimum.
|
||||
|
||||
|
||||
### Stage 6 : Isolation du pauvre
|
||||
|
||||
Nous n'avons pas encore vu de meilleure méthode pour mieux isoler
|
||||
l'environnement que de faire un `chroot`, ajouter à votre programme cette
|
||||
isolation rudimentaire.
|
||||
|
||||
|
||||
### Stage 7 (bonus) : automatisation de l'environnement
|
||||
|
||||
LVM
|
||||
|
||||
|
||||
## Modalité de rendu
|
||||
|
|
|
@ -39,11 +39,9 @@ Linux emploi de nombreux systèmes de fichiers virtuels :
|
|||
- `/sys` : contient, principalement, des éléments de configuration du noyau, du
|
||||
matériel et des périphériques (activation de l'IPv6, taille des tampons,
|
||||
clignottement des DELs, ...) ;
|
||||
- `/proc/sys` : configuration du noyau ;
|
||||
- `/sys/firmware/efi/efivars` : pour accéder et modifier les variables de
|
||||
l'UEFI ;
|
||||
- `/sys/kernel/security` ;
|
||||
- debugfs ;
|
||||
- configfs ;
|
||||
- ...
|
||||
|
||||
Tous ces systèmes de fichiers sont généralement exclusivement stocké en
|
||||
|
@ -59,7 +57,7 @@ Explorons le pseudo système de fichiers `/proc` pour écrire un script qui va
|
|||
afficher des informations sur un processus donné :
|
||||
|
||||
```
|
||||
42sh$ ./pi $$
|
||||
42sh$ ./procinfo $$
|
||||
PID: 4242
|
||||
Path: /bin/bash
|
||||
Arguments:
|
||||
|
|
Loading…
Reference in New Issue
Block a user