virli/slides/slides.md

240 lines
4.2 KiB
Markdown
Raw Normal View History

2014-11-26 16:35:46 +00:00
% Virtualisation légère
% Pierre-Olivier Mercier
% Samedi 29 novembre 2014
# Historique
## Rappels sur la virtualisation classique
### Prémices
#### IBM 370
* une super machine !
### Vocabulaire
#### Définitions
* Machine hôte/host machine
* Machine invité/guest machine
#### Virtualisation vs. émulation
* Émulation : simulation logiciel de matériel (potentiellement une architecture différente) : pas d'accès direct au matériel ;
* Virtualisation : accès direct, mais restrint au matériel.
* QEMU
* Bochs
#### Technologies de virtualisation matérielle
* Intel VT-x/AMD-V/ARM Virtualization Extensions
* partitionne le processeur pour exécuter plusieurs système d'exploitation via le même processeur.
### Pourquoi virtualiser ?
####
* Réduction des coûts ;
* facilité de migration (répartition de charge, panne hardware, ...) ;
### Paravirtualisation
#### Caractéristiques
* Nécessite un noyau patché ;
* l'hôte expose une API accessible aux invités ;
* les invités accèdent au matériel via l'API de l'hôte.
* Xen
### Hyperviseurs
Contrôle l'utilisation faite des ressources de la machine hôte par les machines virtuelles.
#### Type 1
* L'hyperviseur contrôle directement le matériel ;
* Tous les systèmes lancés par la suite passent par l'hyperviseur.
* Microsoft Hyper-V, XenServer, VMware ESX, ...
#### Type 2
* L'hyperviseur s'appuie sur le système d'exploitation déjà lancé pour accéder au matériel ;
* Linux KVM, VirtualBox, BHyVe, ...
### Isolateurs
#### Caractéristiques
* Isolation faite par le noyau du système d'exploitation ;
* le noyau est partagé entre tous les invités.
### Versus chroot
* Simple isolation d'une partie du système de fichier ;
* pas de limitation sur les ressources utilisés ;
* pas d'isolation de l'arbre des processus ;
* implémentations douteuses (GrSecurity !).
## Les différentes technologies
### Points communs
#### Environnement virtualisé
* Arborescence de fichiers propre ;
* arbre de processus isolé ;
* comptes utilisateurs distincts ;
*
#### Sécurité
### Unix
#### Zones Solaris
* Lancé en 2005
*
#### Jails BSD
### GNU/Linux
#### OpenVZ/VServer
#### Linux Containers
### Et Windows ?
# GNU/Linux
## Capabilities
2014-11-28 16:55:56 +00:00
### Résumé
#### Historiquement
* Processus privilégiés : `UID == 0`.
* Processus non-privilégiés : `UID != 0`.
#### Depuis Linux 2.2
* Séparation des privilèges de l'UID 0.
* Chaque thread peut posséder ses propres capacités.
* `prctl(2)`, `execve(2)`,
### Principales capacités
#### Ne pas oublier de désactiver
* `CAP_MKNOD` : `mknod`
* `CAP_NET_RAW` : permet d'écouter tout le réseau
* `CAP_SYS_MODULE` : charge et décharge des modules noyau
* `CAP_SYS_RAWIO` : accès brut aux entrées/sorties
* `CAP_SYS_RESOURCE` : dépassement des quotas, utilisation de l'espace réservé, ...
* `CAP_SYS_TIME` : changer l'heure de la machine
* `CAP_SYS_ADMIN` : misc
#### Ne pas oublier d'activer
* ``
2014-11-26 16:35:46 +00:00
## Namespaces
2014-11-28 16:55:56 +00:00
### Isolation de parties du système
#### Mount Namespace
Isole la vue des partitions montées.
#### UTS Namespace
Identification du système : nom de machine et de domaine.
#### PID Namespace
Crée un arbre d'exécution parallèle où le premier process à être
exécuté devient le PID 1 de cet arbre.
#### Network Namespace
Isole la pile réseau ; crée un nouveau groupe d'interfaces.
#### User Namespace
Crée une liste d'utilisateurs et de groupe distincte.
#### IPC Namespace
Isolation des files de messages de communication interprocessus (IPC).
### Implémentation
```c
#include <sched.h>
#define STACKSIZE (1024*1024)
static char child_stack[STACKSIZE];
int clone_flags = CLONE_NEWNET | SIGCHLD;
pid_t pid = clone(do_execvp,
child_stack + STACKSIZE,
clone_flags,
&args);
```
2014-11-26 16:35:46 +00:00
## cgroups
2014-11-28 16:55:56 +00:00
### Freezer cgroup subsystem
### Device controller for cgroups
### CPU accounting cgroup subsystem
### Memory Resource Controller for Control Groups
### Block IO controller
### Device controller for cgroups
### Network priority cgroup
2014-11-26 16:35:46 +00:00
## LXC
## Docker
## Vagrant
## Hardening
# Réseau
2014-11-28 16:55:56 +00:00
http://containerops.org/2013/11/19/lxc-networking/
## empty
2014-11-26 16:35:46 +00:00
## phys
## vlan
## veth
## macvlan vepa
## macvlan bridge