Es un entorno sandbox que permite la ejecución aislada de procesos.
apt-get install firejail firetools
sudo curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x0b58929c0081a52410e8992260537cdcf684460c" | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/firejail.gpg
sudo add-apt-repository ppa:deki/firejail
sudo apt-get update
sudo apt-get install firejail firejail-profiles # Pulsa Y para usr el fichero /etc/firejail/firejail.config por el desarrollado en vez del de Ubuntu
apt-get install firejail
git clone https://github.com/netblue30/firejail.git # Replica el repositorio de firejail
cd firejail # Acceso al directorio
configure # Analiza el sistema para validar la configuración
make # Compila el programa
sudo make install-strip # Instala Firejail
Por defecto tiene varios perfiles creados con aplicaciones conocidas en /etc/firejail/
Basta con ejecutar firejail y especificar el ejecutable de la aplicación.
firejail vlc
firejail firefox
firejail --appimage "~/Escritorio/Nextcloud/MiConf/Gestor de Contraseñas/KeepassXC/KeePassXC-2.5.1-x86_64.AppImage"
--private # Oculta el directorio home a la aplicación. En su lugar crea un home tipo tmps, todo lo que se guarde se perderá.
--private=~/my_private_di # En vez de ocular y usar un tmps como con --private, puedes indicarle que use uno en concreto.
--seccomp # seccomp protection (enable seccomp filter and apply the default blacklist)
--net=none # Habilita una nueva red desconectada
--net=eth0 # Establece el sandbox en un nuevo entorno de red
--dns=1.1.1.1 # Establece el DNS para la app
--bandwidth=PID set eth0 80 20 # Limita al proceso con pid especificado a que eth0 le limite a 80KB/s de bajada y 20KB/s de subida (basado en tc)
--shell=none # No permite lanzar el terminal
--read-only=/etc # Establece el fichero o directorio en modo solo lectura
--blacklist=/boot # No permite el acceso al fichero o directorio
--whitelist=~/Downloads # Permite el acceso al fichero o directorio
--noprofile # No asigna ningún perfil por defecto (Ojo, no banea acceso a directorios delicados)
--profile=Perfil # Especifica un perfil a usar. Por ejemplo --profile=/etc/firejail/libreoffice.profile
--x11 # Sandboxing de las X intentando primero Xpra, sino Xephyr, sino X11 security extension. No me funciona en Mint Mate 18-20 # https://xpra.org
--x11=xorg # Sandbox de las X habilitando la extensión de seguridad X11. Ej: firejail --x11=xorg vlc
--overlay # Mount a filesystem overlay on top of the current filesystem. (OJO NO TEMPORAL, ACCESO ESCRITURA AL REAL)
--overlay-tmpfs # Mount a temporary filesystem overlay on top of the current filesystem (Ve abajo a la sección Overlay-tmps y sandbox)
--overlay-clean # Clean all overlays stored in $HOME/.firejail directory.
--private # Para que, sin llegar a usar overlay de todo el sistema de ficheros, cargue el /home como un sistema de ficheros temporal
--private=directory # Use directory as user home.
--private-cache # Temporary ~/.cache directory.
--private-home=file,directory # Build a new user home in a temporary
--private-bin=file,file # Build a new /bin in a temporary filesystem,
--private-dev # Create a new /dev directory with a small number of
--private-etc=file,directory # Build a new /etc in a temporary
--private-tmp # Mount a tmpfs on top of /tmp directory.
--trace app # Lanza firejail mostrando las llamadas al sistema
--debug app # Lanza mostrando información de debug
firejail --list # Muestra las aplicaciones que se están ejecutando en entorno sandbox con Firejail
firejail --join=PID # Entra a un terminal dentro del entorno sandbox seleccionado. Puedes ver los recursos que usa y tiene disponibles. top o df -h por ejemplo (exit para salir)
firejail --shutdown=PID # Mata el entorno sandbox que pueda estar colgado
firejail --top # Muestra las aplicaciones que se están ejecutando con Firejail que más usan CPU al estilo top mostrando información extra como los recursos utilizados (firetools trae un administrador mejor para gui)
firejail --tree # Muestra las aplicaciones que se están ejecutando y todos los procesos que cuelgan de cada entorno sandbox
firemon --list # Algunos comandos funcionan con firejail pero otros son especifimos de firemon para monitorizar
firemon --caps
firemon --arp
firemon --netstats
firemon --apparmor
Si no hay un perfil definido, puedes usar la opción –noprofile pero es mejor que le crees un perfil
Los perfiles están en /etc/profiles/ y especificos del usurio en ~/.config/firejail/
firejail --noprofile "~/Escritorio/Nextcloud/MiConf/Gestor de Contraseñas/KeepassXC/KeePassXC-2.5.1-x86_64.AppImage"
Crear un perfil a partir de otro:
sudo cp /etc/firejail/libreoffice.profile /etc/firejail/libreoffice62.profile
sudo vim /etc/firejail/libreoffice62.profile
join-or-start libreoffice6.2
También se puede crear el nuevo haciendo includes al que quieres modificar:
vim ~/.config/firejail/libreoffice62.profile
include /etc/firejail/libreoffice.profile
join-or-start libreoffice6.2
firejail --profile=/etc/firejail/libreoffice62.profile libreoffice6.2
firejail --profile=/etc/firejail/libreoffice62.profile libreoffice6.2 --calc
El comando firecfg localiza y configura tus aplicaciones de escritorio para que se lancen automáticamente con firejail en entorno sandbox
Lo que hace firecfg es detectar las aplicaciones que tienes instaladas y tienen perfil en /etc/firejail, creando despues un enlace en /usr/local/bin/
Si no quieres hacer esto, puedes editar los lanzadores de escritorio y menú para que se lancen como en el apartado Usar
cat ~/Desktop/firefox.desktop
[Desktop Entry]
Type=Application
Name=Firefox
Icon=firefox.png
Exec=firejail firefox
Terminal=false
El comando firetools te abre una tool de gestión en entorno gráfico muy sencilla, en la que viene un laucher con las aplicaciones ya preconfiguradas. Puedes ver los procesos que hay en ejecución y su consumo de recursos así como gestionar perfiles.
En /etc/firejail/ vienen todos los perfiles ya preconfigurados como por ejemplo /etc/firejail/vlc.profile (En el launcher solo te mostrará los perfiles de las apps que tengas instaladas)
Evitar problemas con SUID es bueno activar la opción force-nonewprivs pero ojo, algunos navegadores basados en Chromium requieren permisos de root para poder ejecutarse en entornos sandbox.
sudo vim /etc/firejail/firejail.config # Editar (Es el fichero de todas las configuraciones por defecto)
force-nonewprivs yes # Editar
Cambiar los permisos de /usr/bin/firejail de 4750 y permitir que solo lo ejecute tu usuario
ls -l /usr/bin/firejail
# -rwsr-xr-x 1 root root 384520 sep 18 01:35 /usr/bin/firejail
su # o sudo -s
addgroup firejail
chown root:firejail /usr/bin/firejail
chmod 4750 /usr/bin/firejail
ls -l /usr/bin/firejail
# -rwsr-x--- 1 root firejail 1584496 Apr 5 21:53 /usr/bin/firejail
usermod -a -G firejail tusuario # Para que se aplique has de salir y logearte de nuevo
--overlay-tmpfs # El sistema de ficheros es temporal y efímero. No se guardará nada pero ojo, si tiene acceso de lectura al sistema y de escritura en /tmp
firejail --overlay-tmpfs vlc
firejail --join=$(firejail --list | grep vlc | cut -d ":" -f 1)
touch /tmp/vlccccccc
df -h
exit
ls /tmp/vl* # Verás que no está el fichero en tmp que escribiste (El perfil de vlc no da acceso a tmp, ojo si usas --noprofile)
# Ejemplo para instalar y probar un programa sin que afecte al sistema
sudo firejail --noprofile --overlay-tmpfs # Ojo, con --noprofile tendrás acceso de escritura en /tmp. Para no tener acceso --blacklist=/tmp
apt-get install aisleriot # De esta manera puedes probar apps sin modificar el sistema (isleriot es el solitario)
su tu_usuario
sol # Lanzará el solitario pero si miras en tu sistema fuera de firejail, no está instalado realmente. Cuando salgas de firejail no quedará nada.
# Si con --noprofile deniegas el acceso a /tmp con --blacklist=/tmp, las carpetas de solo lectura donde habrás escrito estarán en /run/firejail/firejail.ro.dir
Ejemplos para lanzar LibreOffice Calc o Palemoon en modo sandbox:
firejail --name=sandboxpalemoon --shell=none --blacklist=/boot --whitelist=~/Downloads --read-only=/etc --noprofile --overlay-tmpfs palemoon
firejail --name=sandboxlibreoffice --shell=none --blacklist=/boot --whitelist=/tmp/sandbox --profile=/etc/firejail/libreoffice.profile --overlay-tmpfs --net=none libreoffice --norestore -env:UserInstallation=file:///tmp/sandbox --calc
sudo firejail --blacklist=/boot --noprofile --whitelist=/tmp/sandbox --overlay-tmpfs --net=none # Con --noprofile puedes escribir en tmp, el resto son todos overlay
su <tu usuario normal del equipo> # pero para poder acceder y escribir solo en una carpeta, en vez de blacklist, marco un subdirectorio como whitelist.
libreoffice --calc --norestore -env:UserInstallation=file:///tmp/sandbox
Puedes crear un entorno chroot con la rama testing o inestable de tu sistema operativo. Por ejemplo en Debian:
sudo mkdir /chroot
sudo debootstrap --arch=amd64 sid /chroot/sid
Creamos un usuario en el sistema chrooteado y apuntamos a que firejail lance un comando sobre ese sistema.
De esta manera podemos lanzar versiones más actuales de los programas que nos interesen y además en entorno aislado:
sudo firejail --noprofile --chroot=/chroot/sid # Lanza terminal en entorno chrooteado para crear usuario e instalar la app que quieras
adduser netblue
apt-get install youtube-dl
exit
Lanzar:
firejail --chroot=/chroot/sid # Lanza terminal en entorno chrooteado para luego ejecutar la app que quieras
youtube-dl https://www.youtube.com/watch?v=Yk1HVPOeoTc
También funciona en apps de escritorio:
sudo firejail --noprofile --chroot=/chroot/sid
apt-get update
apt-get upgrade
apt-get install handbrake mpv
https://firejail.wordpress.com/documentation-2/basic-usage/#apparmor
Como norma, cualquier instancia que levantes como servidor es mejor que tenga su red e ip separada del resto
firejail --net=eth0 --ip=192.168.1.244 /etc/init.d/apache2 start # Puedes lanzar un monton de servidores apache y cada uno con su ip
Puedes lanzar cientos de instancias de servidores, cada una con su ip, páginas y aplicaciones
The default server profile is /etc/firejail/server.profile. To further restrict your servers, here are some ideas:
# capabilities list for Apache server
caps.keep chown,sys_resource,net_bind_service,setuid,setgid
# capabilities list for nginx server
caps.keep chown,net_bind_service,setgid,setuid
# use a netfilter configuration
netfilter /etc/firejail/webserver.net
# instead of /var/www/html for webpages, use a different directory
bind /server/web1,/var/www/html