Propósito: Esta entrada de blog le explicará cómo cifrar un script de shell en Linux o un sistema basado en Unix. Aunque puede haber otras maneras de cifrar la secuencia de comandos shell me pareció que éste era el más fácil de usar. Vamos a cifrar la secuencia de comandos usando la SHC utilidad. He estado usando esta utilidad desde el pasado 3 años y funciona muy bien en situaciones donde se desea que los usuarios ejecutar el script de shell, pero al mismo tiempo no quiere que vean el código fuente del script de shell. Así que vamos a empezar ...

Paso 1: Descargar u obtener la fuente

Afortunadamente Debian Etch tiene . "deb" paquete para la utilidad shc así que vamos a usar. En un sistema Debian Etch hacer:

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

Ahora vaya al paso 3 si usted está en un sistema Debian Etch. Si usted está en un sistema de Lenny luego siga el paso 2.

Si usted está en el sistema Debian Lenny (posibilidades son muy altas), entonces usted tendrá que descargar el archivo ". Deb" archivo del repositorio Debian Etch. Usted o descargarlo desde aquí o se puede dar el siguiente 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

Esto descargará el archivo llamado shc_3.8.6-2_i386.deb en el directorio desde el que dio la orden anterior.

Si usted está en un sistema que no sea Debian, puede descargar el archivo tar desde aquí o dando el comando:

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

Paso 2: Instale el archivo (sólo para usuarios de Debian Lenny o Debian Sid) "deb".

. "Deb" Una vez que haya descargado el archivo en su sistema Linux, instalarlo con el comando dpkg:

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

Sólo tiene que hacer lo anterior en un sistema de Lenny. Si usted está en un sistema Debian Etch que se instale automáticamente.

Paso 3: Cifrar el script de shell

Ahora controlar la secuencia de comandos de shell que desea cifrar. En este ejemplo, vamos a utilizar una secuencia de comandos de shell bash llamado cleanlog.sh cuyos contenidos son los siguientes:

#!/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!"

Ahora le damos el siguiente comando para cifrar la secuencia de comandos shell:

# shc -f cleanlog.sh

Se cuenta que el comando anterior crea dos archivos:

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

cleanlog.sh.x - es el archivo binario de cifrado que se utilizará

cleanlog.sh.xc - es el archivo de código fuente de C.

Básicamente, las cubiertas de comandos SHC el script del shell en un programa de C primero y luego se compila el programa C en un binario utilizando un algoritmo de cifrado:

Shell script-> C Programa> código fuente ejecutable binario

Usted puede eliminar el archivo cleanlog.sh.xc y la secuencia de comandos shell original, cleanlog.sh, segura.

Paso 4: Ejecutar el script shell encriptado

Ahora ya está listo para ejecutar el script shell:

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

Notas adicionales

1. Hay algunas interesantes características que se pueden activar haciendo pasar algunas opciones para el comando shc. Por ejemplo, haga lo siguiente:

# 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
#

Las opciones anteriores:

"-F" - Indica que el nombre del archivo a continuación y se debe dar cada vez.

"-V" - Indica comando shc ser verboase

"-R" - Indica comando shc para relajar las medidas de seguridad, es decir hacer un binario redistribuible que se ejecuta en diferentes sistemas que ejecutan el mismo sistema operativo (de la página man).

Así, por ejemplo, si se intenta ejecutar el binario generado en el paso 4 (es decir, sin dar la opción "-r") en un sistema Linux diferente (copiando el archivo ejecutable desde el sistema en el que se compiló a otro sistema Linux) que no será capaz de ejecutarlo y recibirá un mensaje de error como este:

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

2. Además, hay otras opciones como la continuación de lo cual se puede probar:

  -E fecha
           Fecha de vencimiento en formato dd / mm / aaaa [ninguna] 
  Mensaje-m
           mensaje que se mostrará al vencimiento ["Póngase en contacto con
           su proveedor "] 

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

3. Si se obtienen los siguientes mensajes de error al dar el comando anterior:

# 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'
.....................
.....................

a continuación, dar el siguiente comando:

# apt-get install gcc libc6-dev

Por último, pero no menos importante. No hay garantía de que esta utilidad le proporcionará una fuerte protección de seguridad. Los usuarios experimentados o hackers que tienen conocimientos suficientes sobre "gdb" u otras herramientas de depuración puede descifrar la secuencia de comandos shell. A pesar de que son un buen punto de comenzar a cifrar (ocultar) los scripts de shell de los usuarios "normales" si usted es un administrador del sistema.

Eso es todo amigos. Disfrute de cifrar las secuencias de comandos de shell.

Be Sociable, Share!