Ci sono dei casi in cui può risultare utile criptare il contenuto di uno script bash per rendere il codice non accessibile o per proteggere alcune informazioni sensibili.
Fino a qualche tempo fa nei repository Ubuntu e Debian esisteva un pacchetto chiamato shc. SHC è un compilatore che consente di criptare in modo semplice e veloce i nostri script bash. SHC è stato realizzato da Francisco Javier Rosales García. Attualmente shc non è più presente nei repository di Ubuntu, ma ho provveduto a pacchettizzarlo e a inserirlo nel mio ppa.
INSTALLAZIONE
Per installare SHC su Ubuntu Natty Narwhal 11.04 vi basta aggiungere il mio ppa eseguendo:
sudo add-apt-repository ppa:ingalex/sources.list
Poi procedete all’installazione eseguendo:
sudo apt-get update
sudo apt-get install shc
CRIPTARE SCRIPT BASH
Supponiamo di voler criptare uno script chiamato script.sh. Allora ci basta eseguire:
shc -v -r -f script.sh
Verranno generati due file con i seguenti nomi:
script.sh.x : questo è il file binario eseguibile criptato che potremo utilizzare
script.sh.x.c : questo è il file contenente il codice sorgente C
In pratica shc converte prima lo script bash in un programma C e poi in un binario usando un algoritmo di crittografia:
Shell Script-> C source code Program-> binario eseguibile
Quindi potete cancellare senza problemi il file script.sh.x.c e il vostro eseguibile originale script.sh se non dovete applicare ulteriori modifiche.
Esistono varie opzioni a disposizione:
OPTIONS The command line options are:
-e date Expiration date in dd/mm/yyyy format [none]
-m message message to display upon expiration ["Please contact your provider"]
-f script_name File name of the script to compile
-i inline_option Inline option for the shell interpreter i.e: -e
-x comand eXec command, as a printf format i.e: exec(\\’%s\\’,@ARGV);
-l last_option Last shell option i.e: –
-r Relax security. Make a redistributable binary which executes on different systems running the same operating system.
-v Verbose compilation
-D Switch on debug exec calls
-T Allow binary to be traceable (using strace, ptrace, truss, etc.)
-C Display license and exit
-A Display abstract and exit
-h Display help and exit