05 gennaio 2021

Firejail tutorial: creare un profilo custom

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.

Start a private sandbox and list the default files in home directory

Qui viene avviata una sandbox privata e si mostra i file di default che si trovano al suo interno (tmpfs).


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 .

Run the program, and list again the files in home directory

Il software che gira e nuovamente listo i files nella home directory.

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:

Test the new profile.

Test sul nuovo profilo.

 

 Esempio con curl.

Voglio portarvi un esempio per isolare uno script in bash basato su curl. Il seguente è lo script:


$ cat mioip

curl --silent ifconfig.co >> /home/mioutente/jails/curl/mioip.log

$ pwd

/home/mioutente/jails/curl

 Lo script serve a loggare il mio ip esterno all'interno del file ~/jails/curl/mioip.log e lo script si trova nella stessa cartella ~/jails/curl/.

Voglio far girare lo script ma senza che possa accedere ad altre cartelle o file fuori dalla sua home. Quindi imposto il seguente profilo:

$ cat ~/.config/firejail/mioip.profile

quiet
noblacklist ~/jails/curl
whitelist ~/jails/curl
include /etc/firejail/whitelist-common.inc
include /etc/firejail/default.profile

a questo punto posso runnare lo script mioip passandoglio il path del profile che impedirà al processo di uscire dalla sandbox. In questo modo:

$ cd ~/jails/curl/ && firejail --profile=~/.config/firejail/mioip ./mioip