Cet article aborde brièvement comment exécuter une application dans un bac à sable (ou sandbox en anglais). L’intérêt ici est d’exécuter un programme en limitant les impacts :

  • d’une attaque sur un service ou un logiciel (piratage)
  • de l’exécution d’un logiciel de source non fiable (ex. logiciel propriétaire)

Pour cela cet article propose d’utiliser firejail, un outil qui permet essentiellement de :

  • limiter l’accès aux fichiers du système ($HOME mais aussi des fichiers spéciaux de /dev, /proc et /sys)
  • restreindre les appels systèmes et les capabilities de Linux
  • restreindre les protocoles réseaux

La configuration et l’utilisation de firejail est cependant très facile car cet outil est fourni avec des profils prédéfinis.

Installation de firejail

Un paquet existe pour la plupart des distributions Linux. Dans mon cas, sous ArchLinux :

albinou@pc:~$ pacman -S firejail

Il est désormais possible de lancer n’importe quel programme avec la configuration par défaut (définie dans /etc/firejail/default.profile) :

albinou@pc:~$ firejail echo 'Hello world!'
Reading profile /etc/firejail/default.profile
[...]
Hello world!

Parent is shutting down, bye...

Profils firejail

La configuration par défaut n’est pas très limitante. Elle n’a notamment aucune restriction sur l’espace disque de $HOME qui peut contenir des données sensibles.

Heureusement pour nous, firejail fournit de nombreux profils par défaut. Ils se trouvent dans /etc/firejail/ et il en existe un notamment pour le navigateur firefox. Il suffit de lancer firejail firefox pour que cette configuration soit utilisée. Cette configuration permet notamment de ne donner accès qu’au répertoire ~/Downloads ainsi qu’au répertoire ~/.mozilla contenant la configuration de firefox.

Pour valider que l’instance de firefox est corrctement lancée dans une sandbox, il est possible de lancer la commande suivante :

albinou@pc:~$ firejail --list
6423:albinou::/usr/bin/firejail /usr/bin/firefox

Utilisation de firejail par défaut

Pour que firejail soit utilisé automatiquement (sans avoir besoin de l’indiquer sur la ligne de commande), il suffit de créer un lien symbolique vers /usr/bin/firejail dans /usr/local/bin/ avec le nom du programme (qui doit être le même que le nom du profil) :

albinou@pc:~$ sudo ln -s /usr/bin/firejail /usr/local/bin/firefox

Attention alors à bien positionner la variable $PATH pour que les programmes de /usr/local/bin/ soient prioritaires sur ceux de /usr/bin/.

Pour créer automatiquement un lien symbolique pour chaque application dont la configuration existe dans /etc/firejail/, il suffit d’appeler firecfg :

albinou@pc:~$ sudo firecfg

Cette commande va donc créer les liens symboliques dans /usr/local/bin/ mais va également créer un fichier /etc/firejail/firejail.users listant les utilisateurs pour lesquels firejail va être utilisé. Pour utiliser firejail pour tous les utilisateurs, le plus simple est de supprimer ce fichier (cf. man 5 firejail-users pour plus d’info) :

albinou@pc:~$ sudo rm /etc/firejail/firejail.users

Ressources