Construye paso a paso tu programa usando Shell Scripting – Parte 5

En anteriores publicaciones de esta ronda llamada “Construye paso a paso tu programa usando Shell Scripting” hemos abarcado ya sobre como implementar los siguientes módulos:

Ahora en esta nueva publicación veremos como implementar un:

MODULO DE AUTORIZACIÓN DE USUARIO CON CONTRASEÑA

El cual debería ser el modulo (sección) de su programa que le permita asegurar que solo el o los usuarios previamente definidos para utilizar el mismo puedan ejecutar las operaciones designadas para su programa. El mismo puede incluir o no, una contraseña para dichos usuarios autorizados. En este caso, exploraremos uno con validación de usuario y contraseña.

Yo personalmente agrego las siguientes lineas para crear dicho módulo:

A continuación el código:


###############################################################################
# INICIO DEL MODULO DE AUTORIZACIÓN DE USUARIO CON CONTRASEÑA
###############################################################################

setterm -background blue

espeak -v es-la+m1 -a 100 -p 50 -s 150 -b UTF-8 --stdout "ESTIMADO USUARIO: RECUERDA QUE EL LINUX POST INSTALL SCRIPT BICENTENARIO SOLICITA TU AUTENTICACION Y VALIDACION PARA EVITAR USOS INDEBIDOS POR PARTE DE PERSONAL NO AUTORIZADO. EN CASO DE NO SABER USUARIO Y CONTRASEÑA, ESCRIBA SALIR EN MAYUSCULA." | aplay -q

echo "ESTIMADO USUARIO: RECUERDA QUE EL LINUX POST INSTALL SCRIPT BICENTENARIO SOLICITA TU AUTENTICACION Y VALIDACION PARA EVITAR USOS INDEBIDOS POR PARTE DE PERSONAL NO AUTORIZADO. EN CASO DE NO SABER USUARIO Y CONTRASEÑA ESCRIBA, SALIR EN MAYUSCULA." | clear

dialog --infobox "\n \n \nESTIMADO USUARIO: RECUERDA QUE EL LINUX POST INSTALL SCRIPT BICENTENARIO SOLICITA TU AUTENTICACION Y VALIDACION PARA EVITAR USOS INDEBIDOS POR PARTE DE PERSONAL NO AUTORIZADO. EN CASO DE NO SABER USUARIO Y CONTRASEÑA, ESCRIBA SALIR EN MAYUSCULA." 10 80

################################################################################

USUARIO=0

until [ "$USUARIO" = "sysadmin" ];

do

espeak -v es-la+m1 -a 100 -p 50 -s 150 -b UTF-8 --stdout "ESTIMADO USUARIO: INTRODUZCA UN NOMBRE DE USUARIO VALIDO." | aplay -q

read -p "INTRODUZCA UN NOMBRE DE USUARIO VALIDO / PLEASE ENTER A VALID USER: " USUARIO
echo ""

if [ "$USUARIO" = "SALIR" ]; then

   setterm -background green
   play /usr/share/sounds/warning.wav 2> /dev/null

   echo -e "\nUsted ha decidido salir del Programa, hasta luego.\nYou have decided to leave the program, later.\n\n\nPuede intentarlo mas tarde.\nYou can try later."

   exit 0

fi


if [ "$USUARIO" != "$USR1_VALID" ]; then

   setterm -background red
   play /usr/share/sounds/error.wav 2> /dev/null

   echo -e "\nError al introducir un Usuario valido.\nFailed to enter a valid user.\n\n\nVuelva a intentarlo de nuevo.\nPlease try again."

fi

done

if [ "$USUARIO" = "$USR1_VALID" ]; then

   setterm -background blue
   play /usr/share/sounds/info.wav 2> /dev/null

   echo -e "\nAuntenticación de Usuario valido exitosa.\nValid user authentication successful.\n\n\nEspere unos segundos para continuar.\nWait a few seconds before continuing"

   sleep 3

fi

################################################################################

CLAVE=0

until [ "$CLAVE" = "lpi*sb8" ];

do

espeak -v es-la+m1 -a 100 -p 50 -s 150 -b UTF-8 --stdout "ESTIMADO USUARIO: INTRODUZCA UNA CONTRASEÑA VALIDA." | aplay -q

read -p "INTRODUZCA UNA CONTRASEÑA VALIDA / ENTER A VALID PASSWORD: " CLAVE
echo ""

if [ "$CLAVE" = "SALIR" ]; then

   setterm -background green
   play /usr/share/sounds/warning.wav 2> /dev/null

   echo -e "\nUsted ha decidido salir del Programa, hasta luego.\nYou have decided to leave the program, later.\n\n\nPuede intentarlo mas tarde.\nYou can try later."

   exit 0

fi


if [ "$CLAVE" != "$PASSWD_VALID" ]; then

   setterm -background red
   play /usr/share/sounds/error.wav 2> /dev/null

   echo -e "\nError al introducir una Contraseña valida.\nFailed to enter a valid password.\n\n\nVuelva a intentarlo de nuevo.\nPlease try again."

fi

done

################################################################################

if [ "$CLAVE" = "$PASSWD_VALID" ]; then

   setterm -background blue
   play /usr/share/sounds/info.wav 2> /dev/null

   echo -e "\nAuntenticación de Contraseña valida exitosa.\nValid password authentication successful.\n\n\nEspere unos segundos para continuar.\nWait a few seconds before continuing"

   sleep 3

fi

espeak -v es-la+m1 -a 100 -p 50 -s 150 -b UTF-8 --stdout "ESTIMADO USUARIO: ACCESO GARANTIZADO - USUARIO Y CONTRASEÑA CORRECTA" | aplay -q

echo "ESTIMADO USUARIO: ACCESO GARANTIZADO - USUARIO Y CONTRASEÑA CORRECTA." | sleep 5 | clear

dialog --infobox "\n \n \nESTIMADO USUARIO: ACCESO GARANTIZADO - USUARIO Y CONTRASEÑA CORRECTA." 10 80 ; sleep 5

DIALOG=${DIALOG=dialog}

$DIALOG --title "LINUX POST INSTALL - SCRIPT BICENTENARIO" --clear \
        --yesno "\n \n \nBIENVENIDO USUARIO: $(whoami), PRESIONE "SI" PARA CONTINUAR O "NO" PARA FINALIZAR." 10 80

case $? in
  0)
    echo ""
    echo ""
    echo "Continuando el proceso..."
    echo ""
    echo "."
    sleep 1
    echo ".."
    sleep 1
    echo "..."
    sleep 1
    clear;;
  1)
    exit 0;;
  255)
    exit 0;;
esac

dialog --infobox "\n \n \n ESPERE UNOS SEGUNDOS MIENTRAS EL PROGRAMA SE INICIALIZA..." 10 80 ; sleep 3

###############################################################################
# FINAL DEL MODULO DE AUTORIZACIÓN DE USUARIO CON CONTRASEÑA
###############################################################################

Como pueden apreciar este módulo realiza primeramente la configuración de tu pantalla de terminal a fondo azul para una mejor apreciación visual del usuario, luego emite mensajes auditivos con espeak y visuales con echo y dialog. A continuación mediante un bucle usando el comando until valida que el valor introducido para el nombre de usuario sea comparado con el o los valores de usuario validos previamente definidos, proporcionándole al usuario la posibilidad de cerrar el programa correctamente escribiendo la palabra SALIR. En caso de ser exitosa la validación del usuario, procede ha realizar el mismo procedimiento con la contraseña. Para terminar finalizando en caso de ser exitosa la validación del usuario y Contraseña con un sencillo menú hecho en dialog preguntando si el Usuario X desea seguir continuando el proceso del programa o no. En caso positivo, emite una sencilla barra progresiva de espera realizada con el comando case.

=============

Recomendación:

Programar o pensar! ¿Que es primero? o ¿Que es más importante?

Sin duda alguna, cuando nos iniciamos en programación lo primero que deberíamos aprender es algoritmos o diagramas de flujos como bases teóricas para aprender lógica y matemática para incrementar nuestro razonamiento lógico-matemático, sin embargo, es esta base suficiente o la adecuada para empezar a programar. Entiende que Aprender a Programar, no es suficiente, necesario es Aprende a Pensar.

¿EN CUÁL LENGUAJE DE PROGRAMACIÓN DEBERÍA INICIARME PARA LOGRAR APRENDER RÁPIDAMENTE A PROGRAMAR?

Esta es seguramente una pregunta obligada que todos nos hacemos al iniciarnos en el maravilloso mundo de la programación. Pero no es la primera pregunta correcta que deberíamos hacernos, sino:

¿CUENTO CON LA CAPACIDAD ANALÍTICA NECESARIA PARA ANALIZAR UN PROBLEMA, EXTRAER SUS ELEMENTOS Y VISUALIZAR UNA RESPUESTA?

Y ciertamente aprender a programar en cualquiera de los más comunes o potentes lenguajes tiene muchos beneficios innegables. Ya que nos proporciona las herramientas necesarias para desarrollar nuestras propias aplicaciones, nos ayuda a localizar problemas en dispositivos tecnológicos, y nos abre puertas en el mercado laboral, pero programar es solo una pequeña parte de las ciencias de la computación.

Mientras Programar o escribir código consiste en enseñar a un Computador (mediante una aplicación, software o sistema) ha realizar una operación determinada, luego de una Opción X realizada por un operador o de un Evento X por o dentro del mismo Hardware o Software que lo soporta; Los principios de las Ciencias de la computación (Informática / Sistemas) nos enseñan habilidades de razonamiento y lógica que son útiles en otras áreas distintas a la tecnología. Informática, en esencia, enseña a procesar y a representar información.

Por ende, esta considero yo que es la forma más adecuada de Aprender a programar.

Te explico, tomando como ejemplo, este otro post llamado “Don’t learn to code. Learn to think” de Yevgeniy Brikman, donde este Ingeniero nos expone resumidamente la diferencia entre saber programar, y saber pensar como un informático con esta analogía:

Por muy omnipresente que sea una tecnología, esto no hace que la aprendamos cuando la estudiamos en un Centro de enseñanza. Como ejemplo pudiéramos tomar que casi cualquier persona en algún momento de la vida ha volado alguna vez en un avión, pero de ahí a lograr conseguir una licencia de piloto, hay un camino muy largo por recorrer, que por lo general no forma parte de los estudios formales de una persona, sino unos estudios muy particulares sobre un área especifica.

Explicado más en detalle, esto quiere decir que los conocimientos que cualquiera pueda tener sobre como funcionan los aviones básicamente muchos los tenemos desde la educación secundaria y universitaria o en cualquier carrera técnica (ingeniería), tales como la física y las matemáticas que nos ayudan a entender como las fuerzas presentes en el vuelo, y los elementos externos como la gravedad, la presión atmosférica, la velocidad, la fricción o la sustentación. Y así como la biología nos ayuda a comprender como un ser humano se comporta ha X altura, o cómo se ve afectado por la falta de oxígeno y frío extremo. O la historia que nos permite saber el proceso que dio origen a cómo fueron creados los aviones, y que papel tienen en el transporte y el comercio. Todas estos conocimientos juntos adquiridos en un Centro de enseñanza, de diversas áreas del conocimiento, nos proporcionan una idea general de qué es una avión y cómo funciona. La asignaturas generales nos ayudan a entender una gran variedad de problemas, incluidos cómo vuelan los aviones. Algo muy distinto de una asignatura especializada que te enseña solo a manejar una de esas máquinas, un tipo de avión. Por ende, por la misma razón, deberíamos enfocarnos en estudiar Ciencias de la computación, y no solo programación. Ya que mientras las Ciencias de la Computación nos enseña globalmente a pensar en un sentido general (sistémico), la programación solo es una herramienta que nos permite plasmar mediante un código X una idea o problema Y, previamente ya analizado (correcta o incorrectamente).

Este y muchos otros puntos de vistas aportados por Yevgeniy Brikman en su post sobre que Programar es solo una parte de un conocimiento más amplio embebido dentro de las Ciencias de la computación, las cuales son esenciales para todo programador.

Por ultimo, recuerden ir avanzando de forma autodidáctica con el aprendizaje sobre los comandos más importantes de GNU/Linux para seguir adelantando conocimientos que usarán más adelante, y que todo lo aquí expuesto sobre el desarrollo de algún modulo, función, variable, comando u acción en general puede realizarse de distintas maneras o métodos alternativos, distintos a los aquí descritos.

A continuación un Screencast realizado por mí, para donde podrán ver como se ejecuta este módulo, anteriores o posteriores módulos a enseñar, para que vean el potencial del Shell Scripting ha un nivel medio (No avanzado):

ScreenCast de Testeo del LPI-SB8

(LINUX POST INSTALL – SCRIPT BICENTENARIO 8.0.0) – Parte 2

 

 


2 comentarios

  1.   Otro que pasabaa dijo

    Haber si lo he entendido bien. Pides que el usuario meta su nombre de usuario… bien. Y después que meta su contraseña… y resulta que la contraseña es “lpi*sb8″… y que está “hardcodeada” en el script.

    Si el usuario tiene acceso de lectura al script … bingo!!… ya sabe que usuario y que contraseña tiene que meter !!!

    No se si me he equivocado en algo… pero si es así, eso es muy poco seguro…

  2.   Ing. Jose Albert dijo

    Cierto! Yo di un método ahora cada quien con esa innata curiosidad que caracteriza a la raza humana debe buscar la perfección o el fortalecimiento del mismo en los renglones de seguridad.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.