Firejail

Es un entorno sandbox que permite la ejecución aislada de procesos.

Instalar + gui para entorno gráfico

    apt-get install firejail firetools

En Ubuntu es preferible instalar en PPA debido a meses que han tenido versiones vulnerables sin actualizar

    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

Instalar en servidor. (Ojo a SUID)

    apt-get install firejail

Instalar con git

    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

Usar

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

Lanzar un Appimage:

    firejail --appimage "~/Escritorio/Nextcloud/MiConf/Gestor de Contraseñas/KeepassXC/KeePassXC-2.5.1-x86_64.AppImage"

Opciones:

    --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

Comandos:

    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

Perfiles:

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

Configurar:

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-tmps y entorno sandbox para pruebas:

    --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

Chroot:

    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

AppArmor:

https://firejail.wordpress.com/documentation-2/basic-usage/#apparmor

Server:

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
Fuentes y más información/ayuda
https://github.com/netblue30/firejail
https://firejail.wordpress.com/documentation-2/basic-usage/
https://firejail.wordpress.com/documentation-2/building-custom-profiles/
https://firejail.wordpress.com/documentation-2/
https://firejail.wordpress.com/features-3/
https://wiki.archlinux.org/index.php/Firejail
https://firejail.wordpress.com/
https://geekland.eu/firejail-sandbox-para-linux/
https://vitforlinux.wordpress.com/2018/03/28/eseguire-palemoon-o-firefox-usando-la-sandbox-firejail-con-un-file-desktop/
Escalada de privilegios que lleva sin actualizar cerca de un año por el que han deshabilitado la opción –overlay-tmpfs
Escalada de privilegios en junio del 2022 ya resuelta si usas la versión PPA. Es por esto que hay que ir con cuidado con SUID