Work on tuto 3

This commit is contained in:
nemunaire 2016-10-05 11:13:56 +02:00 committed by Pierre-Olivier Mercier
parent f216cc220c
commit 84fbd90d66
6 changed files with 165 additions and 7 deletions

View File

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

View 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
```

View File

@ -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
View 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`.

View File

@ -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

View File

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