Work on tuto 3
This commit is contained in:
parent
07195409eb
commit
b459443d9e
9 changed files with 322 additions and 653 deletions
|
|
@ -5,6 +5,9 @@ Projet et rendu
|
|||
|
||||
## Sujet
|
||||
|
||||
**Ce projet, étalé sur ce TP et le TP suivant, constitue le cœur de la notation
|
||||
de ce cours.**
|
||||
|
||||
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 !
|
||||
|
||||
|
|
@ -26,36 +29,82 @@ principalement question de faire des appels système.
|
|||
|
||||
### Stage 1 : Restreindre l'environnement
|
||||
|
||||
Après avoir mis en place les bases de votre programme,
|
||||
Après avoir mis en place les bases de votre programme, commencez par créer les
|
||||
différentes hiérarchies (si vous avez un noyau récent, vous pouvez les
|
||||
cgroups-v2) dont vous allez avoir besoin pour limiter l'utilisation de
|
||||
ressources.
|
||||
|
||||
Puis, mettez en place ces limites :
|
||||
|
||||
* pas plus d'1 GB de mémoire utilisée ;
|
||||
* 1 seul CPU au maximum ;
|
||||
* ...
|
||||
|
||||
|
||||
### Stage 2 : Réduire les capabilities
|
||||
### Stage 2 : Réduire les *capabilities*
|
||||
|
||||
Réduisez au maximum les capabilities, de telle sorte qu'il ne soit pas possible
|
||||
de faire un ping dans l'environnement restreint :
|
||||
|
||||
```shell
|
||||
42sh# ping 8.8.8.8
|
||||
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
|
||||
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=3.93 ms
|
||||
64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=3.97 ms
|
||||
^C
|
||||
--- 8.8.8.8 ping statistics ---
|
||||
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
|
||||
rtt min/avg/max/mdev = 3.931/3.954/3.978/0.067 ms
|
||||
|
||||
42sh# ./mymoulette /bin/bash
|
||||
bash# curl http://www.linuxcontainers.org/ | md5sum
|
||||
59e714c4331e71ac3529a6502994ef1d
|
||||
|
||||
bash# ping 8.8.8.8
|
||||
Operation not permitted
|
||||
```
|
||||
|
||||
Astuces : `prctl(2)`, `capabilities(7)`, `capget(2)`, `capset(2)`, ...
|
||||
|
||||
|
||||
### Stage 3 : Script d'initialisation
|
||||
### Stage 3 : Utilisable par un utilisateur
|
||||
|
||||
Jouez avec les attributs étendus pour qu'un utilisateur non-privilégié puisse
|
||||
exécuter votre moulinette. Ajouter la/les commande(s) à votre Makefile ou
|
||||
script d'installation.
|
||||
|
||||
|
||||
### Stage 4 : Utilisable par un utilisateur
|
||||
### Création d'un environnement d'exécution minimal
|
||||
|
||||
Une autre solution
|
||||
Plutôt que d'utiliser votre système hôte au complet, avec tous ses programmes
|
||||
et toutes ses bibliothèques, il faudrait utiliser un système contenant le
|
||||
strict minimum. Recréez un environnement minimaliste, comme on a pu en voir
|
||||
dans la partie sur les *chroot*.
|
||||
|
||||
**Ne rendez pas cet environnement, il vous sera seulement utile pour faire des
|
||||
tests.**
|
||||
|
||||
|
||||
### 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
|
||||
### Stage 4 : 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.
|
||||
isolation rudimentaire. Et rendez-vous au prochain cours pour avoir de
|
||||
moyen d'isolation !
|
||||
|
||||
|
||||
### Stage 7 (bonus) : automatisation de l'environnement
|
||||
### Stage 5 (bonus) : automatisation de la création de l'environnement
|
||||
|
||||
LVM
|
||||
Pour moulinéter plusieurs étudiants en parallèle, vous allez avoir besoin de
|
||||
plusieurs environnements identiques. Plutôt que de recopier cet environnement,
|
||||
de le nettoyer, de le recréer, pour chaque étudiant, ajoutez à votre moulinette
|
||||
un support pour LVM : utiliser des *snapshots* pour figer votre environnement
|
||||
et le dupliquer facilement pour chaque étudiant.
|
||||
|
||||
L'usage est laissé à votre discrétion : vous pouvez ajouter un/des paramètres à
|
||||
votre moulette pour indiquer le volume LVM à utiliser ou le définir en dur ou
|
||||
encore séparer la création de l'environnement et de la snapshot initiale dans
|
||||
un programme distinct.
|
||||
|
||||
|
||||
## Modalité de rendu
|
||||
|
|
@ -82,8 +131,12 @@ Voici une arborescence type:
|
|||
|
||||
```
|
||||
login_x-TP3/questions.txt
|
||||
login_x-TP3/
|
||||
login_x-TP3/chroot/escape.c
|
||||
login_x-TP3/pseudofs/rev_kdb_leds.sh
|
||||
login_x-TP3/pseudofs/procinfo
|
||||
login_x-TP3/caps/view_caps
|
||||
login_x-TP3/cgroups/monitor
|
||||
login_x-TP3/cgroups/monitor_init
|
||||
login_x-TP3/mymoulette/README
|
||||
login_x-TP3/mymoulette/...
|
||||
```
|
||||
|
||||
|
||||
## Astuces
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue