diff --git a/slides/JohnvonNeumann.gif b/slides/JohnvonNeumann.gif new file mode 100644 index 0000000..9c0f1cf Binary files /dev/null and b/slides/JohnvonNeumann.gif differ diff --git a/slides/cntnr.png b/slides/cntnr.png deleted file mode 100644 index 9540574..0000000 Binary files a/slides/cntnr.png and /dev/null differ diff --git a/slides/cntrapp.png b/slides/cntrapp.png deleted file mode 100644 index b325847..0000000 Binary files a/slides/cntrapp.png and /dev/null differ diff --git a/slides/containers.md b/slides/containers.md index adaf1ce..e04aec5 100644 --- a/slides/containers.md +++ b/slides/containers.md @@ -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 :-) . . . diff --git a/slides/cps.jpg b/slides/cps.jpg new file mode 100644 index 0000000..9139845 Binary files /dev/null and b/slides/cps.jpg differ diff --git a/slides/dmesg.png b/slides/dmesg.png new file mode 100644 index 0000000..88519d0 Binary files /dev/null and b/slides/dmesg.png differ diff --git a/slides/hyperv.png b/slides/hyperv.png deleted file mode 100644 index 0371719..0000000 Binary files a/slides/hyperv.png and /dev/null differ diff --git a/slides/idea.jpg b/slides/idea.jpg new file mode 100644 index 0000000..6357c32 Binary files /dev/null and b/slides/idea.jpg differ diff --git a/slides/intro.md b/slides/intro.md index d3a2608..56d0d07 100644 --- a/slides/intro.md +++ b/slides/intro.md @@ -2,13 +2,9 @@ ## John von Neumann -### Un personnage important +![John von Neumann](JohnvonNeumann.gif) -TODO ici une photo - ---- - -#### John von Neumann +. . . About assembly language: diff --git a/slides/logo-android.png b/slides/logo-android.png new file mode 100644 index 0000000..748df3e Binary files /dev/null and b/slides/logo-android.png differ diff --git a/slides/logo-linux.png b/slides/logo-linux.png new file mode 100644 index 0000000..01ed9df Binary files /dev/null and b/slides/logo-linux.png differ diff --git a/slides/logo-nixos.png b/slides/logo-nixos.png new file mode 100644 index 0000000..68cbb1d Binary files /dev/null and b/slides/logo-nixos.png differ diff --git a/slides/logo-windows.png b/slides/logo-windows.png new file mode 100644 index 0000000..410e131 Binary files /dev/null and b/slides/logo-windows.png differ diff --git a/slides/os.md b/slides/os.md index f2004e7..3bb0c8e 100644 --- a/slides/os.md +++ b/slides/os.md @@ -4,16 +4,14 @@ ### ... un noyau ? -TODO Logos de différents noyaux +![Linux](logo-linux.png) +![Windows](logo-windows.png) +![Android](logo-android.png) ### ... 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] diff --git a/slides/slides.pdfpc b/slides/slides.pdfpc index 5847995..6f97a09 100644 --- a/slides/slides.pdfpc +++ b/slides/slides.pdfpc @@ -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 !!! diff --git a/slides/sosreseau.jpg b/slides/sosreseau.jpg new file mode 100644 index 0000000..cd6d636 Binary files /dev/null and b/slides/sosreseau.jpg differ