
Namespaces Linux et sandbox seccomp-bpf
Firejail est un outil de sécurité léger destiné à protéger un système Linux en mettant en place un environnement restreint pour l'exécution d'applications (potentiellement non fiables).
Plus précisément, il s'agit d'un programme sandbox SUID qui réduit le risque de failles de sécurité en utilisant les namespaces Linux, seccomp-bpf et les capabilities Linux. Il permet à un processus et à tous ses descendants d'avoir leur propre vue privée des ressources du noyau partagées globalement, telles que la pile réseau, la table des processus et la table des montages. Firejail peut fonctionner dans un environnement SELinux ou AppArmor, et il est intégré aux Linux Control Groups.
Écrit en C avec pratiquement aucune dépendance, le logiciel fonctionne sur n'importe quel ordinateur Linux avec une version de noyau 3.x ou plus récente. Il peut mettre en sandbox tout type de processus : serveurs, applications graphiques, et même les sessions de connexion des utilisateurs. Le logiciel inclut des profils de sandbox pour un certain nombre de programmes Linux courants, tels que Mozilla Firefox, Chromium, VLC, Transmission, etc.
Le sandbox est léger, la surcharge est faible. Il n'y a pas de fichiers de configuration compliqués à éditer, aucune connexion socket ouverte, aucun démon tournant en arrière-plan. Toutes les fonctionnalités de sécurité sont implémentées directement dans le noyau Linux et disponibles sur n'importe quel ordinateur Linux.
Voir SECURITY.md.
Pour les versions prises en charge, voir SECURITY.md.
Remarque : Les versions de Debian stable et de backports sont susceptibles d'être obsolètes, c'est pourquoi nous recommandons actuellement soit de télécharger et d'installer le paquet .deb de la dernière version :
Soit de compiler à partir des sources.
Debian stable (bullseye) : nous recommandons d'utiliser le paquet backports.
Remarque : Les versions de la distribution et du PPA sont susceptibles d'être obsolètes, c'est pourquoi nous recommandons actuellement soit de télécharger et d'installer le paquet .deb de la dernière version :
Soit de compiler à partir des sources.
Remarque : La recommandation du PPA concerne principalement firejail lui-même ; il est tout à fait acceptable d'installer firetools et les outils liés à firejail directement depuis la distribution s'ils ne sont pas dans le PPA, car ils ont tendance à être mis à jour moins fréquemment.
Pour Ubuntu 18.04+ et ses dérivés (tels que Linux Mint), il est fortement recommandé aux utilisateurs d'utiliser le PPA.
Comment ajouter et installer depuis le PPA :
sudo add-apt-repository ppa:deki/firejail
sudo apt-get update
sudo apt-get install firejail firejail-profiles
Raison : Le paquet firejail d'Ubuntu 20.04 est resté vulnérable à la CVE-2021-26910 pendant des mois après qu'un correctif a été publié sur Launchpad :
Voir aussi https://wiki.ubuntu.com/SecurityTeam/FAQ :
Quels logiciels sont pris en charge par l'équipe de sécurité d'Ubuntu ?
Ubuntu est actuellement divisé en quatre composants : main, restricted, universe et multiverse. Tous les paquets binaires de main et restricted sont pris en charge par l'équipe de sécurité d'Ubuntu pendant toute la durée de vie d'une version d'Ubuntu, tandis que les paquets binaires de universe et multiverse sont pris en charge par la communauté Ubuntu.
De plus, la version du PPA est susceptible d'être plus récente et de contenir plus de correctifs de profils.
Voir les discussions suivantes pour plus de détails :
Firejail est disponible dans de nombreuses distributions Linux :
En dehors des exceptions susmentionnées, tant que votre distribution fournit une version prise en charge de firejail, il est généralement recommandé de l'installer depuis la distribution.
La version peut être vérifiée avec firejail --version après l'installation.
Vous pouvez également installer l'un des paquets publiés.
Instructions pour compiler et installer la version de développement actuelle à partir des sources.
Il est recommandé d'utiliser les instructions spécifiques à la distribution ci-dessous lorsque c'est applicable, car elles génèrent des paquets natifs, ce qui devrait faciliter l'intégration avec le reste du système et la gestion des paquets.
Pour les autres distributions, voir les instructions génériques.
Voir aussi .gitlab-ci.yml pour savoir comment les compilations spécifiques aux distributions sont effectuées en CI.
Remarque : Le paquet AUR n'est pas maintenu par nos soins.
Installez firejail-git depuis l'AUR.
Exemple :
yay -S firejail-git
Pour Debian, Ubuntu et leurs dérivés :
Remarque : Tous les paramètres de ./configure doivent être transmis à
mkdeb.sh (par exemple ./mkdeb.sh --enable-foo).
sudo apt-get update -qy
sudo apt-get install -qy \
git build-essential fakeroot lintian libapparmor-dev pkg-config gawk
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make dist &&
./mkdeb.sh &&
sudo dpkg -i ./*.deb &&
make installcheck
Pour Fedora et ses dérivés :
Remarque : Tous les paramètres de ./configure doivent être transmis à
mkrpm.sh (par exemple
./platform/rpm/mkrpm.sh --enable-foo).
sudo dnf update -y
sudo dnf install -y rpm-build gcc make
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make dist &&
./platform/rpm/mkrpm.sh &&
sudo rpm -i ./*.rpm &&
make installcheck
Instructions génériques de compilation/installation :
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make -j "$(nproc)" &&
sudo make install-strip &&
make installcheck
Sur Debian/Ubuntu, vous devrez installer git et gcc.
Pour compiler avec le support d'AppArmor (généralement utilisé sur Debian,
Ubuntu, openSUSE et leurs dérivés), installez les bibliothèques de
développement AppArmor et pkg-config, puis utilisez l'option ./configure
--enable-apparmor :
sudo apt-get install git build-essential libapparmor-dev pkg-config gawk
Pour compiler avec le support de SELinux (généralement utilisé sur Fedora,
RHEL et leurs dérivés), installez libselinux1-dev (libselinux-devel sur
Fedora) et utilisez l'option ./configure --enable-selinux.
Des informations détaillées sur l'utilisation de firejail depuis git sont disponibles sur le wiki.
Remarque : Assurez-vous d'utiliser le chemin complet vers le programme (par
exemple, firejail /usr/bin/firefox au lieu de firejail firefox) pour
éviter d'éventuels problèmes de firejail-dans-firejail (voir
#2877).
Pour démarrer le sandbox, faites précéder votre commande de firejail :
firejail /usr/bin/firefox # starting Mozilla Firefox
firejail /usr/bin/transmission-gtk # starting Transmission BitTorrent
firejail /usr/bin/vlc # starting VideoLAN Client
sudo firejail /etc/init.d/nginx start
Exécutez firejail --list dans un terminal pour lister tous les sandbox
actifs. Exemple :
$ firejail --list
1617:netblue:/usr/bin/firejail /usr/bin/firefox-esr
7719:netblue:/usr/bin/firejail /usr/bin/transmission-qt
7779:netblue:/usr/bin/firejail /usr/bin/galculator
7874:netblue:/usr/bin/firejail /usr/bin/vlc --started-from-file file:///home/netblue/firejail-whitelist.mp4
7916:netblue:firejail --list
Intégrez votre sandbox à votre bureau en exécutant les deux commandes suivantes :
firecfg --fix-sound
sudo firecfg
La première commande corrige certains bugs de mémoire partagée/espaces de noms PID dans les logiciels PulseAudio antérieurs à la version 9. La seconde commande intègre Firejail à votre bureau. Vous devrez vous déconnecter puis vous reconnecter pour appliquer les modifications PulseAudio.
Lancez vos programmes comme vous en avez l'habitude : menus du gestionnaire de bureau, gestionnaire de fichiers, lanceurs du bureau.
L'intégration s'applique à tout programme pris en charge par défaut par Firejail. Il existe plus de 900 applications par défaut dans la version actuelle de Firejail, et ce nombre augmente à chaque nouvelle version.
Nous maintenons la liste des applications dans src/firecfg/firecfg.config (/etc/firejail/firecfg.config une fois installé).
La plupart des options de ligne de commande de Firejail peuvent être transmises au sandbox à l'aide de fichiers de profils.
Vous trouverez les profils de toutes les applications prises en charge dans etc/ (/etc/firejail/ une fois installé).
Nous tenons également une liste de correctifs de profils pour les versions précédentes dans etc-fixes/.
Si vous conservez des profils de sécurité Firejail supplémentaires dans un dépôt public, merci de nous fournir un lien :
Utilisez ce ticket pour demander de nouveaux profils :
Vous pouvez également utiliser cet outil pour obtenir la liste des appels système nécessaires à un programme :
firecfg crée des liens symboliques dans /usr/local/bin, donc pour supprimer complètement firejail, exécutez la commande suivante avant de désinstaller :
sudo firecfg --clean
Voir man firecfg pour plus de détails.
Remarque : Les liens symboliques cassés sont ignorés lors de la recherche d'un
exécutable dans $PATH, donc désinstaller sans faire ce qui précède ne devrait
pas poser de problème.
LANDLOCK
Landlock is a Linux security module first introduced in version 5.13 of
the Linux kernel. It allows unprivileged processes to restrict their
access to the filesystem. Once imposed, these restrictions can never
be removed, and all child processes created by a Landlock-restricted
processes inherit these restrictions. Firejail supports Landlock as an
additional sandboxing feature. It can be used to ensure that a sand‐
boxed application can only access files and directories that it was ex‐
plicitly allowed to access. Firejail supports populating the ruleset
with both a basic set of rules (see --landlock) and with a custom set
of rules.
Important notes:
- A process can install a Landlock ruleset only if it has either
CAP_SYS_ADMIN in its effective capability set, or the "No New
Privileges" restriction enabled. Because of this, enabling the
Landlock feature will also cause Firejail to enable the "No New
Privileges" restriction, regardless of the profile or the
--nonewprivs command line option.
- Access to the /proc directory is managed through the --land‐
lock.proc command line option.
- Access to the /etc directory is automatically allowed. To
override this, use the --writable-etc command line option. You
can also use the --private-etc option to restrict access to the
/etc directory.
To enable Landlock self-restriction on top of your current Firejail se‐
curity features, pass --landlock flag to Firejail command line. You
can also use --landlock.read, --landlock.write, --landlock.special and
--landlock.execute options together with --landlock or instead of it.
Example:
$ firejail --landlock --landlock.read=/media --landlock.proc=ro /usr/bin/mc
Un petit outil pour afficher les statistiques des profils. Compilez et installez comme d'habitude. L'outil est installé dans le répertoire /usr/lib/firejail.
Exécutez-le sur les profils dans /etc/profiles :
$ /usr/lib/firejail/profstats /etc/firejail/*.profile
No include .local found in /etc/firejail/noprofile.profile
Warning: multiple caps in /etc/firejail/tidal-hifi.profile
Warning: multiple caps in /etc/firejail/tqemu.profile
Warning: multiple caps in /etc/firejail/transmission-daemon.profile
Warning: multiple caps in /etc/firejail/trivalent.profile
Stats:
profiles 1342
include local profile 1341 (include profile-name.local)
include globals 1307 (include globals.local)
blacklist ~/.ssh 1201 (include disable-common.inc)
seccomp 1213
capabilities 1335
noexec 1214 (include disable-exec.inc)
noroot 1105
memory-deny-write-execute 320
restrict-namespaces 1048
apparmor 869
private-bin 817
private-dev 1172
private-etc 842
private-cache 865
private-lib 86
private-tmp 1036
whitelist home directory 662
whitelist var 975 (include whitelist-var-common.inc)
whitelist run/user 1305 (include whitelist-runuser-common.inc
or blacklist ${RUNUSER})
whitelist usr/share 760 (include whitelist-usr-share-common.inc
net none 452
dbus-user none 766
dbus-user filter 206
dbus-system none 970
dbus-system filter 13