4.2 KiB
% 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
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éseauCAP_SYS_MODULE
: charge et décharge des modules noyauCAP_SYS_RAWIO
: accès brut aux entrées/sortiesCAP_SYS_RESOURCE
: dépassement des quotas, utilisation de l'espace réservé, ...CAP_SYS_TIME
: changer l'heure de la machineCAP_SYS_ADMIN
: misc
Ne pas oublier d'activer
- ``
Namespaces
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
#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);
cgroups
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
LXC
Docker
Vagrant
Hardening
Réseau
http://containerops.org/2013/11/19/lxc-networking/