Moulette 2018 !

This commit is contained in:
nemunaire 2018-11-07 12:23:01 +01:00
commit 33877c12ba
5 changed files with 194 additions and 67 deletions

View file

@ -1,4 +1,4 @@
### Palier 1 : Restreindre l'environnement (2 points)
## Palier 1 : Restreindre l'environnement (2 points) {.unnumbered}
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 utiliser les
@ -17,28 +17,28 @@ moulinette ne possède pas tous ces *CGroup*s, au lieu de planter, ne rien faire
n'est pas forcément une mauvaise solution.
### Palier 2 : Réduire les *capabilities* (2 points)
## Palier 2 : Réduire les *capabilities* (2 points) {.unnumbered}
Réduisez au maximum les *capabilities*, de telle sorte qu'il ne soit pas
possible de faire un ping dans l'environnement restreint :
<div lang="en-US">
```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# ping 9.9.9.9
PING 9.9.9.9 (9.9.9.9) 56(84) bytes of data.
64 bytes from 9.9.9.9: icmp_seq=1 ttl=56 time=3.93 ms
64 bytes from 9.9.9.9: icmp_seq=2 ttl=56 time=3.97 ms
^C
--- 9.9.9.9 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
42sh# ./mymoulette /bin/bash
bash# curl http://www.linuxcontainers.org/ | md5sum
c7d68d1cb4737125a84cd69f55add202
bash# ping 8.8.8.8
ping: icmp open socket: Permission denied
bash# ping 9.9.9.9
ping: icmp open socket: Permission denied
```
</div>
@ -48,14 +48,14 @@ Aidez-vous du visualisateur de *capabilities* de la partie 4, pour voir si vous
êtes sur la bonne voie.
### Palier 3 : Utilisable par un utilisateur (1 point)
## Palier 3 : Utilisable par un utilisateur (1 point) {.unnumbered}
Jouez avec les attributs étendus pour qu'un utilisateur non-privilégié puisse
exécuter votre moulinette. Ajoutez la/les commande(s) à votre Makefile ou
script d'installation.
### Création d'un environnement d'exécution minimal
## Création d'un environnement d'exécution minimal {.unnumbered}
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
@ -66,15 +66,40 @@ dans la partie sur les *chroot*.
sera seulement utile pour faire des tests.**
### Palier 4 : Isolation du pauvre (1 point)
## Palier 4 : Isolation du pauvre (1 point) {.unnumbered}
Nous n'avons pas encore vu de meilleure méthode pour mieux isoler
l'environnement que de faire un `chroot`, ajoutez à votre programme cette
isolation rudimentaire. Et rendez-vous au prochain cours pour avoir une
meilleure isolation !
<div lang="en-US">
```shell
42sh$ which firefox
/usr/bin/firefox
42sh# ./mymoulette ./newrootfs/ /bin/bash
bash# which firefox
which: no firefox in (/usr/bin:/usr/local/bin:/bin:/opt/bin)
```
</div>
### Palier 5 (bonus) : automatisation de la création de l'environnement (5 points)
## Palier 5 : seccomp (2 points) {.unnumbered}
Filtrez les appels systèmes de telle sorte qu'aucun programme exécuté dans
votre bac à sable ne puisse plus lancer les appels systèmes suivants :
* `nfsservctl(2)` ;
* `personality(2)` ;
* `pivot_root(2)` ;
* ...
N'hésitez pas à en utiliser d'autres pour vos tests ;)
Astuces : `seccomp(2)`, `seccomp_init(3)`, `seccomp_load(3)`, ...
## Palier bonus : Automatisation de la création de l'environnement (5 points) {.unnumbered}
Pour *moulinéter* plusieurs étudiants en parallèle, vous allez avoir besoin de
plusieurs environnements identiques. Plutôt que de recopier cet environnement,
@ -86,3 +111,7 @@ L'usage est laissé à votre discrétion : vous pouvez ajouter un/des paramètre
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.
Si votre noyau dispose d'un UnionFS (AUFS ou OverlayFS par exemple), ou que
vous disposez d'une partition `btrfs`, vous pouvez utiliser l'une de ces
méthodes pour ajouter une couche en écriture, à la place de LVM.