
Linux namespaces e sandbox seccomp-bpf
Firejail è uno strumento di sicurezza leggero pensato per proteggere un sistema Linux creando un ambiente ristretto per eseguire applicazioni (potenzialmente non affidabili).
Più precisamente, è un programma sandbox SUID che riduce il rischio di violazioni della sicurezza utilizzando i namespace Linux, seccomp-bpf e le capabilities Linux. Consente a un processo e a tutti i suoi discendenti di avere una propria visione privata delle risorse del kernel condivise globalmente, come lo stack di rete, la tabella dei processi e la tabella dei mount. Firejail può funzionare in un ambiente SELinux o AppArmor ed è integrato con i Control Groups di Linux.
Scritto in C e praticamente senza dipendenze, il software gira su qualsiasi computer Linux con una versione del kernel 3.x o successiva. Può mettere in sandbox qualsiasi tipo di processi: server, applicazioni grafiche e persino sessioni di login degli utenti. Il software include profili di sandbox per molti dei programmi Linux più comuni, come Mozilla Firefox, Chromium, VLC, Transmission, ecc.
La sandbox è leggera e l'overhead è basso. Non ci sono file di configurazione complicati da modificare, nessuna connessione socket aperta, nessun demone in esecuzione in background. Tutte le funzionalità di sicurezza sono implementate direttamente nel kernel Linux e sono disponibili su qualsiasi computer Linux.
Vedi SECURITY.md.
Per le versioni supportate, vedi SECURITY.md.
Nota: le versioni presenti in Debian stable e backports sono probabilmente obsolete, quindi al momento consigliamo di scaricare e installare il pacchetto .deb dall'ultima release:
Oppure compilare dai sorgenti.
Debian stable (bullseye): consigliamo di usare il pacchetto backports.
Nota: le versioni dalla distribuzione e dalla PPA sono probabilmente obsolete, quindi al momento consigliamo di scaricare e installare il pacchetto .deb dall'ultima release:
Oppure compilare dai sorgenti.
Nota: la raccomandazione sulla PPA riguarda principalmente firejail stesso; è comunque possibile installare firetools e gli strumenti correlati a firejail direttamente dalla distribuzione se non sono presenti nella PPA, dato che tendono a essere aggiornati meno frequentemente.
Per Ubuntu 18.04+ e derivate (come Linux Mint), si consiglia vivamente di usare la PPA.
Come aggiungere e installare dalla PPA:
sudo add-apt-repository ppa:deki/firejail
sudo apt-get update
sudo apt-get install firejail firejail-profiles
Motivo: il pacchetto firejail per Ubuntu 20.04 è rimasto vulnerabile a CVE-2021-26910 per mesi dopo che una patch era stata pubblicata su Launchpad:
Vedi anche https://wiki.ubuntu.com/SecurityTeam/FAQ:
Quale software è supportato dal team di sicurezza di Ubuntu?
Ubuntu è attualmente suddiviso in quattro componenti: main, restricted, universe e multiverse. Tutti i pacchetti binari in main e restricted sono supportati dal team di sicurezza di Ubuntu per l'intera vita di una release di Ubuntu, mentre i pacchetti binari in universe e multiverse sono supportati dalla community di Ubuntu.
Inoltre, la versione della PPA è probabilmente più recente e contiene più correzioni ai profili.
Vedi le seguenti discussioni per i dettagli:
Firejail è disponibile in diverse distribuzioni Linux:
Fatta eccezione per le eccezioni sopra menzionate, se la tua distribuzione fornisce una versione supportata di firejail, in generale è una buona idea installarlo dalla distribuzione.
La versione può essere verificata con firejail --version dopo l'installazione.
Puoi anche installare uno dei pacchetti rilasciati.
Istruzioni per compilare e installare dai sorgenti l'attuale versione di sviluppo.
Si consiglia di usare le istruzioni specifiche per la distribuzione riportate di seguito, quando applicabili, poiché generano pacchetti nativi, che dovrebbero rendere più semplice l'integrazione con il resto del sistema e la gestione dei pacchetti.
Per le altre distribuzioni, vedi le istruzioni generiche.
Vedi anche .gitlab-ci.yml per come vengono eseguite le build specifiche per distribuzione nella CI.
Nota: il pacchetto AUR non è mantenuto da noi.
Installa firejail-git dall'AUR.
Esempio:
yay -S firejail-git
Per Debian, Ubuntu e derivate:
Nota: eventuali opzioni di ./configure devono essere passate a mkdeb.sh
(ad esempio ./mkdeb.sh --enable-foo).
sudo apt-get update -qy
sudo apt-get install -qy \
git build-essential fakeroot lintian libapparmor-dev pkg-config gawk
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make dist &&
./mkdeb.sh &&
sudo dpkg -i ./*.deb &&
make installcheck
Per Fedora e derivate:
Nota: eventuali opzioni di ./configure devono essere passate a mkrpm.sh
(ad esempio ./platform/rpm/mkrpm.sh --enable-foo).
sudo dnf update -y
sudo dnf install -y rpm-build gcc make
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make dist &&
./platform/rpm/mkrpm.sh &&
sudo rpm -i ./*.rpm &&
make installcheck
Istruzioni generiche di compilazione/installazione:
git clone 'https://github.com/netblue30/firejail.git' &&
cd firejail &&
./configure &&
make -j "$(nproc)" &&
sudo make install-strip &&
make installcheck
Su Debian/Ubuntu dovrai installare git e gcc.
Per compilare con il supporto AppArmor (che di solito viene usato su Debian, Ubuntu,
openSUSE e derivate), installa le librerie di sviluppo AppArmor e
pkg-config e usa l'opzione --enable-apparmor di ./configure:
sudo apt-get install git build-essential libapparmor-dev pkg-config gawk
Per compilare con il supporto SELinux (che di solito viene usato su Fedora, RHEL e
derivate), installa libselinux1-dev (libselinux-devel su Fedora) e usa l'opzione
--enable-selinux di ./configure.
Informazioni dettagliate sull'uso di firejail da git sono disponibili nella wiki.
Nota: assicurati di usare il percorso completo del programma (ad esempio, firejail /usr/bin/firefox invece di firejail firefox) per evitare potenziali problemi
di firejail-in-firejail (vedi
#2877).
Per avviare la sandbox, anteponi firejail al tuo comando:
firejail /usr/bin/firefox # starting Mozilla Firefox
firejail /usr/bin/transmission-gtk # starting Transmission BitTorrent
firejail /usr/bin/vlc # starting VideoLAN Client
sudo firejail /etc/init.d/nginx start
Esegui firejail --list in un terminale per elencare tutte le sandbox attive. Esempio:
$ firejail --list
1617:netblue:/usr/bin/firejail /usr/bin/firefox-esr
7719:netblue:/usr/bin/firejail /usr/bin/transmission-qt
7779:netblue:/usr/bin/firejail /usr/bin/galculator
7874:netblue:/usr/bin/firejail /usr/bin/vlc --started-from-file file:///home/netblue/firejail-whitelist.mp4
7916:netblue:firejail --list
Integra la tua sandbox nel desktop eseguendo i seguenti due comandi:
firecfg --fix-sound
sudo firecfg
Il primo comando risolve alcuni bug di memoria condivisa/namespace PID nel software PulseAudio precedente alla versione 9. Il secondo comando integra Firejail nel tuo desktop. Dovrai disconnetterti e riconnetterti per applicare le modifiche a PulseAudio.
Avvia i tuoi programmi come sei abituato: menu del gestore del desktop, file manager, launcher del desktop.
L'integrazione si applica a qualsiasi programma supportato per impostazione predefinita da Firejail. Ci sono oltre 900 applicazioni predefinite nell'attuale versione di Firejail, e il numero aumenta a ogni nuova release.
Manteniamo l'elenco delle applicazioni in src/firecfg/firecfg.config (/etc/firejail/firecfg.config quando installato).
La maggior parte delle opzioni della riga di comando di Firejail può essere passata alla sandbox tramite i file di profilo.
Puoi trovare i profili per tutte le applicazioni supportate in etc/ (/etc/firejail/ quando installato).
Teniamo anche un elenco di correzioni dei profili per le versioni precedenti in etc-fixes/.
Se mantieni profili di sicurezza Firejail aggiuntivi in un repository pubblico, invitaci un link:
Usa questo issue per richiedere nuovi profili:
Puoi anche usare questo strumento per ottenere l'elenco delle syscall necessarie a un programma:
firecfg crea link simbolici in /usr/local/bin, quindi per rimuovere completamente firejail, esegui quanto segue prima di disinstallare:
sudo firecfg --clean
Vedi man firecfg per i dettagli.
Nota: i link simbolici rotti vengono ignorati durante la ricerca di un eseguibile in $PATH,
quindi disinstallare senza eseguire i passaggi precedenti non dovrebbe causare problemi.
LANDLOCK
Landlock is a Linux security module first introduced in version 5.13 of
the Linux kernel. It allows unprivileged processes to restrict their
access to the filesystem. Once imposed, these restrictions can never
be removed, and all child processes created by a Landlock-restricted
processes inherit these restrictions. Firejail supports Landlock as an
additional sandboxing feature. It can be used to ensure that a sand‐
boxed application can only access files and directories that it was ex‐
plicitly allowed to access. Firejail supports populating the ruleset
with both a basic set of rules (see --landlock) and with a custom set
of rules.
Important notes:
- A process can install a Landlock ruleset only if it has either
CAP_SYS_ADMIN in its effective capability set, or the "No New
Privileges" restriction enabled. Because of this, enabling the
Landlock feature will also cause Firejail to enable the "No New
Privileges" restriction, regardless of the profile or the
--nonewprivs command line option.
- Access to the /proc directory is managed through the --land‐
lock.proc command line option.
- Access to the /etc directory is automatically allowed. To
override this, use the --writable-etc command line option. You
can also use the --private-etc option to restrict access to the
/etc directory.
To enable Landlock self-restriction on top of your current Firejail se‐
curity features, pass --landlock flag to Firejail command line. You
can also use --landlock.read, --landlock.write, --landlock.special and
--landlock.execute options together with --landlock or instead of it.
Example:
$ firejail --landlock --landlock.read=/media --landlock.proc=ro /usr/bin/mc
Un piccolo strumento per stampare le statistiche dei profili. Compila e installa come al solito. Lo strumento viene installato nella directory /usr/lib/firejail.
Eseguilo sui profili in /etc/profiles:
$ /usr/lib/firejail/profstats /etc/firejail/*.profile
No include .local found in /etc/firejail/noprofile.profile
Warning: multiple caps in /etc/firejail/tidal-hifi.profile
Warning: multiple caps in /etc/firejail/tqemu.profile
Warning: multiple caps in /etc/firejail/transmission-daemon.profile
Warning: multiple caps in /etc/firejail/trivalent.profile
Stats:
profiles 1342
include local profile 1341 (include profile-name.local)
include globals 1307 (include globals.local)
blacklist ~/.ssh 1201 (include disable-common.inc)
seccomp 1213
capabilities 1335
noexec 1214 (include disable-exec.inc)
noroot 1105
memory-deny-write-execute 320
restrict-namespaces 1048
apparmor 869
private-bin 817
private-dev 1172
private-etc 842
private-cache 865
private-lib 86
private-tmp 1036
whitelist home directory 662
whitelist var 975 (include whitelist-var-common.inc)
whitelist run/user 1305 (include whitelist-runuser-common.inc
or blacklist ${RUNUSER})
whitelist usr/share 760 (include whitelist-usr-share-common.inc
net none 452
dbus-user none 766
dbus-user filter 206
dbus-system none 970
dbus-system filter 13
Avvio rapido |
Sicurezza avanzata del browser |
Sicurezza del browser Tor |