Aislando aplicaciones del resto del sistema con Firejail

Firejail es una herramienta escrita en lenguaje de programación C que nos permite crear un sandboxing en nuestro sistema Linux. Es especialmente útil para ejecutar programas en los que no confiamos demasiado, dentro de un entorno con privilegios limitados.

El programa se usa desde la terminal –aunque también está disponible una interfaz gráfica llamada FireTools–, apenas consume recursos, no necesita permisos de root y su uso básico no es nada complicado:

firejail [aplicación_a_ejecutar]

Por ejemplo:

firejail chromium

Como veis he optado por lanzar un navegador web. En muchos casos podéis juzgar si el programa está funcionando correctamente, por la imposibilidad de acceder a determinados archivos (html, txt…) de vuestro directorio personal.

Es decir podemos ejecutar el programa con nuestros privilegios de usuario normales, pero se proporciona una seguridad adicional al modificar el comportamiento habitual del programa respecto a aquellos directorios y archivos de los que somos dueños. Para ello intervienen diferentes capacidades del Linux Kernel que permiten el aislamiento de procesos y el filtrado de las llamadas al sistema (seccomp-bpf).

Para asegurarnos de que Chromium o cualquier otro programa esta siendo manejado por Firejail, podemos utilizar el parámetro list:

[jose@replicante ~]$ firejail --list 
16338:jose:firejail chromium

Además es compatible con suites de seguridad como AppArmor y SELinux o la versión del kernel que ofrece Grsecurity. Firejail permite aislar procesos del sistema de archivos, así como limitar el acceso a determinadas funciones de las interfaces de red. En este ejemplo creamos una sandbox que evita el acceso a cualquier conexión de red por parte del reproductor de audio Clementine:

firejail --net=none clementine

Firejail nos permite crear perfiles personalizados para todo tipo de aplicaciones o listas blancas para el acceso a determinados archivos.

De forma predeterminada ya existen diversos perfiles de uso –una vez instalado, los podéis consultar en el directorio /etc/firejail–, que abarcan múltiples programas: navegadores, editores de texto, juegos, clientes de correo, administradores de archivos, lectores de documentos, herramientas de chat, reproductores multimedia, etc.

Y configuraciones algo más específicas como las dirigidas a servidores, la plataforma de juegos Steam, cosas que no son un emulador pero lo parecen (Wine) o protocolos tipo SSH. En el caso de que un programa determinado no tenga un perfil personalizado se le aplica el general de Firejail.

Quizás cuando se implante definitivamente el protocolo de servidor gráfico Wayland y los paquetes Flatpaks o Snaps sean más populares, Firejail –en algunos de sus usos– ya no sea tan necesario, por las características de sandboxing que implementan. Pero convengamos que Xorg tampoco se va a ir de la noche a la mañana.

Y hablando de paquetes autocontenidos… Firejail es una buena opción para echar a andar las AppImages sin ningún tipo de riesgo (paquetes genéricos que no precisan instalación y que se están haciendo populares a la hora de distribuir nuevas versiones de software).

Por ej:

firejail --appimage krita*.appimage

Incluso tenemos la opción de habilitar un modo privado que esconde nuestro directorio /home, proporcionando una estructura de archivos temporal (lo justo para poder ejecutar las aplicaciones). Una vez finalizado el sandboxing cualquier archivo creado será destruido.

firejail --appimage --private krita*.appimage

Si le echáis un vistazo al manual vais a encontrar muchas más opciones de ejecución:

man firejail

Instalación en Linux

Firejail está disponible en los repositorios de las principales distribuciones GNU/linux. Vamos a ver como instalarlo en algunas de ellas tirando de terminal:

  • En Arch Linux o alguna de sus hijas (Antergos, Manjaro, Apricity, ArchBang), nos lo encontramos en los repos oficiales:
sudo pacman -S firejail
  • Los usuarios de openSUSE lo pueden instalar a través de 1-click, seleccionando la versión de su distro (Tumbleweed o Leap)
  • En Gentoo:
sudo emerge --ask sys-apps/firejail

con opción de una versión LTS de firejail:

sudo emerge --ask sys-apps/firejail-lts
  • Para Fedora, se descarga el paquete RPM correspondiente desde SourceForge y lo instalamos con:
sudo rpm -i *.rpm
  • Usuarios de Debian y derivadas como Ubuntu, Elementary o Linux Mint (también existen paquetes deb en SourceForge):
sudo apt install firejail
  • Además dado que no exige apenas dependencias, Firejail debería poder ser compilado sin dificultades, en cualquier distro mediante los siguientes comandos:
$ git clone https://github.com/netblue30/firejail.git
$ cd firejail
$ ./configure && make && sudo make install-strip

Si estáis interesados en el programa tenéis una abundante documentación así como diversos ejemplos de uso en la web de Firejail.

5 thoughts on “Aislando aplicaciones del resto del sistema con Firejail”

  1. Rezzilenzze says:

    Yo actualmente no recomendaría el uso de firejail para enjaular aplicaciones web:

    https://security.archlinux.org/issues/vulnerable

    La mayoría de vulnerabilidades son de escalacion de privilegios, aunque no de manera remota.

  2. tannhausser says:

    Son un buen puñado de vulnerabilidades. Lo bueno es ya están corregidas en versiones recientes de Firejail.

    1. Jolt2bolt says:

      Aqui esta el link the las vulnerabilidades arregladas y en que version para fundamentar lo que dices!:D

      https://firejail.wordpress.com/download-2/cve-status/

      1. tannhausser says:

        @jolb2bolt un link siempre le da otro status a las respuestas 🙂

        Lo importante es que el proyecto tiene un desarrollo activo, son abiertos al feedback y que cuando se detecta algún error lo solucionan rápido.

  3. yo says:

    mala,muy MUY mala idea por insegura
    si quiero tener procesos aislados no hay mejor sistema al caso que la familia BSD con las jails

Deja un comentario