Firejail

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

Instalar en entorno gráfico

    apt-get install firejail firetools

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 loq ue 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.

    --net=none
    --net=eth0
    --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)

    --x11                            # --x11 for X11 sandboxing de las X basado en  Xpra  ¡ Ojo, me petó las X en Mint Mate 18 ! # https://xpra.org

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

Comandos:

    firejail --list             # Muestra las aplicaciones que se están ejecutando en entorno sandbox con Firejail
    firejail --top              # Muestra las aplicaciones que se están ejecutando con Firejail al estilo top mostrando información extra como los recursos utilizados
    firejail --tree             # Muestra las aplicaciones que se están ejecutando y todos los procesos que cuelgan de cada entorno sandbox
    firejail --shutdown=PID     # Mata el entorno sandbox que pueda estar colgado
    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 --seccomp          # seccomp protection


    firemon --list              # Algunos comandos funcionan con firejail pero otros son especifimos de firemon para monitorizar
    firemon --caps
    firemon --arp
    firemon --netstats
    firemon --apparmor

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/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. Algunos navegadores basados en Chromium requieren permisos de root para poder ejecutarse en entornos sandbox

    sudo vim /etc/firejail/firejail.config  # Editar
        force-nonewprivs yes                #  Añadir


    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:

    --overlay-tmpfs                  # Todo el sistema de ficheros es temporal y efímero. No se guardará nada pero ojo, si tiene acceso de lectura a todo Id

        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 el fichero en tmp


        sudo firejail --noprofile --overlay-tmpfs
        apt-get install aisleriot                   # De esta manera puedes probar apps sin modificar el sistema
        su tu_usuario

Chroot:

    Puedes cerar 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 no 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 qquieras
        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://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/