Muy buenas. Ahí va otro post de la serie de Linux Scripting. Ahora que ya conoces el entorno de Bash, la sintaxis básica del lenguaje, los pasos a seguir para crear y ejecutar tu primer script de forma manual, e incluso las formas que tienes para programar la ejecución de tu script en el arranque del sistema, es hora de ir a por la parte de ejemplos prácticos.
Este es el segundo ejemplo que te muestro de script con Bash, y en este caso verás que hay algunos puntos que hacen que sea algo más complejo que el primero. En este caso, lo que te voy a enseñar es a programar un analisis mensual con el antivirus ClamAV, y con las herramientas de detección de rootkits Chkrootkit y Rkhunter, y a guardar los resultados de cada análisis en un mismo fichero de log, para que lo puedas analizar en cualquier momento a posteriori.
Tabla de contenidos:
- Descripción y propósito del script
- Condiciones de funcionamiento
- Creación del script
- Código fuente
- Ejecución del script
- Programar la ejecución del script
- Continuación
Descripción y Próposito del Script
En este script, como he comentado al principio, te enseñare a programar un script que se encargará de realizar un escaner con tres herramientas diferentes para la detección de malware, virus y rootkits, y guardar el resultado en un fichero de log.
Las herramientas que he seleccionado en este caso son ClamAV, Chkrootkit y Rkhunter. Con cada una de las tres herramientas, el script realizará un análisis manual en busca de amenazas, filtrará unicamente los resultados relevantes, es decir, los ficheros infectados en el caso de ClamAV, y los warnings en el caso de Chkrootkit y Rkhunter, y los escribirá en un fichero de log.
En mi propuesta, he puesto que los resultados de las tres herramientas se indiquen en el mismo fichero de log, para tener una visión mas completa. De todos modos, si lo prefieres, se podría haber generado también un fichero independiente para cada herramienta.
Condiciones de Ejecución
Este script debería poder funcionar correctamente en cualquier distribución GNU/Linux, siempre y cuando dispongas de las aplicaciones y herramientas de las que vamos a hacer uso, que en este caso son CamAV, Chkrootkit y Rkhunter. Todos ellos suelen estar disponibles en los repositorios oficiales de la mayoría de distribuciones GNU/Linux, por lo que si no dispones de ellos, puedes instalarlos fácilmente con APT, cal como te enseño a continuación:
sudo apt install clamav chkrootkit rkhunter
En el caso de que utilizes una distribución que no haga uso de APT, deberás utilizar la herramienta de gestión de paquetes que aplique, como DNF en el caso de Fedora o sus derivados, o Zypper en el caso de openSUSE. También deberías revisar que no cambie el nombre de los paquetes en tu distribución particular.
Con los tres programas instalados ya en tu sistema, no deberías tener ningun problema a la hora de ejecutar el script que te voy a presentar a continuación.
Creación del Script
A continuación te dejo los pasos que debes seguir para crear y ejecutar el script, y en el siguiente apartado te dejo el código del mismo, que luego tu mismo podrás adaptar segun tus preferencias.
- Abrir un nuevo fichero de texto con tu editor de texto favorito. Puedes utilizar un editor gráfico como Gedit en GNOME, o un editor por consola como Vim.
- Copiar el código del script que tienes a continuación, y adaptarl a tus preferencias particulares en caso de que lo desees.
- Guardar el archivo en la ubicación que desees dentro de tu Home. El fichero puede tener el nombre que desees, pero debe terminar con la extensión .sh.
Código Fuente
A continuación tienes el código que debes copiar en el fichero recién creado.
#!/bin/bash # Definición de la variable que almacena la ruta con el fichero de logs # Como ruta se ha elegido el directorio /var/log # El nombre del fichero contendrá la fecha de ejecución en formato YYYY-MM-DD LOGFILE="/home/scripts/logs/security-check-$(date +'%Y-%m-%d').log"; # Añadir cabecera para los resultados de ClamAV en el fichero LOGFILE echo -e "\n********** Resultado Análisis ClamAV **********\n" >> "$LOGFILE" # Ejecutar escaner con ClamAV y guardar resultado en el fichero LOGFILE # El parámetro -r sirve para escanear directorios de forma recursiva # El parámetro -i sirve para alertar unicamente de los ficheros infectados # El parámetro --no-summary sirve para excluir el resumen final # En este caso, hacemos el analisis sobre el directorio /home sudo clamscan -r -i --no-summary /home >> "$LOGFILE"; # Añadir cabecera para los resultados de Chkrootkit en el fichero LOGFILE echo -e "\n********** Resultado Análisis Chkrootkit **********\n" >> "$LOGFILE" # Ejecuta escaner con Chkrootkit y guardar resultado en el fichero LOGFILE # El parámetro -q sirve para alertar solo de los warnings sudo chkrootkit -q >> "$LOGDIR"; # Añadir cabecera para los resultados de Rkhunter en el fichero LOGFILE echo -e "\n********** Resultado Análisis Rkhunter **********\n" >> "$LOGFILE" # Ejecuta escaner con Rkhunter y guardar resultado en el fichero LOGFILE # El parámetro -c de Rkhunter sirve para indicar la acción de realizar un escaneo # El parámetro -rwo de Rkhunter sirve para alertar solo de los warnings sudo rkhunter -c -rwo >> "$LOGFILE";
Como verás, el código fuente de este script es algo más complejo que el primero, pero he intentado describirte cada línea con el máximo grado de detalle.
Al principio de todo declaro una variable denominada LOGFILE, que contiene la ruta y nombre del fichero en el que se almacenará el resultado de cada ejecución. Aqui puedes elegir la ruta y el nombre que quieres, pero en este caso he elegido el directorio /var/log, por ser el más común en el que se suelen alamcenar los ficheros de log. El nombre, al ser un fichero que se generará con cada ejecución mensual, he puesto que contenga la fecha en formato YYYY-MM-DD.
A continuación ya paso a realizar las acciones de análisis para cada una de las herramientas. El formato en los tres casos es muy parecido. Primero añado una cabezera en el fichero LOGFILE, para separar los resultados de los tres análisis, y a continuación realizo la acción de escaneo, filtrando los resultados relevantes (no aporta mucho tener el listado entero de todos los elementos analizados), y añadiendo el resultado en el mismo fichero LOGFILE.
Ejecución del Script
Una vez creado y guardado el script, es hora de ejecutarlo. Para ello, tan solo debes abrir una ventana de terminal, situarte en el directorio en el que lo tienes almacenado, y teclear el siguiente comando:
bash nombre-script.sh
Con esto, ya solo queda esperar a que se termine de ejecutar, y ya tendrás todas las tareas de puesta a punto realizadas. Esto te habrá ahorrado el ir tecleando uno a uno todos los comandos que has incluido en el código de script.
Como se trata de un script de puesta a punto post-instalacion, ya no hace falta ni que lo guardes en el disco. Lo puedes traspasar a un medio de almacenamiento externo, para utilizarlo en futuras instalaciones (teniendo en cuenta, eso si, que dependiendo de la distribución y versión, puede ser necesario realizar algunos ajustes.
Programar la Ejecución del Script
Este script, auque puedes ejecutarlo de forma manual, está más pensado para que se ejecute de forma automática cada cierto tiempo. Lo que se suele hacer en estos casos es programar una ejecución con carácter semanal o mensual, a gusto de cada uno.
Para casos como esto, lo más habitual suele ser recurrir a Cron, una herramienta que se utiliza en GNU/Linux y Unix, y que sirve para programar la ejecución de comandos o scripts en el sistema, en base a una fecha y hora específicas. Cron permanece siempre activo y en segundo planto.
Para interactuar con Cron debes hacerlo a través del fichero Crontab, que es básicamente donde se indica toda la relación de scripts y/o comandos que deben ejecutarse de forma automática, en base a la fecha y hora asignadas. Para ver y editar ese fichero, se utiliza el comando crontab tal como indico a continuación:
sudo crontab -e
A continuación se te preguntará, en primer lugar, que tipo de editor quieres utilizar para editar el fichero. Yo he indicado la opción 1, que es la que corresponde a Nano, ya que es el editor por consola que conozco mejor y que me parece más simple e intuitivo de utilizar. Lo siguiente que verás es la interfaz del editor Nano por pantalla, y ya solo queda empezar a editar el fichero.
Para ello, debes especificar cada tarea a ejecutar en una linea aparte. La sintaxis de Cron consta de 5 asteríscos seguidos del comando con la acción a realizar, que en este caso es la ruta donde se encuentra el script. Cada asterísco puedes sustituirlo por un valor concreto, o dejarlo como tal. El primer asterísco es para indicar el minuto (de 0 a 60), el segundo la hora (de 0 a 23), el tercero el día del mes (de 1 a 31), el cuarto el mes (de 1 a 12), y el quinto el día de la semana (de 0, que representa domingo, a 6, que representa sábado).
En este caso concreto, si queres, por ejemplo, programar el escaneo para cada domingo a las 21 de la noche, deberías indicarlo de la siguiente forma:
0 17 * * 0 /home/usuario/nombre-script.sh
Continuación
Antes de finalizar, te dejo a continuación con todos los posts publicados dentro de esta serie sobre Linux scripting, para que puedas consultarlos si necesitas profundizar en cualquiera de los aspectos teóricos explicados.
- Linux scripting. Descubre el enorme poder de automatizar tareas
- Linux scripting con Bash. Introducción a Bash
- Linux scripting con Bash. Sintaxis del lenguaje
- Linux scripting con Bash. Crear y ejecutar tu primer script
- Linux scripting con Bash. Ejecutar script en el inicio del sistema
- Linux scripting con Bash. Ejemplo 1. Setup post-instalación para Ubuntu
- Linux scripting con Bash. Ejemplo 2. Escaneo mensual de malware
Un saludo y hasta la próxima!