HOWTO: Crear un informe del sistema

2008 Junio 16
by Overclock_Orange

En este post, voy a explicar como crear un util informe del sistema, para que se genere automaticamente (con cron), cada minuto y este mismo se coloque en nuestro servidor web (en el directorio /var/www/), para poder monitorear como se encuentra nuestra PC, siempre que estemos lejos de ella…

Lo primero que haremos es instalar mediante nuetros repositorios el programa sensorsd (que es el demonio) y lm-sensors, para ello en Debian hacemos lo siguiente:

#: apt-get install sensorsd lm-sensors

Una vez instalado esto, hay que configurarlo respondiendo a las diferentes preguntas que el instalador nos realize.
Luego lo que haremos es crear con nuestro editor de textos favoritos (el mio es Vim), un simple script como el siguiente:

#!/bin/bash
#——————————————————————-
# Write by: Facundo Mario de la Cruz
# fmdlc.unix [at] debian-ar dot org
# http://www.codigounix.com.ar/
# Liberado bajo GPL V.3 (General Public License version 3)
#——————————————————————–

#——————
# SET VARIABLES
#——————
LOG1=”/var/log/messages”
LOG2=”/var/log/auth.log”
INFORME=”/var/www/informe.txt”

#—————-
# SUBRUTINAS
#—————-
function sensor {
    echo “INFORME GENERAL DEL SISTEMA”
    echo “Informe realizado: $(date)echo “”
    echo “Uptime: $(uptime)echo “”
    echo “Usuarios conectados:”
    echo “——————–”
    who –ips

    echo “”
    echo “Ultimos cinco accesos:”
    echo “———————-”

    echo “$(last -5 -a -i)”

    echo “Analisis de logs”
    echo “”
    echo “Ultimas entradas en $LOG1:”
    echo “——————————————”

    tail -n 5 $LOG1

    echo “”
    echo “Ultimas entradas en $LOG2:”
    echo “——————————————”

    tail -n 5 $LOG2
    echo “Sensores:”

    sensors

    if [ $? -ne 0 ]; then echo “sensors fallo”
    fi
}

# Llama a la función sensor
#############################
sensor > $INFORME

#Cambia permisos de /var/www
##############################
exec permisos &> /dev/null

#Notificación en tty
######################
echo “Se ha realizado un informe a las $(date +%H:%M%S) puede leerlo en: $INFORMEexit 0

Bien, este script como vemos, lo que realiza es muy simple, en primer lugar asigna valor a las variables sobre los diferentes logs que debe leer (ustedes pueden cambiarlo por los que deseen), y tambien le asigna un valor a una variable que contendra el path hacia el informe (donde este debe ser creado y escrito). Paso siguiente ejecuta el comando date, para generar la fecha y la hora que se realizo el informe, luego ejecuta uptime, un who (para saber que usuarios estan conectados), verifica los ultimos cinco accesos con el comando last y los imprime en pantalla, luego imprime el primer el log contenido en la variable LOG1, y luego el log contenido en la variable LOG2 y ejecuta el programa sensors, el cual nos mostrara un informe detallado de nuestro hardware (con datos tales como temperaturas, voltajes, estado de coolers, etc…).
Termina enviando todo a un archivo que llamamos informe.txt en /var/www/, lo cual lo hemos definido en una variable llamada INFORME.

Por ultimo termina cambiando permisos del directorio contenido en la variable INFORME, para asi poder acceder remotamente, a travez de un script que hemos realizado y guardado en el directorio /usr/local/sbin, llamado permisos, el contenido de este script es el siguiente:

#!/bin/bash
#Cambiar permisos de webserver

#————————
# Set local variables
#————————

DIR=/var/www

#————————
#Subrutinas
#————————
echo “[*] Change permissions to the directory $DIRcd $DIR 2> /dev/null
if [ $? -ne 0 ]; then echo “Error”; PROBLEMA=1
fi

echo “[1] Entry to the directory $DIR”
chown -R www-data:www-data $DIR/* 2> /dev/null
if [ $? -ne 0 ]; then echo “Error”; PROBLEMA=1
fi

echo “[2] Making recursive chown to the directory $DIRif [ $? -ne 0 ]; then echo “Error”; PROBLEMA=1
fi

echo “[3] Making recursive chmod to the directory $DIR”
chmod -R 744 $DIR/* 2> /dev/null
if [ $? -ne 0 ]; then echo “Error”; PROBLEMA=1
fi
echo “[*] Done…”

if [[ "$PROBLEMA" -ne 1 ]]; then echo “No se encontraron problemas”
else
      echo “Se encontraron problemas al procesar”
fi
exit 0
#EOF

Obviamente los paths deben modificarlos a los que corresponden a su sistema, y los usuarios del webserver para los que ustedes quieran usar, en este ejemplo utilizamos www-data, pero pueden asignarle permisos a un grupo, por ejemplo haciendo uso adecuado de las ordenes chown, y chmod.
Guardamos este script en /usr/local/sbin con el nombre permisos.
Bien la parte mas dificil ya esta hecha ahora añadiremos la tarea a Cron, para que se ejecute cada minuto, de cada hora, de cada día y de cada mes, para ello con Vim, o el editor de textos que ustedes utilizen realizamos:

#:vim /etc/crontab

Y añadimos una línea como la siguiente:

0 * * * * root sh /usr/local/bin/informe > /dev/null 2>&1

Bien, ahora lo que tambien podemos hacer, es generar un alias, para que cada vez que tipiemos informe en nuestros sistemas, ademas de que se ejecute este, se presente en un visor de texto de forma adecuada. Yo para esta opcion utilizo el visor de Midnight Commander (mc -v), para ello abrimos nuestro archivo .bashrc o .bash_aliases (ambos en nuestro directorio home) y creamos un alias como el siguiente.

alias informe='/usr/local/bin/informe; mcedit -v /var/www/informe.txt

Si no tenemos Midnight Commander, podemos utilizar pager, more, less, etc.
Cabe aclarar que esta opción puede llegar a resultar insegura, ya que cualquiera podria leer la siguiente información y asi obtener usuarios y información de nuestro sistema.
En conveniente autentificar a los usuarios que tienen acceso a esta información como puede ser utilizando un password y una constraseña y asi permitirle el acceso a los usuarios permtidos a este archivo.
Bien, esto seria todo, creo que fue sencillo.
Saludos!

No comments yet

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscripción al comentario vía RSS