TP orthograf

This commit is contained in:
Pierre-Olivier Mercier 2017-10-23 22:25:51 +02:00 committed by nemunaire
parent fbd7a235e9
commit 356477228f
9 changed files with 46 additions and 46 deletions

View File

@ -1,11 +1,11 @@
\newpage
Les capabilities
================
Les *capabilities*
==================
## Présentation
Historiquement, dans la tradition UNIX, on distingait deux catégories de
Historiquement, dans la tradition UNIX, on distinguait deux catégories de
processus :
* les processus *privilégiés* : dont l'identifiant de son utilisateur est 0 ;
@ -60,7 +60,7 @@ besoin. Ainsi, `ping` pourrait se contenter de `CAP_NET_RAW`.
## Les attributs de fichier étendus
Une grosse majorité des systèmes de fichiers (ext[234], XFS, btrfs, ...)
permettent d'enregistrer, pour chaque fichier, des attributs (dits attributs
permet d'enregistrer, pour chaque fichier, des attributs (dits attributs
*étendus*, par opposition aux attributs *réguliers* qui sont réservés à l'usage
du système de fichiers).
@ -116,10 +116,10 @@ system.posix_acl_access=0sgAAEAD/////AgAEOgDAEAA/////xAABAD////8=
### `ping`
De la même manière que l'on peut définir de manière plus fine les droits
d'accès par utilisateur, un attribut de l'espace de nom *security* peut être
définit pour accroître les *capabilities* d'un processus lorsqu'il est lancé
par un utilisateur non-privilégié. On peut alors voir le Setuid root comme
De la même manière que l'on peut définir de façon plus fine les droits d'accès
par utilisateur, un attribut de l'espace de nom *security* peut être défini
pour accroître les *capabilities* d'un processus lorsqu'il est lancé par un
utilisateur non-privilégié. On peut alors voir le Setuid root comme
l'utilisation de cet attribut auquel on accroîtrait l'ensemble des
*capabilities*.

View File

@ -5,8 +5,8 @@ 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
propriétés, comme par exemple pour leur imposer des limitations d'utilisation
de ressources ou altérer leurs priorités.
propriétés. Par exemple, il est possible leur imposer des limites d'utilisation
de ressources ou d'altérer leur comportement.
## Premiers tests
@ -30,7 +30,7 @@ mount -t cgroup -o freezer none /sys/fs/cgroup/freezer/
</div>
Cette dernière commande monte le groupe de processus racine, pour le *cgroup*
*freezer*. Tous les dossiers contenu dans cette racine sont donc des
*freezer*. Tous les dossiers contenus dans cette racine sont donc des
sous-groupes.
@ -83,10 +83,10 @@ adaptés.
### Consultation de l'état
En affichant le contenu du dossier `virli`, nous pouvons constater que celui-ci
contenait déjà un certain nombre de fichiers. Certain d'entre-eux sont en
lecture seule et permettent de lire des statistiques instantanées sur le groupe
; tandis que d'autres sont des propriétés que nous pouvons modifier.
En affichant le contenu du dossier `virli`, nous pouvions constater que
celui-ci contenait déjà un certain nombre de fichiers. Certain d'entre-eux sont
en lecture seule et permettent de lire des statistiques instantanées sur le
groupe ; tandis que d'autres sont des propriétés que nous pouvons modifier.
Nous pouvons consulter l'état de gel du groupe en affichant le contenu du
fichier\newline `/sys/fs/cgroup/freezer/virli/freezer.state`.
@ -155,7 +155,7 @@ EOF
```
</div>
Vérifiez bien que la base de données `metrics` a bien été créée.
Vérifiez que la base de données `metrics` a bien été créée.
### Monitoring instantané vers la console
@ -165,16 +165,16 @@ mémoire utilisée par le groupe monitoré.
* Arguments de la ligne de commande :
- premier fils à lancer dans le groupe,
- intervalle de temps entre deux rafraîchissement ;
- intervalle de temps entre deux rafraîchissements ;
* *cgroup* `memory`;
* `memory.usage_in_bytes`.
Vous pouvez utiliser un programme comme `memhog` pour remplir rapidement votre
mémoire.
Si vous n'avez pas le *cgroup* memory, il est possible qu'il ne soit pas activé
par défaut par votre système. Si vous êtes dans ce cas, essayez d'ajouter
`cgroup_enable=memory` à la ligne de commande de votre noyau.
Si vous n'avez pas le *cgroup* *memory*, il est possible qu'il ne soit pas
activé par défaut par votre système. Si vous êtes dans ce cas, essayez
d'ajouter `cgroup_enable=memory` à la ligne de commande de votre noyau.
### Monitoring vers InfluxDB
@ -219,8 +219,8 @@ Maintenant, séparons notre script en deux parties afin qu'un utilisateur normal
(non-root) puisse utiliser la partie monitoring de notre script.
Un premier script doit s'occuper de créer le(s) *cgroup*s et lui attribuer les
bons droits, tandis que le deuxième va utiliser effectuer le monitoring, sans
privilèges particuliers.
bons droits, tandis que le deuxième va effectuer le monitoring, sans privilèges
particuliers.
#### Exemple

View File

@ -23,7 +23,7 @@ mkdir newroot
### `busybox`
Queques mots, pour commencer, à propos du projet Busybox : c'est un programme
*linké* statiquement, c'est-à-dire qu'il ne va pas chercher et charger de
*linké* statiquement, c'est-à-dire qu'il ne va pas chercher ni charger de
bibliothèque dynamique à son lancement. Il se suffit donc à lui-même dans un
*chroot*, car il n'a pas de dépendances. Nous pouvons donc tester notre
première isolation :
@ -83,7 +83,7 @@ environnement qui tient dans 300 MB.
## Exercice
Écrivons maintenant un programme dont le seul but est de s'échaper du `chroot`:
Écrivons maintenant un programme dont le seul but est de s'échapper du `chroot`:
<div lang="en-US">
```shell

View File

@ -44,14 +44,14 @@ Device Drivers --->
### Vérification via `menuconfig`
L'arbre ci-dessous correspond aux options qui seront *built-in* (signalée par
une `*`) ou installées en tant que module (signalée par un `M`). En effet,
L'arbre ci-dessous correspond aux options qui seront *built-in* (signalées par
une `*`) ou installées en tant que module (signalées par un `M`). En effet,
chaque noyau Linux peut être entièrement personnalisé en fonction des options
et des pilotes que l'on voudra utiliser.
Pour parcourir l'arbre des options du noyau, il est nécessaire d'avoir les
sources de celui-ci. Les dernières versions stables et encore maintenues sont
disponible sur la page d'accueil de <https://kernel.org>.
disponibles sur la page d'accueil de <https://kernel.org>.
Dans les sources, on affiche la liste des options avec la commande :

View File

@ -16,9 +16,9 @@ Gestion de la mémoire
Sur le serveur `antares`, un serveur applicatif critique tourne aux côtés de sa
base de données PostgreSQL. Le serveur applicatif étant connu pour produire un
grand nombre de leak, il est relancé chaque nuit. Le serveur applicatif tourne
en root car plus personne ne sait le paramétrer ; la base de données a été
installé par le système de paquets de la distribution.
grand nombre de *leak*, il est relancé chaque nuit. Le serveur applicatif tourne
en *root* car plus personne ne sait le paramétrer ; la base de données a été
installée par le système de paquets de la distribution.
Il arrive quelque fois que le serveur de base de données soit tué par
l'OOM-killer alors que le serveur applicatif utilise largement plus de mémoire

View File

@ -1,4 +1,4 @@
### Stage 1 : Restreindre l'environnement (2 points)
### 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,7 +17,7 @@ moulinette ne possède pas tous ces *CGroup*s, au lieu de planter, ne rien faire
n'est pas forcément une mauvaise solution.
### Stage 2 : Réduire les *capabilities* (2 points)
### 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 :
@ -48,7 +48,7 @@ Aidez-vous du visualisateur de *capabilities* de la partie 4, pour voir si vous
êtes sur la bonne voie.
### Stage 3 : Utilisable par un utilisateur (1 point)
### 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. Ajouter la/les commande(s) à votre Makefile ou
@ -66,23 +66,23 @@ dans la partie sur les *chroot*.
sera seulement utile pour faire des tests.**
### Stage 4 : Isolation du pauvre (1 point)
### 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`, ajouter à votre programme cette
isolation rudimentaire. Et rendez-vous au prochain cours pour avoir une
meilleure d'isolation !
meilleure isolation !
### Stage 5 (bonus) : automatisation de la création de l'environnement (5 points)
### Palier 5 (bonus) : automatisation de la création de l'environnement (5 points)
Pour moulinéter plusieurs étudiants en parallèle, vous allez avoir besoin de
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
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.

View File

@ -21,4 +21,4 @@ moment où vous n'utilisez pas une bibliothèque qui abstrait complètement cett
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.
principalement question de faire des appels systèmes.

View File

@ -10,7 +10,7 @@ envoyé à une autre adresse et/ou non signé et/ou reçu après la correction n
sera pas pris en compte.
Par ailleurs, n'oubliez pas de répondre à
[l'évaluation du cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=34).
[l'évaluation du cours](https://www.epitaf.fr/moodle/mod/quiz/view.php?id=40).
## Tarball

View File

@ -85,7 +85,7 @@ Voici les notes retrouvées dans les derniers échanges avec le sous-traitant :
</div>
### Pallier 0 : Récupérer les images
### Palier 0 : Récupérer les images
Le sous-traitant a laissé des images Docker sur le Docker Hub, vous pourrez
vous baser dessus pour commencer.
@ -112,7 +112,7 @@ docker pull nemunaire/fic-admin nemunaire/fic-backend nemunaire/fic-frontend
```
### Pallier 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` !
@ -126,7 +126,7 @@ Vous devriez avoir ces services :
* `nginx` (ou `apache`, ...)
### Pallier 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.
@ -164,14 +164,14 @@ scripts et autant de `Dockerfile` que nécessaire à la tarball (mais vous
devriez considérer l'option de mettre à jour votre Docker).
### Pallier 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`.
### Pallier 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.
@ -181,7 +181,7 @@ données ! Il est fort probable que vous ayez à ajouter des services à votre
fichier YAML.
### Pallier 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