Exécuter un programme dans un sandbox (firejail)
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
- Site Web de firejail : https://firejail.wordpress.com
- Guide pour firefox : https://firejail.wordpress.com/documentation-2/firefox-guide
- Page Wiki de ArchLinux: https://wiki.archlinux.org/index.php/Firejail
- Manuel utilisateur de firejail : http://man7.org/linux/man-pages/man1/firejail.1.html
- Manuel utilisateur de firecfg : http://man7.org/linux/man-pages/man1/firecfg.1.html
- Manuel utilisateur de firejail-users : http://man7.org/linux/man-pages/man5/firejail-users.5.html