diff --git a/tutorial/3/Makefile b/tutorial/3/Makefile index b3fb0ed..3849eb4 100644 --- a/tutorial/3/Makefile +++ b/tutorial/3/Makefile @@ -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 \ diff --git a/tutorial/3/capabilities.md b/tutorial/3/capabilities.md new file mode 100644 index 0000000..ed65705 --- /dev/null +++ b/tutorial/3/capabilities.md @@ -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 +``` diff --git a/tutorial/3/cgroups.md b/tutorial/3/cgroups.md index 3be710b..0634fef 100644 --- a/tutorial/3/cgroups.md +++ b/tutorial/3/cgroups.md @@ -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 diff --git a/tutorial/3/chroot.md b/tutorial/3/chroot.md new file mode 100644 index 0000000..261e4c3 --- /dev/null +++ b/tutorial/3/chroot.md @@ -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`. diff --git a/tutorial/3/project.md b/tutorial/3/project.md index 353a781..14a2972 100644 --- a/tutorial/3/project.md +++ b/tutorial/3/project.md @@ -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 diff --git a/tutorial/3/pseudofs.md b/tutorial/3/pseudofs.md index 87c562a..13c8f25 100644 --- a/tutorial/3/pseudofs.md +++ b/tutorial/3/pseudofs.md @@ -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: