Scopo: Questo blog vi spiegherà come crittografare uno script di shell sul vostro Linux o un sistema basato su Unix. Anche se ci potrebbero essere altri modi per cifrare i vostri script di shell ho trovato questo uno dei più facili da usare. Noi criptare lo script usando il SHC utilità. Ho utilizzato questa utility da ultimi 3 anni e funziona benissimo in situazioni in cui si desidera che gli utenti di eseguire lo script di shell, ma allo stesso tempo non si vuole loro di vedere il codice sorgente dello script di shell. Quindi cerchiamo di iniziare ...

Passo 1: Scaricare o ottenere la fonte

Fortunatamente Debian Etch ha ". deb" pacchetto per l'utility SHC così lo useremo. Su un sistema Debian Etch fare:

# apt-get update;
# apt-get install shc

Ora, andare al passo 3 se si è su un sistema Debian Etch. Se siete su un sistema di Lenny quindi seguire il passo 2.

Se siete su sistema Debian Lenny (le probabilità sono molto alte), allora si avrà bisogno di scaricare il file ". Deb" da repo Debian Etch. È scaricarlo da qui o si può dare il seguente comando:

# apt-get update; apt-get install wget
# wget http://http.us.debian.org/debian/pool/main/s/shc/shc_3.8.6-2_i386.deb

Questo scaricherà il file denominato shc_3.8.6-2_i386.deb nella directory da cui si invoca il comando.

Se siete su un sistema diverso da Debian, è possibile scaricare il tarball da qui o dando il comando:

fedora# wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.6.tgz

Fase 2: Installare il file (solo per utenti su Debian Lenny o Debian Sid) "deb".

". Deb" Una volta scaricato il file sul vostro sistema Linux, installarlo usando il comando dpkg:

# dpkg -i <file-you-downloaded-from-step1>
Example:
# dpkg -i shc_3.8.6-2_i386.deb

Hai solo bisogno di fare quanto sopra su un sistema di Lenny. Se siete su un sistema Debian Etch che viene installato automaticamente.

Fase 3: Crittografare il vostro script di shell

Ora entrare in possesso del vostro script di shell che si desidera crittografare. In questo esempio, useremo un shell script bash chiamato cleanlog.sh cui contenuti sono i seguenti:

#!/bin/bash
echo "Starting to clear Log files..."
cd /var/log;
find ./ -type f -print >> list.txt
cat list.txt | while read a_line
do
cat /dev/null > $a_line;
done
cd;
echo "Log files cleared!"

Ora dare il seguente comando per cifrare il vostro script di shell:

# shc -f cleanlog.sh

Avrete notato che il comando precedente crea due file:

# ls -l
cleanlog.sh.xc
cleanlog.sh.x

cleanlog.sh.x - è il file binario crittografato che useremo

cleanlog.sh.xc - è il file di codice sorgente C.

Fondamentalmente le SHC copritrici comando lo script di shell in un programma C prima e poi compila il programma C in un binario utilizzando un algoritmo di crittografia:

Shell Script-> C sorgente del programma-> codice eseguibile binario

È possibile eliminare il file cleanlog.sh.xc e la vostra shell script originale, cleanlog.sh, in modo sicuro.

Fase 4: eseguire il vostro script di shell criptato

Ora si è pronti per eseguire il vostro script di shell:

# ./cleanlog.sh
Starting to clear Log files...
Log files cleared!
#

Note aggiuntive

1. Ci sono alcune caratteristiche interessanti che è possibile attivare alcune opzioni da passare al comando SHC. Per esempio fare questo:

# shc -v -r -f cleanlog.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc cleanlog.sh.xc -o cleanlog.sh.x
shc: strip cleanlog.sh.x
shc: chmod go-r cleanlog.sh.x
#

Le opzioni di cui sopra:

"-F" - dice che il nome del file segue e deve essere data ogni volta.

"-V" - Indica a comando SHC essere verboase

"-R" - Indica a comando SHC per rilassare la misura di sicurezza ovvero fare un binario ridistribuibile che esegue su sistemi diversi con lo stesso sistema operativo (dalla pagina di manuale).

Così, per esempio, se si tenta di eseguire il file binario generato dal punto 4 (cioè non dando l'opzione "-r") su un sistema Linux diverso (copiando l'eseguibile dal sistema su cui è stato compilato per un altro sistema Linux) è non sarà in grado di eseguirlo e si otterrà un messaggio di errore come questo:

system2# ./cleanlog.sh.x
./cleanlog.sh.x: ªÃ¨«ZÉÆ¥«ÞÀãì+
ï'ÛìHhas expired!
Please contact your provider
system2:~#

2. Inoltre, ci sono altre opzioni, come anche in seguito, che può provare:

  -E data
           Data di scadenza nel formato gg / mm / aaaa [Nessuno] 
  -M messaggio
           messaggio da visualizzare allo scadere ["Vi preghiamo di contattarci
           il fornitore "] 

# shc -v -r -e 01/17/2009 -m "Your program has expired" -f cleanlog.sh

3. Se si ottiene il seguente messaggio di errore su di dare il comando di cui sopra:

# shc -f cleanlog.sh
cleanlog.sh.xc:108:22: error: sys/stat.h: No such file or directory
cleanlog.sh.xc:109:23: error: sys/types.h: No such file or directory
cleanlog.sh.xc:111:19: error: errno.h: No such file or directory
cleanlog.sh.xc:112:19: error: stdio.h: No such file or directory
cleanlog.sh.xc:113:20: error: stdlib.h: No such file or directory
cleanlog.sh.xc:114:20: error: string.h: No such file or directory
cleanlog.sh.xc:115:18: error: time.h: No such file or directory
cleanlog.sh.xc:116:20: error: unistd.h: No such file or directory
cleanlog.sh.xc: In function 'key_with_file':
cleanlog.sh.xc:178: error: array type has incomplete element type
cleanlog.sh.xc:179: error: array type has incomplete element type
cleanlog.sh.xc:185: warning: incompatible implicit declaration of built-in function 'memset'
.....................
.....................

poi dare il seguente comando:

# apt-get install gcc libc6-dev

Ultimo ma non meno importante. Non vi è alcuna garanzia che questa utility vi fornirà una forte protezione di sicurezza. Gli utenti esperti o hacker che hanno una conoscenza sufficiente di "gdb" o altri strumenti di debugger in grado di decifrare il tuo script di shell. Anche se non forniscono un buon punto ha iniziato a criptare (nascondere) gli script di shell da parte degli utenti "regolari", se sei un amministratore di sistema.

Questo è tutto gente. Godetevi la crittografia dei script di shell.

Be Sociable, Share!