TP orthograf
This commit is contained in:
parent
fbd7a235e9
commit
356477228f
@ -1,11 +1,11 @@
|
|||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Les capabilities
|
Les *capabilities*
|
||||||
================
|
==================
|
||||||
|
|
||||||
## Présentation
|
## 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 :
|
processus :
|
||||||
|
|
||||||
* les processus *privilégiés* : dont l'identifiant de son utilisateur est 0 ;
|
* 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
|
## Les attributs de fichier étendus
|
||||||
|
|
||||||
Une grosse majorité des systèmes de fichiers (ext[234], XFS, btrfs, ...)
|
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
|
*étendus*, par opposition aux attributs *réguliers* qui sont réservés à l'usage
|
||||||
du système de fichiers).
|
du système de fichiers).
|
||||||
|
|
||||||
@ -116,10 +116,10 @@ system.posix_acl_access=0sgAAEAD/////AgAEOgDAEAA/////xAABAD////8=
|
|||||||
|
|
||||||
### `ping`
|
### `ping`
|
||||||
|
|
||||||
De la même manière que l'on peut définir de manière plus fine les droits
|
De la même manière que l'on peut définir de façon plus fine les droits d'accès
|
||||||
d'accès par utilisateur, un attribut de l'espace de nom *security* peut être
|
par utilisateur, un attribut de l'espace de nom *security* peut être défini
|
||||||
définit pour accroître les *capabilities* d'un processus lorsqu'il est lancé
|
pour accroître les *capabilities* d'un processus lorsqu'il est lancé par un
|
||||||
par un utilisateur non-privilégié. On peut alors voir le Setuid root comme
|
utilisateur non-privilégié. On peut alors voir le Setuid root comme
|
||||||
l'utilisation de cet attribut auquel on accroîtrait l'ensemble des
|
l'utilisation de cet attribut auquel on accroîtrait l'ensemble des
|
||||||
*capabilities*.
|
*capabilities*.
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ Utiliser les *cgroup*s
|
|||||||
|
|
||||||
Les *cgroup*s (pour *Control Group*s) permettent de collecter des statistiques
|
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
|
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
|
propriétés. Par exemple, il est possible leur imposer des limites d'utilisation
|
||||||
de ressources ou altérer leurs priorités.
|
de ressources ou d'altérer leur comportement.
|
||||||
|
|
||||||
|
|
||||||
## Premiers tests
|
## Premiers tests
|
||||||
@ -30,7 +30,7 @@ mount -t cgroup -o freezer none /sys/fs/cgroup/freezer/
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
Cette dernière commande monte le groupe de processus racine, pour le *cgroup*
|
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.
|
sous-groupes.
|
||||||
|
|
||||||
|
|
||||||
@ -83,10 +83,10 @@ adaptés.
|
|||||||
|
|
||||||
### Consultation de l'état
|
### Consultation de l'état
|
||||||
|
|
||||||
En affichant le contenu du dossier `virli`, nous pouvons constater que celui-ci
|
En affichant le contenu du dossier `virli`, nous pouvions constater que
|
||||||
contenait déjà un certain nombre de fichiers. Certain d'entre-eux sont en
|
celui-ci contenait déjà un certain nombre de fichiers. Certain d'entre-eux sont
|
||||||
lecture seule et permettent de lire des statistiques instantanées sur le groupe
|
en lecture seule et permettent de lire des statistiques instantanées sur le
|
||||||
; tandis que d'autres sont des propriétés que nous pouvons modifier.
|
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
|
Nous pouvons consulter l'état de gel du groupe en affichant le contenu du
|
||||||
fichier\newline `/sys/fs/cgroup/freezer/virli/freezer.state`.
|
fichier\newline `/sys/fs/cgroup/freezer/virli/freezer.state`.
|
||||||
@ -155,7 +155,7 @@ EOF
|
|||||||
```
|
```
|
||||||
</div>
|
</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
|
### Monitoring instantané vers la console
|
||||||
@ -165,16 +165,16 @@ mémoire utilisée par le groupe monitoré.
|
|||||||
|
|
||||||
* Arguments de la ligne de commande :
|
* Arguments de la ligne de commande :
|
||||||
- premier fils à lancer dans le groupe,
|
- premier fils à lancer dans le groupe,
|
||||||
- intervalle de temps entre deux rafraîchissement ;
|
- intervalle de temps entre deux rafraîchissements ;
|
||||||
* *cgroup* `memory`;
|
* *cgroup* `memory`;
|
||||||
* `memory.usage_in_bytes`.
|
* `memory.usage_in_bytes`.
|
||||||
|
|
||||||
Vous pouvez utiliser un programme comme `memhog` pour remplir rapidement votre
|
Vous pouvez utiliser un programme comme `memhog` pour remplir rapidement votre
|
||||||
mémoire.
|
mémoire.
|
||||||
|
|
||||||
Si vous n'avez pas le *cgroup* memory, il est possible qu'il ne soit pas activé
|
Si vous n'avez pas le *cgroup* *memory*, il est possible qu'il ne soit pas
|
||||||
par défaut par votre système. Si vous êtes dans ce cas, essayez d'ajouter
|
activé par défaut par votre système. Si vous êtes dans ce cas, essayez
|
||||||
`cgroup_enable=memory` à la ligne de commande de votre noyau.
|
d'ajouter `cgroup_enable=memory` à la ligne de commande de votre noyau.
|
||||||
|
|
||||||
|
|
||||||
### Monitoring vers InfluxDB
|
### 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.
|
(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
|
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
|
bons droits, tandis que le deuxième va effectuer le monitoring, sans privilèges
|
||||||
privilèges particuliers.
|
particuliers.
|
||||||
|
|
||||||
#### Exemple
|
#### Exemple
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ mkdir newroot
|
|||||||
### `busybox`
|
### `busybox`
|
||||||
|
|
||||||
Queques mots, pour commencer, à propos du projet Busybox : c'est un programme
|
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
|
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
|
*chroot*, car il n'a pas de dépendances. Nous pouvons donc tester notre
|
||||||
première isolation :
|
première isolation :
|
||||||
@ -83,7 +83,7 @@ environnement qui tient dans 300 MB.
|
|||||||
|
|
||||||
## Exercice
|
## 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">
|
<div lang="en-US">
|
||||||
```shell
|
```shell
|
||||||
|
@ -44,14 +44,14 @@ Device Drivers --->
|
|||||||
|
|
||||||
### Vérification via `menuconfig`
|
### Vérification via `menuconfig`
|
||||||
|
|
||||||
L'arbre ci-dessous correspond aux options qui seront *built-in* (signalée par
|
L'arbre ci-dessous correspond aux options qui seront *built-in* (signalées par
|
||||||
une `*`) ou installées en tant que module (signalée par un `M`). En effet,
|
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
|
chaque noyau Linux peut être entièrement personnalisé en fonction des options
|
||||||
et des pilotes que l'on voudra utiliser.
|
et des pilotes que l'on voudra utiliser.
|
||||||
|
|
||||||
Pour parcourir l'arbre des options du noyau, il est nécessaire d'avoir les
|
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
|
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 :
|
Dans les sources, on affiche la liste des options avec la commande :
|
||||||
|
|
||||||
|
@ -16,9 +16,9 @@ Gestion de la mémoire
|
|||||||
|
|
||||||
Sur le serveur `antares`, un serveur applicatif critique tourne aux côtés de sa
|
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
|
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
|
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é
|
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.
|
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
|
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
|
l'OOM-killer alors que le serveur applicatif utilise largement plus de mémoire
|
||||||
|
@ -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
|
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
|
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.
|
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
|
Réduisez au maximum les capabilities, de telle sorte qu'il ne soit pas possible
|
||||||
de faire un ping dans l'environnement restreint :
|
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.
|
ê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
|
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
|
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.**
|
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
|
Nous n'avons pas encore vu de meilleure méthode pour mieux isoler
|
||||||
l'environnement que de faire un `chroot`, ajouter à votre programme cette
|
l'environnement que de faire un `chroot`, ajouter à votre programme cette
|
||||||
isolation rudimentaire. Et rendez-vous au prochain cours pour avoir une
|
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,
|
plusieurs environnements identiques. Plutôt que de recopier cet environnement,
|
||||||
de le nettoyer, de le recréer, pour chaque étudiant, ajoutez à votre moulinette
|
de le nettoyer, de le recréer, pour chaque étudiant, ajoutez à votre moulinette
|
||||||
un support pour LVM : utiliser des *snapshots* pour figer votre environnement
|
un support pour LVM : utiliser des *snapshots* pour figer votre environnement
|
||||||
et le dupliquer facilement pour chaque étudiant.
|
et le dupliquer facilement pour chaque étudiant.
|
||||||
|
|
||||||
L'usage est laissé à votre discrétion : vous pouvez ajouter un/des paramètres à
|
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
|
encore séparer la création de l'environnement et de la snapshot initiale dans
|
||||||
un programme distinct.
|
un programme distinct.
|
||||||
|
@ -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 !
|
plomberie, n'hésitez pas à l'utiliser !
|
||||||
|
|
||||||
Gardez en tête que ce projet sera à continuer au prochain TP, où il sera
|
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.
|
||||||
|
@ -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.
|
sera pas pris en compte.
|
||||||
|
|
||||||
Par ailleurs, n'oubliez pas de répondre à
|
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
|
## Tarball
|
||||||
|
@ -85,7 +85,7 @@ Voici les notes retrouvées dans les derniers échanges avec le sous-traitant :
|
|||||||
</div>
|
</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
|
Le sous-traitant a laissé des images Docker sur le Docker Hub, vous pourrez
|
||||||
vous baser dessus pour commencer.
|
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
|
Maintenant que vous arrivez à lancer les images, rendez cela reproductible en
|
||||||
inscrivant tout ça dans un fichier YAML, compréhensible par `docker-compose` !
|
inscrivant tout ça dans un fichier YAML, compréhensible par `docker-compose` !
|
||||||
@ -126,7 +126,7 @@ Vous devriez avoir ces services :
|
|||||||
* `nginx` (ou `apache`, ...)
|
* `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
|
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.
|
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).
|
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
|
À 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
|
fichier `docker-compose.yml` puisse s'exécuter au sein d'un cluster de
|
||||||
plusieurs machines. Via `docker stack deploy`.
|
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
|
Comme indiqué dans les notes du prestataire, en production, le frontend se
|
||||||
trouve sur une machine distincte du backend.
|
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.
|
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
|
Vous avez indiqués des mots de passes bidons dans votre YAML ? Rangez les
|
||||||
informations sensibles au sein de
|
informations sensibles au sein de
|
||||||
|
Loading…
Reference in New Issue
Block a user