¡Hola! Bienvenido a Desde Linux. ¿Acaso estás harto de los pantallazos azules y los virus? Entonces, no dudes en migrar a Linux. Si recién empiezas, te recomendamos pasar por nuestra sección para Novatos. En caso de que estés buscando una Distribución Linux, tenemos guías para ayudarte a elegir la mejor. También contamos con un listado de Programas para reemplazar a los que usabas en Windows. No olvides utilizar la barra aquí debajo para obtener ayuda adicional.

Script avanzado en Bash (bash+md5) para proteger ‘algo’ (+Explicación detallada)

Hace unos días les hablé de FlatPress, una aplicación web (CMS) mediante el cual pueden tener un blog o algo similar sin necesidad de usar bases de datos, ni complicarse mucho :)

Bueno, yo tengo en mi laptop un FlatPress para apuntes personales, cosas que no quiero olvidar y por eso los escribo en esta bitácora personal. Pero, como varios ya deben saber… yo soy algo paranoico con la seguridad, y, si es referente a la seguridad de MIS pensamientos, no tienen idea de qué tan paranoico puedo llegar a ser :D

Entonces me enfrenté al problema: ¿Cómo usando FlatPress puedo proteger todo el contenido del mismo?

Pensé en varias aplicaciones que permiten cifrar datos, mas… ninguna hacía exactamente lo que deseaba, por eso me dí a la tarea de programar yo mismo lo que quería.

Ahora les mostraré un script que hice, el cual hace lo siguiente:

El script está diseñado para funcionar en KDE, si no tienen KDE los cuadros de diálogo no les aparecerán.

1. Muestra un cuadro de diálogo preguntando si eres KZKG^Gaara, si presionas NO se cierra el script, si presionas SI continúa todo normal.2. Muestra un cuadro de texto preguntando cuál es el password:

3. Si presionas Cancelar se cierra el script, ahora viene uno de los trucos del script ;) …

3.1. La lógica es que el script compare el password que escribimos con uno que esté predefinido dentro del mismo script ya, y si los passwords concuerdan entonces sigue ejecutándose, y si los passwords no concuerdan pues que aparezca un mensaje de error. El problema es que, si ponemos el password correcto dentro del script así sin más, cualquiera que abra el script con un editor de texto podría ver muy claramente el password correcto.. y esto amigos míos, es simplemente una falla imperdonable :)

3.2. Para evitar poner el password así en texto plano en el script, yo usé MD5. O sea, al inicio del script, yo declaré que el password correcto es “2dac690b816a43e4fd9df5ee35e3790d“, y este es el MD5 de: “desdelinux“. … No entiendo nada!! … :D

Detallemos un poco más. Si yo ahora escribo en un archivo (por ejemplo, ~/pass.txt) de texto: desdelinux

Si en una terminal escribo: md5sum ~/pass.txt

Me devolverá: 2dac690b816a43e4fd9df5ee35e3790d sum

Y… como pueden ver, esa primera columna que tiene montón de números y letras sin orden aparente, es idénticamente igual a la que puse más arriba, y es la que está en el script declarada.

Bien, esa primera columna es el MD5 de desdelinux ;)

Si ponen lo siguiente les devolverá solamente la 1ra columna, que es la que nos interesa: md5sum ~/pass.txt | awk '{print $1}'

4. Entonces, el funcionamiento del script en esta parte en específico es:

4.1. El script pondrá el password que hayas escrito tú en un archivo temporal llamado temp.txt, y sacará el MD5 del contenido de ese archivo mediante el comando:

md5sum temp.txt | awk '{print $1}'

4.2. Si el MD5 del password que acabas de escribir NO es idénticamente igual al que él tiene definido (o sea, que el que está escrito en el script) se cerrará y dará un error:4.3. Si el password coincide, perfecto… el script continúa :D

5. Al coincidir el password, el script hará una serie de pasos, en mi caso:

5.1. Entrará a la carpeta /home/shared/hosted/cd /home/shared/hosted/

5.2. La carpeta de FlatPress se llama “me”, y está comprimida en .RAR protegido con password (el password es el mismo que se debe poner antes), por lo que el script va a descomprimir ese archivo (me.rar) -» rar x me.rar -hp$MWORD

rar x -» Lo que hace es descomprimir archivos y carpetas manteniendo el mismo orden que tienen.

me.rar -» Este es el archivo que deseo descomprimir.

-hp$MWORD -» Aquí le indico que debe usar password para descomprimir el archivo, y el password es la variable $MWORD (esta variable es el password que introdujimos antes)

5.3. Entonces, si se descomprimió bien, paso a borrar el archivo me.rar … ¿por qué?, bueno, porque no tiene sentido que exista el .rar si estoy trabajando con los archivos que tenía dentro, y esos archivos están cambiando pues estoy escribiendo cosas nuevas en el blog -» rm me.rar

5.4. Le debo cambiar los permisos para que funcione bien todo -» chmod 777 -R me/ (recuerden que la carpeta me/ es lo que contenía el comprimido me.rar)

5.5. Me mostrará una ventana que me indica que tengo 10 segundos para abrir “el” navegador…. WTF!, ¿esto qué significa? …

5.5(a). Simple, muy simple… :) … Yo abro el navegador (en este caso Rekonq) y estoy trabajando en algún post nuevo, pero al momento de cerrar el navegador, el script vuelve a comprimir en .rar la carpeta me/ (quedando en me.rar).

Esto es posible porque el script está comprobando cada 3 segundos si Rekonq está abierto o no, si detecta que sí está abierto, el script no hace nada, pero si detecta que NO está abierto, pasa a ejecutar: rar a me.rar -hp$MWORD me/* && rm -R me/

Lo cual significa que va a comprimir la carpeta me/ en me.rar (y le pondrá password, que sería el mismo que hemos visto ya), y una vez que la comprima y si no hubo errores, pasará a borrar la carpeta me/ con todo su contenido.

5.5(b). ¿Esto en qué nos ayuda? … simple, esto nos evita tener que acordarnos de que debemos volver a proteger nuestro contenido, pues solo necesitamos dejar de trabajar en él (cerrar el navegador) y el script hará todo el resto del trabajo ;)

6. Listo, esto viene siendo todo explicado de forma general :)

… aunque aún hay otro detalle :D

El script tiene una protección aún mayor, protección que está deshabilitada (comentada) son estas líneas:

if [ "$USER" != "$ME" ]; then
rm *.sh
kdialog --error "Sorry but u are not me. Auto-destroying..." --title "Im Me..."
exit
fi

Esto lo que hace es simple. La variable $USER es una variable global del sistema, si en una terminal ponen:

echo $USER

Verán que les muestra el usuario de ustedes… bueno, la lógica de estas líneas es simple.

Si $USER no coincide con la variable $ME (y esta la declaré yo en el script, y es: “gaara”) el script borrará TODOS los archivos .sh que estén en esa carpeta, o sea, se autodestruirá ;)

Esto es para prevenir que alguien más ejecute el script en otro ordenador jejejeje.

Y bueno, no creo que haya mucho más que explicar, les dejo el script:

Descarga de archivo .SH

Ver el script en nuestro Paste

Sé que a muchos les resultará sumamente complejo, pero en realidad asusta más de lo que debería… el script tiene una lógica de funcionamiento realmente simple, para un propósito simple.

Esto lo hice para suplir una necesidad muy específica mía, lo comparto esperando que alguna que otra línea o idea acá explicada le pueda servir a alguien ;)

Por cierto, el script está pensado para KDE, porque los cuadros de diálogo (las ventanas) que muestra son de KDE (usando KDialog), pero se puede adaptar para Gnome/Unity/Cinnamon/Mate usando Zenity, o bien usarlo 100% en terminal usando simplemente el comando dialog.

Y sí, aún el script tiene alguna que otra falla, por ejemplo si el script descomprime el .rar, y luego alguien cierra a la fuerza (mata) el script, el contenido del .rar quedará desprotegido, son algunos detalles que quedan por pulir… pero eh!, que también nosotros debemos controlar que nadie pueda revisar nuestro ordenador :D

Para finalizar quiero aclarar que yo NO soy programador ni mucho menos, no me considero tal, imagino que se puede optimizar líneas en el código, o usar alguna función para mejorar el funcionamiento del script… pero lo dicho, no soy programador ;)

Cualquier duda que tengan al respecto me dicen, si bien el script puede que no les sirva pues no lo necesitan, siempre podrán aprender algún que otro tip de él :D

Saludos

PD: Sé que elav dirá que soy demasiado paranoico… o que desperdicio mi tiempo, pero no es así. Quería algo muy específico, un sistema muy específico de seguridad, y me lo programé yo mismo… ¿qué tan geek es eso? … LOL!!


KZKG^Gaara

KZKG^Gaara: Usuario de GNU/Linux y administrador de red desde hace algunos años. Intento mantenerme en el lado oscuro de la fuerza, pues es donde está lo divertido de la vida. Administrador y Fundador de todo esto que ven, pero uno más dentro de la familia.


No olvides dejar tu comentario

Tu dirección de correo electrónico no será publicada.

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current day month ye@r *

  1. lector
    • autor
      • lector
        • autor
  2. lector
  3. lector
  4. lector
  5. Citux redactor
  6. lector
    • autor
  7. lector
    • autor
    • lector
      • autor
        • lector
          • lector
          • lector
          • autor
  8. lector
    • autor
  9. lector
  10. lector
    • autor
  11. Elynx lector
  12. lector
    • autor
      • lector
        • lector
  13. lector
    • autor
    • autor
  14. lector
  15. Neo61 lector

DesdeLinux y DesdeFirefoxOS se encuentran felizmente hosteados en GNUTransfer