Muy buenas lector. En este post te hablaré de Firejail, una herramienta disponible en cualquier distribución GNU/Linux y que, haciendo uso de varios de los mecanismos de seguridad presentes en el kernel Linux, permite actuar como sandbox para cualquier aplicación que desees.
Si sigues estas líneas, te contaré brevemente como funciona a nivel técnico Firejail, como instalarlo y, finalmente, como debes abrir cualquier aplicación que quieres que saque provecho de Firejail, y se ejecute en su propio entorno aislado.
Tabla de contenidos:
- Firejail. ¿Qué es y como funciona?
- Como instalar Firejail en tu distribución GNU/Linux
- Como utilizar Firejail para ejecutar una aplicación
- Firetools. La interfaz gráfica de Firejail
Firejail. ¿Qué Es y Como Funciona?
Firejail es una herramienta programada en C que permite poder crear un entorno aislado para ejecutar aplicaciones de forma mas segura, al reducir el potencial impacto que una explotación de la misma pueda tener hacía el resto del sistema, cosa que puede resultar muy conveniente en aplicaciones especialmente expuestas, como son el propio navegador web.
A continuación te explico brevemente las principales características que utiliza a nivel de kernel, solo para que tengas un poco de contexto, antes de pasar a la pero sin entran en muchos detalles técnicos (que podrás consultar igualmente en los enlaces que te añado en cada apartado)
Linux Namespaces
Para conseguir esto, Firejail hace uso principalmente de Linux Namespaces, una característica del propio kernel que posibilita que una aplicación pueda generar su propio sistema de ficheros, stack web e interfaz de núcleo, y que ha sido una de las características clave que ha permitido el despliegue de contenedores en Linux (como Docker, por ejemplo).
Básicamente lo que hace Namespaceses poder compartimentar o encampsular los diferentes recursos del kernel (IDs de procesos, hostname, IDs de usuario, nombres de ficheros, etc.) en grupos separados bajo un mismo namespace, de modo que solo sean accesibles por un conjunto determinado de procesos, que compartan ese mismo namespace.
Esta característica apareció por primera vez en el kernel en la versión 2.6.23, hace ya largo tiempo, pero se ha ido complementando desde entonces, con la aparición de diferentes tipos de namespace, quedando, desde la versión 3.8, un total de 8 tipos distintos, según el tipo de recursos que representa.
Políticas de Control de Acceso (MAC)
Aparte del uso de Linux Namespaces, Firejail tambien implementa estrictas políticas de control de acceso (MAC) sobre el propio sistema de ficheros, para restringir el acceso de la aplicación a nivel de directorios (por ejemplo, estableciendo que solo ciertos directorios dentro de la home del usuario actual sen accesibles, como el de descargas, o el de configuración de la propia aplicación, entre otras muchas reglas).
Estás políticas estan establecidas por defecto para mas de 1000 aplicaciones de escritorio, según se detalla en la web oficial del proyecto. Estas incluyen a las más tipicas que te puedas imaginar, como Firefox, Chromium, VLC, el cliente BitTorrent Transmission, etc.
Seccomp BPF
Además, Firejail tambien se nutre de otros mecanismos de protección a nivel de kernel, como filtro Seccomp BPF, del que a día de hoy se aprovechan aplicaciones tan populares como Docker o el mismo Chrome, tal como puedes comprobar facilmente accediento a la siguiente pagina en la barra de direcciones de Chrome: chrome://sandbox/.
Seccomp BPF facilita la función de sandbox al permitir asociar un filtro a un proceso (junto a sus descendientes), para acotar las llamadas a sistema que puede realizar. El lenguaje que se utiliza para especificar los filtros es BPF, o Berkeley Packet Filter.
El resultado final es que todas los procesos que se ejecuten a través de Firejail cuentan con su propia visión a nivel del espacio compartido de los recursos del kernel, como el stack de red, la tabla de procesos, o la tabla de montaje.
Soporte con AppArmor y SELinux
Firejail se puede complementar bien con AppArmor y SELinux, dos implementaciones distintas de mecanismos de control de acceso que funcionan limitando los recursos a los que una aplicación puede acceder.
En este casi, se podría decir que Firejail añade una capa más de seguridad cuando corres una aplicación a través de él. Mientras que con AppArmor, por ejemplo, se puede limitar los recursos a que las aplicaciones pueden acceder, con Firejail además puedes aislar esos recursos, para que diferentes aplicaciones que tengan acceso a los mismos recursos, tampoco puedan interacturar entre ellas.
Puedes leer todos los detalles de los mecanismos de seguridad que utiliza Firejail en el recurso oficial que te enlazo a continuación:
Como Instalar Instalar Firejail en tu Distribución GNU/Linux
Firejail no suele venir preinstalado en ninguna distribución, pero si se encuentra en los repositorios oficiales de la mayoría de ellas. Gracias a que se aprovecha de mecanismos de protección presentes en el propio kernel, Firejail no necesita dependencias, y su uso no supone ningún impacto en el sistema.
Para instalar Firejail en Ubuntu, Debian, o cualquier derivado, puedes utilizar el siguiente comando:
sudo apt install firejail
Una vez hecho esto, ya lo puedes empezar a utilizar. No necesitas realizar ninguna configuración ni nada, simplemente tener presentes los diferentes modos en que puedes utilizarlo, tal como te explicaré a continuación.
Como Utilizar Firejail para Ejecutar una Aplicación
Firejail puede funcionar con cualquier tipo de proceso, ya sea a nivel de servidor, de aplicaciones de escritorio, o incluso a nivel de sesiones de inicio de sesión de usuario. Actualmente Firejail tiene reglas de control de acceso configuradas para más de 1000 aplicaciones de escritorio, como ya reseñé más arriba.
El uso estándar es muy senzillo, basta con teclear por consola la palabra firejail seguido del nombre de la aplicación que quieres ejecutar a través de Firejail.
Debajo te muestro el comando basico, utilizando el reproductor Firefox como ejemplo, pero ten en cuenta que, en caso de que estés en Ubuntu 22.04 LTS o versión posterior, este comando no te funcionará, ya que Firefox por defecto estaá instalado como Snap.
firejail firefox
A continuación te pongo algunos ejemplos adicionales de aplicaciones típica que puedes utilizar con Firejail, y que en este caso si que no he tenido ningun problema en Ubuntu 22.04 LTS (probablemente estan instaladas a través de APT, y no como Snaps.
Gedit (editor de texto de GNOME):
firejail gedit
Evince (lector PDF de GNOME):
firejail evince
Reproductor de medios VLC:
firejail vlc
Cliente BitTorrent Transmission:
firejail transmission-gtk
Como curiosidad, cuando tengas cualquier aplicación abiertas con Firejail, puedes comprobar, desde el monitor de recursos, como el proceso asociado aparece dentro de otro proceso, correspondiente a Firejail.

Para ver el árbol de procesos relativo a las aplicaciones que se están ejecutando a través de Firejail en un momento concreto, también puedes ejecutar este comando desde la terminal:
firejail --tree
Firejail dispone de infinidad de comandos y parametros adicionales que puedes utilizar para modificar su comportamiento a la hora de ejecutar una aplicación. Si tienes curiosidad, puedes ver un listado de todas ellas mediante este comando:
firejail --help
Con esto ya sabes todo lo basico para el uso de Firejail.
Firetools. La Interfaz Gráfica de Firejail
Hasta ahora como puedes ejecutar una aplicación a través de Firejail desde la consola, pero esto mismo también puedes hacerlo en modo gráfico, sin necesidad de utilizar ningún comando.
Firejail dispone de una interfaz gráfica denominada Firetools, que basicamente consiste en un lanzaodor integrado en la bandeja del sistema. Firetools no viene con la instalación base de Firejail, pero puedes instalarlo fácilmente con este comando.
sudo apt install firetools
Una vez instalado, verás que te habrás aparecido dos iconos adicionales en el menu de aplicaciones de GNOME. La primera es una ventana de configuración denominada Firejail Configurarion Wizard, que es en la que me voy a centrar ahora.
Si la abres, te aparecerá una ventana como la que te muestro a continuación, en la que, bajo la sección Step 1 te aparecerán dos menus, a través de los cuales podrás acceder a todas las aplicaciones que puedes ejecutar a través de Firejail (a medida que instales más, te deberías aparecer también, siempre y cuando Firejail tenga un perfil configurado para ellas). En Step 2, podrías elejir cargar la aplicación con el perfil por defecto, o establecer ajustes personalizados.

Si has seleccionado la opción de personalizar el perfil, en la siguiente ventana podrás realizar algunes ajustes a nivel de sandbox. Por defecto, el sandbox que crea Firejail para cada aplicación solo le da acceso al directorio Home del usuario (el resto, como puedes ver en la imagen, estan restringidos), pero aqui puedes afinar incluso más, y restringir directorios concretos dentro de Home.

En la siguiente ventana puedes seguir configurando las propiedades del sandbox, por ejemplo deshabilitando recursos como el sonido, etc. Tambien pudes deshabilitar algunos mecanismos de proteccioón a nivel de kernel, como Seccomp BPF, del que ya hemos hablado, aunque esto te recomiendo que lo dejes todo marcado tal como esta, ya que deshabilitandolos estarías quitando capas de protección.

Y ya por ultimo, en la siguiente ventana podras habilitar la opción de estadísticas, en caso de que lo necesites. Si en la ventana inicial has dejado la opción de utilizar el perfil de protección por defecto (el que tiene establecido Firejail por cada aplicación), esta es la ventana a la que irás a parar directamente.

Después de esto, si le das a Done, automaticamente se te abrirá la aplicación bajo el sandbox de Firejail (con el perfil por defecto que tiene establecido Firejail para esta aplicación, o con el perfil personalizado, en caso de que hayas elegido esta opción).
Como ves, al final es lo mismo que puedes hacer desde la consola, pero en caso de que quieras ajustar parametros, puede ser más amigable hacerlo desde la interfaz gráfica que nos provee Firetools.