fixup! First part wip
BIN
slides/JohnvonNeumann.gif
Normal file
After Width: | Height: | Size: 281 KiB |
BIN
slides/cntnr.png
Before Width: | Height: | Size: 304 KiB |
Before Width: | Height: | Size: 240 KiB |
@ -12,6 +12,7 @@
|
||||
> * Nom et domaine de la machine !
|
||||
> * IPC !
|
||||
> * Horloge ?
|
||||
> * Logs ?
|
||||
|
||||
|
||||
## Made in Linux
|
||||
@ -48,9 +49,29 @@ Limitation de ce que `root` peut faire.
|
||||
|
||||
## pour les nuls
|
||||
|
||||
### Mais Jamie, comment ça marche ?
|
||||
### Mais Jamy, comment ça marche ?
|
||||
|
||||
TODO screen C'est pas sorcier
|
||||
![cps.jpg]
|
||||
|
||||
----
|
||||
|
||||
#### Syscall
|
||||
|
||||
* `clone`
|
||||
* `unshare`
|
||||
* `setns`
|
||||
|
||||
. . .
|
||||
|
||||
```c
|
||||
int fd;
|
||||
|
||||
/* Get descriptor for namespace */
|
||||
fd = open("/proc/PID/ns/FILE", O_RDONLY);
|
||||
|
||||
/* Join that namespace */
|
||||
setns(fd, 0);
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
@ -58,24 +79,55 @@ TODO screen C'est pas sorcier
|
||||
|
||||
Sous-arbre de la racine.
|
||||
|
||||
* `pivot_root(2)`
|
||||
* Union FileSystems
|
||||
* Thin provisioning
|
||||
|
||||
#### Processus
|
||||
. . .
|
||||
|
||||
Premier processus contenu = PID 1.
|
||||
```
|
||||
PATH FILESYSTEM
|
||||
/ /dev/sda1
|
||||
├── dev
|
||||
├── proc
|
||||
├── sys
|
||||
├── usr
|
||||
└── var
|
||||
├── cache
|
||||
├── cntrs
|
||||
│ ├── toto /dev/sda5
|
||||
│ │ ├── dev
|
||||
│ │ ├── proc
|
||||
│ │ ├── sys
|
||||
│ │ └── usr
|
||||
│ └── virli /dev/sda6
|
||||
│ ├── dev
|
||||
│ ├── proc
|
||||
│ ├── sys
|
||||
│ └── usr
|
||||
├── log
|
||||
└── tmp
|
||||
```
|
||||
|
||||
### Le réseau ...
|
||||
|
||||
![sosreseau.jpg]
|
||||
|
||||
|
||||
### Le réseau ...
|
||||
|
||||
TODO Câbles mélangés
|
||||
|
||||
----
|
||||
|
||||
#### Interface physique
|
||||
|
||||
Facile ! Mais il en faut beaucoup.
|
||||
|
||||
. . .
|
||||
|
||||
#### VLAN
|
||||
|
||||
Un tag par conteneur. Routage **interne** par le switch en amont.
|
||||
|
||||
. . .
|
||||
|
||||
#### MAC-VLAN
|
||||
|
||||
* **VEPA :** tous les paquets sortants sortent, y compris ceux à destination
|
||||
@ -83,6 +135,8 @@ Facile ! Mais il en faut beaucoup.
|
||||
la machine.
|
||||
* **Bridge :** le noyau analyse les paquets avant de les transmettre.
|
||||
|
||||
. . .
|
||||
|
||||
#### Virtual Ethernet
|
||||
|
||||
Interfaces virtuelles connectées à un bridge.
|
||||
@ -96,15 +150,15 @@ Interfaces virtuelles connectées à un bridge.
|
||||
|
||||
#### LXC stable
|
||||
|
||||
Prêt pour la production depuis le XX 2014.
|
||||
Prêt pour la production depuis février 2014.
|
||||
|
||||
Attention à la configuration et aux erreur de capabilities !
|
||||
Attention à la configuration et aux erreur avec les `capabilities` !
|
||||
|
||||
. . .
|
||||
|
||||
#### Partage des systèmes de fichiers
|
||||
|
||||
Optimise l'utilisation du cache :-)
|
||||
Optimise l'utilisation du cache du système de fichiers :-)
|
||||
|
||||
. . .
|
||||
|
||||
|
BIN
slides/cps.jpg
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
slides/dmesg.png
Normal file
After Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 323 KiB |
BIN
slides/idea.jpg
Normal file
After Width: | Height: | Size: 30 KiB |
@ -2,13 +2,9 @@
|
||||
|
||||
## John von Neumann
|
||||
|
||||
### Un personnage important
|
||||

|
||||
|
||||
TODO ici une photo
|
||||
|
||||
---
|
||||
|
||||
#### John von Neumann
|
||||
. . .
|
||||
|
||||
About assembly language:
|
||||
|
||||
|
BIN
slides/logo-android.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
slides/logo-linux.png
Normal file
After Width: | Height: | Size: 458 KiB |
BIN
slides/logo-nixos.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
slides/logo-windows.png
Normal file
After Width: | Height: | Size: 152 KiB |
28
slides/os.md
@ -4,16 +4,14 @@
|
||||
|
||||
### ... un noyau ?
|
||||
|
||||
TODO Logos de différents noyaux
|
||||

|
||||

|
||||

|
||||
|
||||
|
||||
### ... le temps de boot ?
|
||||
|
||||
> * Initialisation du/des processeur(s) et de la mémoire ;
|
||||
> * détection du matériel ;
|
||||
> * préparation des interfaces pour l'userland ;
|
||||
> * montage du système de fichiers racine ;
|
||||
> * lancement de `/sbin/init`
|
||||
![dmesg.png]
|
||||
|
||||
. . .
|
||||
|
||||
@ -36,22 +34,18 @@ Eh oui !
|
||||
> * abstraction des ports ;
|
||||
> * sécurité (root, exploit, ...).
|
||||
|
||||
|
||||
## Les techniques d'isolation
|
||||
|
||||
### `chroot`
|
||||
> * `chroot`
|
||||
> * Virtualisation et paravirtualisation
|
||||
|
||||
* **Difficulté :** hardcore ;
|
||||
* **Sécurité :** douteuse ;
|
||||
* **Coûts :** élevés.
|
||||
----
|
||||
|
||||
|
||||
### Virtualisation et paravirtualisation
|
||||
|
||||
* **Difficulté :** débutant ;
|
||||
* **Sécurité :** OK ;
|
||||
* **Coûts :** réduits.
|
||||
* `chroot`
|
||||
* Virtualisation et paravirtualisation
|
||||
|
||||
|
||||
### Mais ...
|
||||
|
||||
TODO clipart lumière
|
||||
![idea.jpg]
|
||||
|
@ -3,16 +3,16 @@ slides.pdf
|
||||
[duration]
|
||||
180
|
||||
[notes]
|
||||
### 1
|
||||
### Accueil
|
||||
Bonjour
|
||||
Hésitez pas à poser des questions
|
||||
### 2
|
||||
### John von Neumann
|
||||
Commençons par parler de quelqu'un d'important...
|
||||
Pourquoi aurait-on besoin de gaspiller du temps de calcul scientifique si précieux pour générer du code binaire ?
|
||||
- 1 machine = 1 programme => perte de temps de calcul pendant les I/O
|
||||
=> Ordonnanceur rudimentaires : partager le temps de calcul entre les bloquages d'I/O
|
||||
=> problèmes : ex : partage de l'espace d'adressage (=> MMU)
|
||||
### 3
|
||||
### Est-ce bien nécessaire : un noyau ?
|
||||
- Gestion de la concurrence d'accès au matériel
|
||||
- Répartition du temps CPU entre les tâches
|
||||
- Gestion du contexte des tâches (mémoire, registres, context switch, ...)
|
||||
@ -20,26 +20,26 @@ Pourquoi aurait-on besoin de gaspiller du temps de calcul scientifique si préci
|
||||
- Diverses couches d'abstraction :
|
||||
- matériel : clavier/souris/...
|
||||
- FS
|
||||
### 4
|
||||
### Est-ce bien nécessaire : le temps de boot ?
|
||||
- bootloader: charge le noyau en mem et jump
|
||||
- détection du matériel
|
||||
- mise en place des interfaces : réseau, FS, nom de machine, utilisateurs, droits, permissions, ...
|
||||
- montage de la racine
|
||||
- /sbin/init
|
||||
### 5
|
||||
### Les techniques d'isolation : chroot
|
||||
Le noyau seul ne fait rien, il lui faut des programmes et des données.
|
||||
|
||||
Tous les programmes n'ont pas besoin de toutes les données.
|
||||
Mais certains programmes échangent des données entre-eux (IPC, socket, ...)
|
||||
Et s'il y a une vulnérabilité ?
|
||||
pourquoi partager les données de services qui ne communiquent pas entre eux ?
|
||||
### 7
|
||||
### Est-ce bien nécessaire : d'isoler ?
|
||||
- limitation quantité de RAM, BP réseau
|
||||
- allocation du temps de calcul par groupe (1 serveur peut avoir plusieurs process qui sont schedulés indépendamment = triche !)
|
||||
- DOS locaux => machine à genoux
|
||||
- plusieurs serveur web/ssh
|
||||
- sécu : droits root, exploit, ...
|
||||
### 8
|
||||
### Les techniques d'isolation : chroot
|
||||
DEMO chroot
|
||||
- complexe à mettre en œuvre
|
||||
on peut pas avoir 2 serveurs web/ssh
|
||||
@ -48,14 +48,18 @@ on peut pas avoir 2 serveurs web/ssh
|
||||
- arbre de process partagé
|
||||
- pas de limitation des ressources
|
||||
- coût : maj pas simples, monitoring peu précis (limitation des ports)
|
||||
### 9
|
||||
=> ok pour de la défense en profondeur
|
||||
Exemple : ING1 exams machine
|
||||
### Les techniques d'isolation : virtualisation/paravirtualisation
|
||||
- accès concurent au matos : périphériques émulés
|
||||
- VT-x/AMD-v
|
||||
- plusieurs serveurs sur le même port
|
||||
- limitation des ressources
|
||||
- non partage des ressources similaires : autant de noyau lancé que de services, FS non partagés
|
||||
### 10
|
||||
- partager le même noyau (KVM...), les FS identiques (on met à jour le système de base une seule)
|
||||
- on peut lancer différents OS/version
|
||||
- similaire dupliqué : autant de noyaux lancés que de services, FS non partagés, MAJ
|
||||
### Les techniques d'isolation : mais ...
|
||||
- partager le même noyau, avec KVM : tout existe déjà : ordonanceur
|
||||
- les FS identiques (on met à jour le système de base une seule)
|
||||
|
||||
* 1998 : Jails BSD
|
||||
* 2005 : Zones Solaris
|
||||
@ -64,40 +68,69 @@ on peut pas avoir 2 serveurs web/ssh
|
||||
* 2015 : Windows 10
|
||||
|
||||
On appel ça des conteneurs !
|
||||
### 11
|
||||
Que doit-on implémenter concrétement ?
|
||||
PAUSE ?
|
||||
### Made in Unix: Que doit-on isoler ?
|
||||
- matos : non, le noyau l'abstrait déjà (ex webcam/group video) mais limitation des ressources
|
||||
- processus, interfaces réseau et liste de partitions montées pour éviter l'espionnage et l'accès à des données sensibles
|
||||
- réseau :
|
||||
- réseau : iface, table de routage, ports, etc.
|
||||
- users, groups, nom de machine et IPC : pas de raison qu'ils soient partagés
|
||||
- horloge : non, la timezone peut changer
|
||||
### 12
|
||||
- horloge : non, la timezone est un fichier
|
||||
DEMO strace date => /etc/timezone
|
||||
- logs kernel prévu dans une prochaine version
|
||||
### Pour cette mission...
|
||||
Que doit-on implémenter concrétement ?
|
||||
- KVM fourni déjà plein de trucs
|
||||
- ordonanceur VM/process => groupe
|
||||
+ statistiques diverses pour limitation
|
||||
+ mécanisme pour avoir plusieurs structures similaires (point de montage, user, iface réseau)
|
||||
+ problématique de root : si on peut tout faire, on peut se balader partout...
|
||||
### Made in Linux
|
||||
- isoler plein de choses : Namespace
|
||||
DEMO make menuconfig
|
||||
DEMO namespace
|
||||
DEMO namespace UTS, PID, (user?)
|
||||
- limiter les ressources : cgroups
|
||||
DEMO make menuconfig
|
||||
DEMO limitation CPU
|
||||
DEMO limitation mémoire
|
||||
DEMO statistiques réseau
|
||||
- mais dans le monde Unix, root peut tout faire ... => capabilities
|
||||
- capabilities : ~40 : CAP_KILL, CAP_SYS_TIME
|
||||
DEMO capabilities
|
||||
### 13
|
||||
- crée listes distinctes ou ajoute des propriétés
|
||||
- FS : sous-arbre de la racine comme chroot + AUFS/OverlayFS (cache), LVM (thin provisioning)
|
||||
- Processus : premier lancé PID 1 (2 PID : in/out NS)
|
||||
### 14
|
||||
### Mais Jamy, comment ça marche ?
|
||||
- recopie de la structure du parent (UTS, mount)
|
||||
- création d'une nouvelle struct (network, PID, users, IPC)
|
||||
- réseau : 1 iface = 1 ns
|
||||
- processus : premier lancé PID 1 (2 PID : in/out NS)
|
||||
- chaque process est lié à des namespace /proc/PID/ns/*
|
||||
DEMO sudo ls -l /proc/1/ns/*
|
||||
+ ouvrir ces fichiers : récupérer fd sur NS
|
||||
### pour les nuls: SYSCALLS
|
||||
utilise 3 syscalls pour gérer les NS :
|
||||
- clone(2): nouveau process fils avec création de nouveau namespace en fonction des flags
|
||||
- unshare(2): nouveau namespace pour le process courant
|
||||
- setns(2): rejoindre un namespace existant
|
||||
+ second argument pour filtrer le type de namespace, 0 accepte tout
|
||||
### pour les nuls: FileSystem
|
||||
- sous-arbre de la racine
|
||||
- pivot_root: initramfs, racine d'une partition, pas d'autre FS monté sur celui qui va disparaître
|
||||
- UnionFS: peut avoir plusieurs couches
|
||||
+ cache les fichiers d'une même couche
|
||||
+ récemment intégré dans le kernel 3.18 (décembre)
|
||||
- Thin provisioning: allocation dynamique de l'espace disque
|
||||
### pour les nuls: le réseau
|
||||
- Réseau : pas évident :
|
||||
* 1 carte réseau = 1 seule IP
|
||||
* promiscuité
|
||||
* routage
|
||||
### pour les nuls: le réseau
|
||||
- iface physique : Ok
|
||||
- MAC-VLAN : chaque machine a une MAC différente (promiscuité filtrée par le noyau)
|
||||
2 modes : VEPA : tous les paquets sortent, le switch doit les renvoyer vers la même machine
|
||||
Bridge : le noyau analyse les paquets sortant avant transmission
|
||||
- veth : on partage une interface virtuelle entre l'hôte et l'invité et on relie le tout à un bridge.
|
||||
### 15
|
||||
LXC stable depuis
|
||||
Doit-on tout virtualiser ? avoir toutes les bibliothèques et fichiers de base (init, syslog, cron, sshd, ...) ?
|
||||
DEMO network namespace
|
||||
### MAIS !
|
||||
LXC stable depuis le 20 février 2014
|
||||
DEMO LXC busybox
|
||||
|
||||
Doit-on tout virtualiser ? avoir toutes les bibliothèques et fichiers de base (init, syslog, cron, sshd, ...) ?
|
||||
!!! QUESTIONS + PAUSE !!!
|
||||
|
BIN
slides/sosreseau.jpg
Normal file
After Width: | Height: | Size: 762 KiB |