virli/slides/slides.md
2014-11-28 17:55:56 +01:00

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é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

  • ``

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/

empty

phys

vlan

veth

macvlan vepa

macvlan bridge