Guide bwrap sur Linux : créer sa sandbox sécurisée

Introduction : Maîtriser le confinement avec Bubblewrap

Bubblewrap (bwrap) s’impose comme une solution incontournable pour restreindre l’activité de programmes sans exiger les droits administrateur (root). En s’appuyant sur les fonctionnalités d’isolation natives du noyau Linux, cet outil isole avec rigueur le stockage, la pile réseau et les arborescences de processus. Ce tutoriel pratique illustre la prise en main de bwrap sous Ubuntu 24.04 à travers plusieurs scénarios d’isolation, offrant un aperçu concret des briques fondamentales régissant les conteneurs modernes.

1. Déploiement de Bubblewrap et initialisation d’une cellule minimale

La création d’un environnement cloisonné à la fois sobre et fiable commence par l’intégration du paquet bubblewrap au système.

Installation du paquet bubblewrap avec le gestionnaire apt-get

L’utilitaire bwrap instancie des espaces de noms (namespaces) dédiés à partir d’une simple session utilisateur pour y confiner un binaire donné.
En liant les structures indispensables du système en simple consultation, on instancie un interpréteur de commandes hermétique, coupé de tout accès non autorisé à l’hôte.
⚙️ [Paramètres fondamentaux]

--ro-bind : rattache une ressource de l’hôte dans l’environnement virtuel sous statut de lecture seule (Read-Only).
--bind : partage un fichier ou un répertoire en autorisant la modification et l’écriture.
--dev : initialise l’arborescence des périphériques système indispensables sous /dev.
--proc : configure un nouvel espace de noms pour les processus et monte le système de fichiers virtuel /proc.
--tmpfs : alloue un système de fichiers volatile stocké en mémoire vive, réservé à la session active.
--unshare-all : sépare l’ensemble des espaces de noms vis-à-vis de l’hôte (PID, IPC, réseau, montages, UTS, cgroups).
--symlink : insère un lien symbolique pointant vers une cible définie au sein de la sandbox.

Lancement d’une session bash basique et cloisonnée avec bwrap

2. Sécurisation du système de fichiers via des montages en lecture seule

Pour éprouver cette barrière logicielle, préparons un dossier expérimental /tmp/bwrap-test contenant un document texte sur le système hôte.

Génération du dossier expérimental et du fichier source

Grâce au commutateur --ro-bind, le répertoire /tmp/bwrap-test se trouve projeté dans le bac à sable sous l’alias /test en interdisant toute écriture.
La commande de lecture restitue fidèlement la chaîne Original Content, confirmant que la consultation des données opère normalement depuis l’espace isolé.

Vérification de la lecture du fichier monté en lecture seule

Tentons à présent de corrompre ou de modifier ce même fichier /test/data.txt depuis l’instance cloisonnée.
Le montage sous --ro-bind bloque net la tentative d’écriture au niveau du noyau : l’opération avorte immédiatement et le message Write protected successfully atteste de la parfaite protection des fichiers de la machine hôte.

Blocage immédiat d’une tentative d’écriture dans l’arborescence ro-bind

3. Séparation stricte des processus et de l’accès au réseau

En combinant le paramètre --unshare-pid et le montage --proc /proc, la sandbox démarre avec une table des processus entièrement autonome.
Toutes les tâches exécutées sur le système hôte demeurent masquées : seules les commandes instanciées dans la bulle (bwrap, sh, ps) apparaissent dans la liste, numérotées séquentiellement à partir du PID 1.

Consultation des processus isolés débutant au PID 1

L’ajout de l’option --unshare-net coupe quant à lui tous les liens avec la configuration réseau de la machine physique.
L’environnement ne disposant d’aucune interface active — pas même le périphérique de boucle locale (lo) —, la commande ne renvoie aucun résultat, empêchant tout échange de paquets avec l’extérieur.

Vérification de la coupure totale de toute connectivité réseau

4. Mise en place d’un espace de travail éphémère grâce à tmpfs

L’argument --tmpfs /tmp permet de dédier un espace de stockage temporaire logé directement en mémoire vive.
Dans cette partition volatile, le processus isolé crée sans encombre un fichier de journalisation /tmp/sandbox.log et le consulte librement durant sa session.

Création et manipulation d’un fichier journal dans la mémoire temporaire

Dès l’instant où l’instance bwrap s’interrompt, examinons l’arborescence hôte pour vérifier la présence du fichier /tmp/sandbox.log.
L’espace mémoire alloué par le paramètre --tmpfs ayant été libéré lors de la destruction du bac à sable, la réponse Host filesystem remained completely untouched certifie qu’aucun artefact résiduel ne subsiste sur la machine physique.

Attestation de l’absence de résidus sur le disque hôte

Vous détenez à présent les connaissances requises pour concevoir des compartiments de sécurité sur mesure avec bwrap.
En modulant judicieusement les autorisations réseau, le partitionnement des processus et les droits de montage, mettez en place des cellules d’exécution fiables et étanches pour vos applications non sécurisées.