#!/bin/bash # # Guión de ejmplo para vigilar un servidor httpd # # Heinlein Professional Linux Support GmbH, 8/04 # http://www.heinlein-support.de # # Genera una salida segura para el archivo tmp umask 077 TEMPFILE=`mktemp /tmp/servercheck.tmp.XXXXXXXX` # Espacio mínimo para "/" en porcentaje HDMINFREE="90" # Lista de Quehaceres CHECK_WEB=yes CHECK_ACCOUNTS=yes CHECK_HDMINFREE=yes CHECK_LOGINS=yes CHECK_STATUS=yes # # No configurar cambios a partir de este punto. # DATUM=`date +'%d %e'` echo Subject: Server-Status `date +"%b %e"` $HOSTNAME echo echo # Comprueba si el servidor web está funcionando # Adaptado para Apache2, utiliza "/etc/init.d/apache" # y además "/usr/sbin/httpd -T". if [ $CHECK_WEB = "yes" ] ; then if /etc/init.d/apache2 status &> /dev/null && wget --delete-after http://www.domain.local/check file.txt &>/dev/null ; then # El servidor Web está funcionando! Intente recargar, verifique la sintaxis antes de hacerlo if /usr/sbin/httpd2 -t &>/dev/null; then /etc/init.d/ apache2 reload &>/dev/null && echo " Servidor Web funcionando y recarga de la configuración ok." else echo "### AVISO:La recarga fallo debido a un error de configuración! " fi else # El servidor Web no funciona! Intenta lanzarlo! if /usr/sbin/httpd2 -t &>/dev/null && /etc/init.d/apache2 start &>/dev/null ; then echo "### AVISO: el servidor Web está caído, reinicio correcto." else echo "### AVISO: el servidor Web está caído. El reinicio FALLO! " fi fi fi # Verifica /etc/passwd para usuarios root ocultos if [ $CHECK_ACCOUNTS = "yes"] ; then cat /etc/passwd | grep ":0:" | grep -v ^root: > $TEMPFILE ACCOUNTS=`cat $TEMPFILE | wc -l` if [ $ACCOUNTS -ge 1 ] ; then echo "### AVISO: Descubiertas $ACCOUNTS cuentas adicionales con privilegios de root!" cat $TEMPFILE else echo " No hay cuentas de root adicionales." fi fi # comprobando HDMINFREE if [ $CHECK_HDMINFREE = "yes" ] ; then KBISFREE=`df | grep /$ | cut -b 52-54` INODEISFREE=`df -i | grep /$ | cut -b 47-49` if [ $KBISFREE -ge $HDMINFREE -o $INODEISFREE -ge $HDMINFREE ] ; then echo "### AVISO: $KDISFREE% / INODEISFREE% de la partición raíz ocupada! " else echo " Espacio de disco para la partición raíz okay." fi fi # comprobando fallos de logins # Modificar los patrones grep si es necesario. if [ $CHECK_LOGINS = "yes" ] ; then cat /var/log/messages | grep "$DATUM" | grep -i "FAILED " | grep -i "root" | grep -v "tty" |> $TEMPFILE FAILLOGINCOUNT=`cat $TEMPFILE | wc -l` if [ $FAILLOGINCOUNT -ge 15 ] ; then echo "### ### AVISO: Más de 15 logins de root fallidos! " elif [ $FAILLOGINCOUNT -ge 1 ] ; then echo " Descubiertos los siguientes logins de root fallidos:" fi cat $TEMPFILE fi # Generar informe if [ $CHECK_STATUS = "yes" ] ; then echo echo "Estado general del servidor:" echo "-----------------------" echo echo "La carga actual de los ultimos 15 minutos es: `cat /proc/loadavg | sed "s/.* .* \(.*\) .*.*/\1/"`" echo echo "Uso de memoria:" cat /proc/meminfo | head -n 3 echo echo "Están registrados los siguientes usuarios:" who fi echo echo rm $TEMPFILE