Introduzione
Ci sono due distinti tipi di profili: blacklisted e whitelisted. Nei profili blacklisted l'utente nega all'applicazione di accedere a specifici files. Mentre nei profili whitelisted l'utente concede all'applicazione i diritti di accesso a specifici file necessari all'applicazione per girare, mentre viene negato l'accesso a tutto il resto. Presentiamo di seguito entrambi i casi. Per maggiori informazioni puoi leggere il documento su GitHub che spiega più nel dettaglio come sviluppare un profilo da zero.
I profili blacklisted (accesso a tutto tranne i file specificati).
Molte opzioni di configurazione della linea di comando di Firejail possono essere passate al programma usando i file del profilo. I file dei profili sono raccolti nella directory ~/.config/firejail. Assumendo che nome_app è il nome del comando dal quale vuoi lanciare la tua applicazione, i passi per la creazione di un profilo personalizzato sono i seguenti:
1. Crare la cartella ~/.config/firejail nella tua home directory.
$ cd ~
$ mkdir -p .config/firejail
$ cd .config/firejail
2. Copiare in questa cartella il profilo di default usato da Firejail per lanciare applicazioni generiche:
cp /etc/firejail/default.profile nome_app.profile
Il file del nuovo profilo – nome_app.profile – deve avere lo stesso nome dell'applicazione con l'aggiunta del suffisso .profile . Per esempio se vuoi fare un profilo per mplayer il nome del file del profilo sarà mplayer.profile.
3. Adesso modificare il file appena copiato, commentare le linee, negare l'accesso a cartelle concedere l'accesso files ecc. Consulta “man 5 firejail-profile” per una descrizione dei comandi e la loro sintassi.
4. Far partire la tua applicazione con:
$ firejail nome_app
Nel momento in cui fai partire l'applicazione vedrai che firejail leggerà il file del profilo precedentemente copiato ed editato in ~/.config/firejail/nome_app.profile:
$ firejail nome_app
Reading profile /home/username/.config/firejail/app_name.profile
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-programs.inc
Reading profile /etc/firejail/disable-passwdmgr.inc
Profili whitelisted (concedi l'accesso a specifici files e nega a tutto il resto).
1. Crea una semplice sandbox basata su bash usando l'opzione --private. La sandbox ha una home directory vuota al cui interno c'è solo la struttura dei files (skeleton) necessari a far girare applicazioni grafiche (GUI). La cartella si appoggia ad un filesystem temporaneo (tmpfs). E quando la sandbox viene chiusa o terminato tutti i files nella cartella verranno distrutti, mentre la normale home directory verrà ripristinata.
2. Far partire il programma all'interno della sessione bash. I uso il gioco Simutrans come esempio (sudo apt-get install simutrans). Gioco per un po', quindi lo chiudo e listo tutti i file nella cartella col comando find .
Nota che il gioco crea una cartella ~/.simutrans dove salva le configurazioni del gioco e i dati. Questa è l'unica cartella che deve essere whitelisted. Adesso abbiamo tutte le informazioni necessaria, quindi digitiamo exit e chiudiamo la sandbox.
3. Ora crea il nuovo profilo dentro la cartella ~/.config/firejail usando il tuo editor di file preferito. Il nome del file è sempre nome_app.profile, in questo caso simutrans.profile. Il contenuto del file è come segue:
# simutrans profile
noblacklist ~/.simutrans
mkdir ~/.simutrans
whitelist ~/.simutrans
include /etc/firejail/whitelist-common.inc
include /etc/firejail/default.profile
Nel caso non esista, uso mkdir per creare la nuova cartella ~/.simutrans nella vera home directory dell'utente e la whitelisto (cioè gli concedo all'applicazione i diritti di accesso alla cartella). Porto anche all'interno della configurazoine cose come i fonts i temi le GTK le QT ecc. ecc. includendo il file /etc/firejail/whitelist-common.inc. Alla fine includo anche la configurazione di default per negare l'accesso (blacklisting) ad una lista di file dall' include /etc/firejail/default.profile in modo da importare i filtri di sicurezza come seccomp e capabilities.
4. Testo il nuovo profilo: