#!/bin/bash # # Muster-Skript zur Überwachung eines httpd-Servers # # Heinlein Professional Linux Support GmbH, 8/04 # http://www.heinlein-support.de # # Angabe eines Files für temporären Output TEMPFILE="/tmp/servercheck.tmp.$$" # Minimalfreier Platz für "/" in Prozent HDMINFREE="90" # Was soll gemacht werden? CHECK_WEB=yes CHECK_ACCOUNTS=yes CHECK_HDMINFREE=yes CHECK_LOGINS=yes CHECK_STATUS=yes # # Ab hier keine Konfigurationsänderungen mehr. # DATUM=`date +'%d %e'` echo Subject: Server-Status `date +"%b %e"` $HOSTNAME echo echo # Prüfe, ob der Web-Server läuft # Angepasst auf Apache2, ansonsten "/etc/init.d/apache" # und "/usr/sbin/httpd -T" nehmen. if [ $CHECK_WEB = "yes" ] ; then if /etc/init.d/apache2 status &> /dev/null && wget --delete-after http://www.domain.local/checkfile.txt &>/dev/null ; then         # Webserver läuft also! Versuche Reload, mache vorab Syntax-Check         if /usr/sbin/httpd2 -t &>/dev/null; then                 /etc/init.d/apache2 reload &>/dev/null && echo "    Webserver lief und config-reload o.k."         else                 echo "### WARNUNG: Reload von Apache wegen defekter CFG fehlgeschlagen! "         fi else         # Webserver läuft also nicht! Versuche Start!         if /usr/sbin/httpd2 -t &>/dev/null && /etc/init.d/apache2 start &>/dev/null ; then                 echo "### WARNUNG: Webserver war tot, Neustart erfolgreich."         else                 echo "### WARNUNG: Webserver war tot, Neustart FEHLGESCHLAGEN! "         fi fi fi # Prüfe /etc/passwd auf versteckte root-User 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 "### WARNUNG: Es sind $ACCOUNTS zusätzliche Accounts mit root-Rechten versehen!"         cat $TEMPFILE else         echo "    Keine weiteren root-Accounts." fi fi # Prüfe auf 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 "### WARNUNG: root-Partition zu $KDISFREE% / INODEISFREE% belegt! " else         echo "    Festplattenplatz der root-Partition ist o.k." fi fi # Prüfe auf Faillogins # grep-Pattern ggf. auf eigenes Log-Format anpassen 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 "### WARNUNG: Es gab mehr als 15 root-Fail-Logins! " elif [ $FAILLOGINCOUNT -ge 1 ] ; then         echo "    Es gab folgende root-Fail-Logins:" fi cat $TEMPFILE fi # Erzeuge Status: if [ $CHECK_STATUS = "yes" ] ; then echo echo "Sonstiger Serverstatus:" echo "-----------------------" echo echo "Aktuelle Load der letzten 15 Minuten: `cat /proc/loadavg | sed "s/.* .* \(.*\) .* .*/\1/"`" echo echo "Auszug aus der Speicherbelegung:" cat /proc/meminfo | head -n 3 echo echo "Folgende Benutzer sind zur Zeit angemeldet:" who fi echo echo #rm $TEMPFILE