SCOP d'ingénieurs experts du logiciel libre depuis 2004
+33 1 70 61 60 16

Isolation par Docker

Le linuxien prudent n'aime pas les surprises.

Notre prochain webinar

Le linuxien prudent n'aime pas les surprises. Pour limiter les surprises que peut faire une application, il faut tout simplement l'isoler.

Sans aller jusqu'à Bash (ahem...), ne pas vouloir que Skype, Chrome, Steam, Minecraft, ... et même Firefox voient le reste du système est plus que légitime.

La solution la plus traditionnelle est le classique chroot , facile à mettre en place, mais à la réputation controversée (surtout par les gens utilisant les jails de BSD).

Apparmor propose aussi sa solution, mais sans faire rêver plus que ça.

Niveau buzzword, ces technologies sont quand même à la ramasse, pourquoi ne pas utiliser tout bêtement Docker?

Docker est tout simplement un outil conçu pour lancer une application dans un contexte (RAM, CPU, disque, réseau), de manière simple et économe. Personne ne vous oblige a y accoler le mot Cloud, que vous avez déjà tant de mal à expliquer.

Isoler une application consiste à ne lui donner accès qu'aux services dont elle a besoin, et de manière explicite.

Firefox

Firefox utilise une interface graphique, et a donc besoin de X11.

X11vnc est utilisable depuis un docker, mais c'est quand même moche comme approche. Lancer un X11 dans un Docker est faisable, mais c'est une idée atroce. Non, le plus simple est de donner accès à la socket X11 de l'hôte au container : -v /tmp/.X11-unix:/tmp/.X11-unix Pour ne pas avoir de soucis de droits, il faut que l'utilisateur Docker utilise les mêmes uid/gid que l'hôte.

Firefox fait du bruit, en natif depuis HTML5, avec l'aide sournois de Flash depuis longtemps.

Pulseaudio propose un mode client/serveur, il faut donc configurer l'hôte comme serveur : /etc/pulse/system.pa :

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.17.0.0/16 

172.17.0.0/16 est le réseau Docker par défaut.

Dans le container une simple variable d'environement précise où se trouve le serveur : PULSE_SERVER=tcp:172.17.42.1

Firefox écrit des choses sur le disque dur.

Au-delà des prévisibles téléchargements, Firefox conserve un historique, des mots de passe, et installe même parfois des plug-ins.

Il suffit de mettre à disposition les dossiers suivants

  • ~/.mozilla : Le profil firefox (historique, mots de passe, plug-ins)
  • ~/Downloads : Les téléchargements
  • ~/.cache/mozilla : Le cache de firefox

Tout cela nous donne comme Dockerfile :

FROM debian:sid # Base install RUN echo "deb http://ftp.fr.debian.org/debian/ sid main contrib" > /etc/apt/sources.list && \ apt-get -q update && \ apt-get -q upgrade -y && \ apt-get -q install -y adduser ca-certificates iceweasel pulseaudio && \ apt-get -q install -y flashplugin-nonfree # Add user (same name, uid, gid !!) RUN adduser --disabled-password --gecos hybris hybris # Prepare env USER hybris ENV DISPLAY :0.0 ENV PULSE_SERVER tcp:172.17.42.1 ENV LC_ALL C.UTF-8 # Launch ssh (used to open links from outside firefox) CMD iceweasel 

Un petit script pour avoir son pseudo firefox local:

#! /bin/bash docker run -d --name firefox -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /home/hybris/.mozilla:/home/hybris/.mozilla \ -v /home/hybris/Downloads:/home/hybris/Downloads \ hybris:firefox # firefox container should be launched before using this script if ! docker inspect firefox > /dev/null 2>&1; then docker run --rm -d --name firefox -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /home/hybris/.mozilla:/home/hybris/.mozilla \ -v /home/hybris/Downloads:/home/hybris/Downloads hybris:firefox fi if ! docker top firefox > /dev/null 2>&1; then docker start firefox fi if [ $# -ne 0 ]; then for i in $@; do docker exec firefox iceweasel "$i" done fi 

Notons l'usage de docker exec apparut dans la version 1.3, qui évite de faire des choses très sales avec du ssh.

Voila la recette pour Firefox, il ne reste plus qu'à décliner pour les autres : Les Dockerfiles d'Hybris


Mathieu Lecarme

Inscrivez-vous à notre newsletter

Mieux comprendre le monde du DevOps et de l'administration système.

Abonnez-vous à notre newsletter

Hébergement & Infogérance

  • ✓ Service Astreinte 24h/7j/365
  • ✓ Supervision, monitoring & Alertes
  • ✓ Mises à jour en continu
  • ✓ Certificat SSL letsencrypt
  • ✓ Hébergement dédié sécurisé en France
  • ✓ Backup vers datacenter distant
Découvrir notre offre

Expertise Technologique

Notre équipe possède une vaste expertise technologique.