Pull to refresh

DIY SSH/SUDO Monitoring script

Reading time2 min
Views2.3K
Итак, родилась у меня как-то давным давно идея сделать свой собственный мониторинг с б/ж и ш.

Необходимо было мониторить успешные входы по ssh(и использование sudo) и сообщать мне об этом. Для оповещений был выбран мессенджер centerim (в дебиан и подобных пакет называется centericq-utf8). Так же понадобится пакет screen.
aptitude install screen centericq-utf8

Приступим

После установки пакета (в моём случае сборки ебилда) я создал пользователя jabber с домашней директорией /home/jabber.

После этого сменил юзера на jabber:
su - jabber.
Запустил centerim-utf8.
centerim-utf8
Настроил аккаунт icq ( новый уин можно получить тут — https://www.icq.com/register/
Проверил что номер появился в сети и вышел из мессенджера.
Далее, вернулся к суперпользователю.
exit
Запустил от рута в новом скрине мессенджер. (По-другому, согласно сайту, демонизировать centerim никак нельзя)
su - jabber -c "screen -d -m /usr/bin/centerim"
После этого написал такой скриптик и поместил его в крон раз в минуту:

authmon.sh



#!/bin/bash
# лог, который смотреть
LOG=/var/log/messages
# название бинарника centerim
CIM=/usr/bin/centerim
# сколько строчек смотреть в $LOG
N=20
# искать строчки, включающие следующие слова
EXPR="sshd|sudo"
# файл, в котором хранится мд5-хэш от предыдущего успешного прогона скрипта
MDFILE=/home/jabber/mon/auth.md5
# файл, в котором хранятся отфильтрованные грепом записи от прошлого прогона
TXTFILE=/home/jabber/mon/auth.txt
# файл, в котором хранятся отфильтрованные грепом записи от текущего прогона
TXTFILE2=/home/jabber/mon/auth.new
# имя пользователя, от которого запущен centerim
JABBERUSER=jabber
# протокол centerim
PROTO=icq
# УИН владельца, куда будут высылаться извещения
UIN=288611
# Набор фраз, которые исключать из лога.
EXCL='munin|Invalid|getaddrinfo|identification string|POSSIBLE BREAK-IN ATTEMPT'

OLD=`cat $MDFILE`
tail -$N $LOG | grep -E $EXPR | grep -v -E "$EXCL" > $TXTFILE2
READ=`tail -1 $TXTFILE2 | md5sum | awk '{print $1};'`

if [ "$READ" == "$OLD" ]; then
    exit 0
else
    echo -e $READ > $MDFILE
    cat $TXTFILE2 > $TXTFILE
    su - $JABBERUSER -c "cat $TXTFILE | $CIM -s msg -p $PROTO -t $UIN"
fi



Имеется целое поле для экспериментов и доработок, но я решил остановиться, и оставить всё как есть — всё более или менее работает.

В целом, эта статья о том, что если что-то не устраивает в чужом велосипеде — всегда можно написать свой.

Спасибо за внимание. Если есть вопросы, буду рад ответить в комментариях.
Tags:
Hubs:
+20
Comments27

Articles

Change theme settings