subject: follow tuto, theme + pandoc 2

This commit is contained in:
nemunaire 2018-11-16 04:03:19 +01:00
parent 0e98f229b8
commit 6eeec595f2
8 changed files with 187 additions and 176 deletions

View File

@ -1,15 +1,6 @@
include ../../tutorial/pandoc-opts.mk
SOURCES = subject.md project.md rendu.md end.md
PANDOCOPTS = --latex-engine=xelatex \
--standalone \
--normalize \
--smart \
-M lang=fr-FR \
-M fontsize=12pt \
-M papersize=a4paper \
-M mainfont="Linux Libertine O" \
-M monofont="Inconsolata" \
-M sansfont="Linux Biolinum O" \
--include-in-header=../../tutorial/header.tex
all: subject.pdf

View File

@ -92,7 +92,7 @@ Voici les notes retrouvées dans les derniers échanges avec le sous-traitant :
![Vue d'ensemble des échanges de données entre les services](FIC-overview.png)
### Palier 0 : Récupérer les images
### Palier 0 : Récupérer les images {-}
Le sous-traitant a laissé des images Docker sur le Docker Store, vous pourrez
vous baser dessus pour commencer.
@ -114,12 +114,14 @@ Durant la durée du projet, les images seront peut-être amenées à être mises
jour, si vous vous trouvez bloqué, commencez par vérifier que vous avez bien la
dernière version disponible de l'image :
```shell
docker pull nemunaire/fic-admin nemunaire/fic-backend nemunaire/fic-frontend
<div lang="en-US">
```bash
docker pull nemunaire/fic-admin nemunaire/fic-backend nemunaire/fic-frontend
```
</div>
### Palier 1 : `docker-compose.yml`
### Palier 1 : `docker-compose.yml` {-}
Maintenant que vous arrivez à lancer les images, rendez cela reproductible en
inscrivant tout ça dans un fichier YAML, compréhensible par `docker-compose` !
@ -133,7 +135,7 @@ Vous devriez avoir ces services :
* `nginx` (ou `apache`, ...).
### Palier 2 : retrouver les `Dockerfile`
### Palier 2 : retrouver les `Dockerfile` {-}
Maintenant que vous êtes en mesure de lancer le service, il serait temps de ne
plus dépendre d'une image que l'on ne peut plus modifier facilement.
@ -149,7 +151,7 @@ Arriverez-vous à générer des images plus propres que celles du prestataire
disparu ?!
#### Astuces
#### Astuces {-}
Les différents projets sont organisés au sein d'un
[dépôt monolithique](https://danluu.com/monorepo/). Les projets ont des
@ -157,9 +159,11 @@ dépendances entre les dossiers qui se trouvent à la racine (qui sont
l'équivalent de bibliothèques). Vous allez sans doute vouloir placer les trois
`Dockerfile` à la racine pour simplifier les étapes de construction des images :
<div lang="en-US">
```shell
docker image build --file Dockerfile-admin .
docker image build --file Dockerfile-admin .
```
</div>
Les
[*multi-stage builds*](https://docs.docker.com/engine/userguide/eng-image/multistage-build/)
@ -171,14 +175,14 @@ supporte cette syntaxe, vous pouvez ajouter des scripts et autant de
l'option de mettre à jour votre Docker !).
### Palier 3 : `fic-server.yml` prêt pour le déploiement
### Palier 3 : `fic-server.yml` prêt pour le déploiement {-}
À présent, faites les éventuelles adaptations nécessaires pour que votre
fichier `docker-compose.yml` puisse s'exécuter au sein d'un cluster de
plusieurs machines. Via `docker stack deploy`.
### Palier 4 : `fic-server.yml` prêt pour la production
### Palier 4 : `fic-server.yml` prêt pour la production {-}
Comme indiqué dans les notes du prestataire, en production, le frontend se
trouve sur une machine distincte du backend.
@ -188,7 +192,7 @@ données ! Il est fort probable que vous ayez à ajouter des services à votre
fichier YAML.
### Palier 5 (bonus) : `fic-server.yml` sécurisé
### Palier 5 (bonus) : `fic-server.yml` sécurisé {-}
Vous avez indiqués des mots de passes bidons dans votre YAML ? Rangez les
informations sensibles au sein de

View File

@ -3,18 +3,21 @@ title: Virtualisation légère -- Projet n^o^ 1
author: Pierre-Olivier *nemunaire* Mercier
institute: EPITA
date: EPITA -- SRS 2018
abstract: |
M. Dessi, votre DSI, vient vous voir, paniqué : une grande
conférence se tient dans deux semaines, l'entreprise avait été
mandatée de longue date pour réaliser une interface d'animation pour
un des événements majeurs et cela fait un mois maintenant qu'il est
sans nouvelle du sous-traitant à qui cette tâche avait été
confiée. On ne peut pas attendre davantage, vous êtes dépêché pour
terminer le projet qui a été laissé en plan par le sous-traitant.
\vspace{1em}
Ce projet est à rendre à <virli@nemunai.re> au plus tard le jeudi 9
novembre 2017 à 8 h 42.
...
M. Dessi, votre DSI, vient vous voir, paniqué : une grande conférence se tient
dans deux semaines, l'entreprise avait été mandatée de longue date pour
réaliser une interface d'animation pour un des événements majeurs et cela fait
un mois maintenant qu'il est sans nouvelle du sous-traitant à qui cette tâche
avait été confiée. On ne peut pas attendre davantage, vous êtes dépêché pour
terminer le projet qui a été laissé en plan par le sous-traitant.
/newpage
\vspace{1em}
Ce projet est à rendre à <virli@nemunai.re> au plus tard le jeudi 9 novembre
2017 à 8 h 42.
\tableofcontents
# Paliers

View File

@ -1,15 +1,6 @@
include ../../tutorial/pandoc-opts.mk
SOURCES = subject.md project-part1.md project-part2.md sample.md rendu.md end.md
PANDOCOPTS = --latex-engine=xelatex \
--standalone \
--normalize \
--smart \
-M lang=fr-FR \
-M fontsize=12pt \
-M papersize=a4paper \
-M mainfont="Linux Libertine O" \
-M monofont="FantasqueSansMono-Regular" \
-M sansfont="Linux Biolinum O" \
--include-in-header=../../tutorial/header.tex
all: subject.pdf

View File

@ -1,4 +1,4 @@
## Palier 1 : Restreindre l'environnement (2 points) {.unnumbered}
## Palier 1 : Restreindre l'environnement (2 points) {-}
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,56 +17,56 @@ 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) {.unnumbered}
## Palier 2 : Réduire les `capabilities` (2 points) {-}
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 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# 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
c7d68d1cb4737125a84cd69f55add202
42sh# ./mymoulette /bin/bash
bash# curl http://www.linuxcontainers.org/ | md5sum
c7d68d1cb4737125a84cd69f55add202
bash# ping 9.9.9.9
ping: icmp open socket: Permission denied
bash# ping 9.9.9.9
ping: icmp open socket: Permission denied
```
</div>
Astuces : `prctl(2)`, `capabilities(7)`, `capget(2)`, `capset(2)`, ...
**Astuces\ :** `prctl(2)`, `capabilities(7)`, `capget(2)`, `capset(2)`, ...
Aidez-vous du visualisateur de *capabilities* de la partie 4, pour voir si vous
êtes sur la bonne voie.
Aidez-vous du visualisateur de *capabilities* de la partie 4 du TP, pour voir
si vous êtes sur la bonne voie.
## Palier 3 : Utilisable par un utilisateur (1 point) {.unnumbered}
## Palier 3 : Utilisable par un utilisateur (1 point) {-}
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 {.unnumbered}
## Création d'un environnement d'exécution minimal {-}
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*.
dans la partie sur les `chroot`.
**Ne mettez pas cet environnement dans votre tarball de rendu, il vous
sera seulement utile pour faire des tests.**
## Palier 4 : Isolation du pauvre (1 point) {.unnumbered}
## Palier 4 : Isolation du pauvre (1 point) {-}
Nous n'avons pas encore vu de meilleure méthode pour mieux isoler
l'environnement que de faire un `chroot`, ajoutez à votre programme cette
@ -74,17 +74,17 @@ 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)
```
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 : seccomp (2 points) {.unnumbered}
## Palier 5 : seccomp (2 points) {-}
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 :
@ -96,10 +96,10 @@ votre bac à sable ne puisse plus lancer les appels systèmes suivants :
N'hésitez pas à en utiliser d'autres pour vos tests ;)
Astuces : `seccomp(2)`, `seccomp_init(3)`, `seccomp_load(3)`, ...
**Astuces\ :** `seccomp(2)`, `seccomp_init(3)`, `seccomp_load(3)`, ...
## Palier bonus : Automatisation de la création de l'environnement (5 points) {.unnumbered}
## Palier bonus : Automatisation de la création de l'environnement (5 points) {-}
Pour *moulinéter* plusieurs étudiants en parallèle, vous allez avoir besoin de
plusieurs environnements identiques. Plutôt que de recopier cet environnement,

View File

@ -1,4 +1,4 @@
## Palier 6 : Une vraie isolation (2 points) {.unnumbered}
## Palier 6 : Une vraie isolation (2 points) {-}
En plus du `chroot`, assignez de nouveaux *namespaces* au processus que vous
allez lancer : `cgroups`, `IPC`, `mount`, `net`, `PID`, `UTS`.
@ -6,10 +6,10 @@ allez lancer : `cgroups`, `IPC`, `mount`, `net`, `PID`, `UTS`.
Il est requis que le nouveau processus ne puisse pas s'échapper de ses
*namespaces* !
Astuce : `unshare(2)`.
**Astuce\ :** `unshare(2)`.
## Palier bonus : Révolution des utilisateurs (2 points) {.unnumbered}
## Palier bonus : Révolution des utilisateurs (2 points) {-}
Utilisez le *namespace* `user` pour vous permettre de ne plus avoir besoin de
lancer votre moulinette en tant que `root` ou avec plus de *capabilities* que
@ -19,7 +19,7 @@ Vous aurez besoin de déplacer le code écrit pour les premiers paliers (cgroups
caps, ...), après vous être dissocié de cet espace de noms.
## Palier 7 : Empêcher les fuites d'information (2 points) {.unnumbered}
## Palier 7 : Empêcher les fuites d'information (2 points) {-}
Démontez tous les systèmes de fichiers qui ne sont pas nécessaires au
fonctionnement de votre conteneur et remontez les partitions
@ -27,72 +27,78 @@ fonctionnement de votre conteneur et remontez les partitions
N'oubliez pas de remonter les systèmes de fichiers pour lesquels cette
opération est nécessaire afin de terminer l'étape d'isolation.
Astuce : `mount(2)`.
**Astuce\ :** `mount(2)`.
## Palier 7 bis : Volume attaché au code à moulinéter (1 point) {.unnumbered}
## Palier 7 bis : Volume attaché au code à moulinéter (1 point) {-}
Ajoutez une option à votre moulinette afin de lier le dossier (qui se trouve
sur la machine hôte) contenant le code d'un étudiant, à l'intérieur du
conteneur. Cette option est similaire à l'option `--volume`/`-v` de Docker :
conteneur. Cette option est similaire à l'option `--volume`/`-v` de Docker\ :
L'option devra attendre le répertoire contenant le code de l'étudiant, et le
monter dans `/home/student` :
<div lang="en-US">
```
42sh$ ./mymoulette ./newrootfs/ /bin/bash
42sh$ ./mymoulette ./newrootfs/ /bin/bash
bash# ls /home/student/
bash#
42sh$ ./mymoulette -v /var/lib/git/login_x/42sh/ ./newrootfs/ /bin/bash
bash# ls /var/lib/git/login_x/42sh/
ls: cannot access '/var/lib/git/login_x/42sh/': No such file or directory
42sh$ ls /var/lib/git/login_x/42sh/
src/ tests/ AUTHORS configure Makefile.am README TODO
42sh$ ./mymoulette -v /var/lib/git/login_x/42sh/ ./newrootfs/ /bin/bash
bash# ls /home/student/
src/ tests/ AUTHORS configure Makefile.am README TODO
src/ tests/ AUTHORS configure Makefile.am README TODO
bash#
```
</div>
Astuce : `mount(2)`, `mkdir(2)`.
**Astuce\ :** `mount(2)`, `mkdir(2)`.
## Palier 8 : Identification du conteneur (1 point) {.unnumbered}
## Palier 8 : Identification du conteneur (1 point) {-}
Maintenant que vous avez votre conteneur, personalisez-le un peu en lui donnant
un nom unique.
Astuce : `sethostname(2)`
**Astuce\ :** `sethostname(2)`
<div lang="en-US">
```
42sh$ ./mymoulette ./newrootfs/ hostname
ush9ukohh3Ch
42sh$ ./mymoulette ./newrootfs/ hostname
shie6aif2aiH
42sh$ ./mymoulette ./newrootfs/ hostname
ush9ukohh3Ch
42sh$ ./mymoulette ./newrootfs/ hostname
shie6aif2aiH
```
</div>
## Palier 9 : `pivot_root` (3 points) {.unnumbered}
## Palier 9 : `pivot_root` (3 points) {-}
Effectuez un `pivot_root(2)` de telle sorte qu'il ne reste plus de trace du
système de fichiers hôte.
Astuce : `pivot_root(2)`, `umount(2)`.
**Astuce\ :** `pivot_root(2)`, `umount(2)`.
Attention : vos filtres `seccomp` filtrant l'appel système `pivot_root(2)`,
vous devrez donc ne les appliquer qu'après cette étape.
**Attention\ :** vos filtres `seccomp` filtrant l'appel système
`pivot_root(2)`, vous devrez donc ne les appliquer qu'après cette étape.
## Palier 10 : Bac à sable connecté (2 points) {.unnumbered}
## Palier 10 : Bac à sable connecté (2 points) {-}
Partant d'une liste d'interfaces sur la machine hôte similaire à :
<div lang="en-US">
```
42sh$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 90:2b:34:5e:fa:a7 brd ff:ff:ff:ff:ff:ff
42sh$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 90:2b:34:5e:fa:a7 brd ff:ff:ff:ff:ff:ff
```
</div>
@ -100,28 +106,28 @@ Vous devrez pouvoir `ping`er votre conteneur depuis votre hôte :
<div lang="en-US">
```
42sh$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
[...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
[...]
3: veth3e06cad@if82: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
link/ether 42:a2:a0:89:54:ef brd ff:ff:ff:ff:ff:ff
inet 10.10.10.41/24 brd 10.10.10.255 scope global veth3e06cad
valid_lft forever preferred_lft forever
42sh$ ping 10.10.10.42
PING 10.10.10.42 (10.10.10.42) 56(84) bytes of data.
64 bytes from 10.10.10.42: icmp_seq=1 ttl=56 time=3.90 ms
64 bytes from 10.10.10.42: icmp_seq=2 ttl=56 time=3.78 ms
^C
--- 10.10.10.42 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 3.789/3.847/3.906/0.085 ms
42sh$ ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
[...]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
[...]
3: veth3e06cad@if82: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
link/ether 42:a2:a0:89:54:ef brd ff:ff:ff:ff:ff:ff
inet 10.10.10.41/24 brd 10.10.10.255 scope global veth3e06cad
valid_lft forever preferred_lft forever
42sh$ ping 10.10.10.42
PING 10.10.10.42 (10.10.10.42) 56(84) bytes of data.
64 bytes from 10.10.10.42: icmp_seq=1 ttl=56 time=3.90 ms
64 bytes from 10.10.10.42: icmp_seq=2 ttl=56 time=3.78 ms
^C
--- 10.10.10.42 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 3.789/3.847/3.906/0.085 ms
```
</div>
Dans l'exemple ci-dessus, l'interface dans le conteneur a l'IP `10.10.10.42`,
tandis que la machine hôte a l'IP `10.10.10.41`.
Astuces : vous pouvez utiliser la `libnetlink(3)` ou même faire des appels aux
programmes `ip(8)`, `brctl(8)`, ...
**Astuces\ :** vous pouvez utiliser la `libnetlink(3)` ou même faire des appels
aux programmes `ip(8)`, `brctl(8)`,\ ...

View File

@ -5,12 +5,12 @@ Exemples
<div lang="en-US">
```
42sh$ ./mymoulette -h
MyMoulette, the students' nightmare, now highly secured
Usage: ./mymoulette [-v student_workdir] environment moulette_prog [moulette_arg [...]]
environment is the path to the directory containing the new rootfs
moulette_prog will be the first program to be launched, must already be in the environment
student_workdir is the directory containing the code to grade
42sh$ ./mymoulette -h
MyMoulette, the students' nightmare, now highly secured
Usage: ./mymoulette [-v student_workdir] environment moulette_prog [moulette_arg [...]]
environment is the path to the directory containing the new rootfs
moulette_prog will be the first program to be launched, must already be in the environment
student_workdir is the directory containing the code to grade
```
</div>
@ -19,32 +19,32 @@ Exemples
<div lang="en-US">
```
42sh$ ip address show veth0l
2: veth0l@if82: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
link/ether 42:a2:a0:89:54:ef brd ff:ff:ff:ff:ff:ff
inet 10.10.10.41/24 brd 10.10.10.255 scope global veth3e06cad
valid_lft forever preferred_lft forever
42sh$ ip address show veth0l
2: veth0l@if82: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
link/ether 42:a2:a0:89:54:ef brd ff:ff:ff:ff:ff:ff
inet 10.10.10.41/24 brd 10.10.10.255 scope global veth3e06cad
valid_lft forever preferred_lft forever
42sh$ ./mymoulette ./newrootfs/ /usr/bin/ip address show veth0r
2: veth0r@if82: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
link/ether 42:a2:a0:89:55:ef brd ff:ff:ff:ff:ff:ff
inet 10.10.10.42/24 brd 10.10.10.255 scope global veth3e06cad
valid_lft forever preferred_lft forever
42sh$ ./mymoulette ./newrootfs/ /usr/bin/ip address show veth0r
2: veth0r@if82: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
link/ether 42:a2:a0:89:55:ef brd ff:ff:ff:ff:ff:ff
inet 10.10.10.42/24 brd 10.10.10.255 scope global veth3e06cad
valid_lft forever preferred_lft forever
42sh$ ping -c 1 10.10.10.42
PING 10.10.10.42 (10.10.10.42) 56(84) bytes of data.
64 bytes from 10.10.10.42: icmp_seq=1 ttl=56 time=3.90 ms
42sh$ ping -c 1 10.10.10.42
PING 10.10.10.42 (10.10.10.42) 56(84) bytes of data.
64 bytes from 10.10.10.42: icmp_seq=1 ttl=56 time=3.90 ms
--- 10.10.10.42 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 3.789/3.847/3.906/0.085 ms
--- 10.10.10.42 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 3.789/3.847/3.906/0.085 ms
```
</div>
<div lang="en-US">
```
42sh$ ./mymoulette ./newrootfs/ /usr/bin/curl http://www.linuxcontainers.org/ | md5sum
c7d68d1cb4737125a84cd69f55add202
42sh$ ./mymoulette ./newrootfs/ /usr/bin/curl http://www.linuxcontainers.org/ | md5sum
c7d68d1cb4737125a84cd69f55add202
```
</div>
@ -53,7 +53,23 @@ Exemples
<div lang="en-US">
```
42sh$ ./mymoulette ./newrootfs/ /bin/ping 9.9.9.9
ping: icmp open socket: Permission denied
42sh$ ./mymoulette ./newrootfs/ /bin/ping 9.9.9.9
ping: icmp open socket: Permission denied
```
</div>
<div lang="en-US">
```
42sh$ ./mymoulette ./newrootfs/ /usr/local/bin/view_caps
cap_user_header_t
-----------------
Version: 20080522
PID: 0
cap_user_data_t
---------------
effective: 0x0
permitted: 0x0
inheritable: 0x0
```
</div>

View File

@ -3,35 +3,35 @@ title: Virtualisation légère -- Projet
author: Pierre-Olivier *nemunaire* Mercier
institute: EPITA
date: EPITA -- SRS 2019
abstract: |
Le laboratoire des assistants a besoin de votre expertise afin de
renforcer la sécurité et la réactivité de son système de correction
automatisé.
Votre mission consistera à réaliser la partie d'isolation de la
moulinette des ACUs : dans un premier temps vous ferez en sorte de
restreindre un groupe de processus pour qu'il ne puisse pas faire de
déni de service sur notre machine ; puis dans une seconde partie,
vous vous assurerez de l'isolation de chaque étudiant.
\vspace{1em}
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 !
\vspace{1em}
Ce projet est à rendre à <virli@nemunai.re> au plus tard le dimanche
25 novembre 2018 à 23 h 42.
...
Le laboratoire des assistants a besoin de votre expertise afin de renforcer la
sécurité et la réactivité de son système de correction automatisé.
Votre mission consistera à réaliser la partie d'isolation de la moulinette des
ACUs : dans un premier temps vous ferez en sorte de restreindre un groupe de
processus pour qu'il ne puisse pas faire de déni de service sur notre machine ;
puis dans une seconde partie, vous vous assurerez de l'isolation de chaque
étudiant.
\vspace{1em}
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 !
\vspace{1em}
Ce projet est à rendre à <virli@nemunai.re> au plus tard le dimanche
25 novembre 2018 à 23 h 42.
\tableofcontents
\newpage
Paliers