Shell腳本監控服務器pts登陸狀況記錄爲日誌並郵件通知【CentOS 6.5】

(一)配置服務器sendmail發郵件功能:shell

  安裝sendmail服務:vim

# yum  install  sendmail  -y安全

 

  下面啓動sendmail服務:bash

# /etc/init.d/sendmail  restart服務器

    啓動後請單獨用mail -s測試郵件是否能夠發送出去,此處不介紹了。ssh

 

(二)Linux下用nali查詢IP地址歸屬地:測試

  下載nali的tar包:編碼

# wget  http://chenze.name/wenjian/nali-0.2.tar.gzspa

 

  解壓,並放到合適位置:rest

# tar  xvf nali-0.2.tar.gz

# mv  nali-0.2  /mydata/nali

 

  編譯安裝:

# cd  /mydata/nali

# ./configure

# make  &&  make  install

 

  更新本地nali地址庫(建議制定計劃任務,天天自動更新一次IP地址庫):

# nali-update

 

 

  使用nali命令瞧一瞧:

# nali  42.96.189.63

 

 

  查看一下環境變量nali在哪一個目錄下:

 

 

    若是nali命令獲得的中文地名輸入到log中或發送出去的郵件中爲空或亂碼,那多是服務器、腳本的編碼問題,請自行解決。下面說正事兒:

 

  首先編寫下面這個腳本,不要放在/root目錄下!

# vim  /mydata/bash_shell/ssh_login_monitor.sh

------------------------------------------------------------------------

#!/bin/bash

echo
CommonlyIP=("139.168.55.6")                          #  經常使用ssh登錄服務器的IP地址,即IP白名單
SendToEmail=("opsadmin@rjl.com" "123456789@qq.com")           #  接收報警的郵箱地址

LoginInfo=`last | grep "still logged in" | head -n1`
UserName=`echo $LoginInfo | gawk '{print $1}'`
LoginIP=`echo $LoginInfo | gawk '{print $3}'`
LoginTime=`date +'%Y-%m-%d %H:%M:%S'`
LoginPlace=`/usr/local/bin/nali $LoginIP | gawk -F'[][]' '{print $2}'`
SSHLoginLog="/var/log/login_access.log"

for ip in ${CommonlyIP[*]}  # 判斷登陸的客戶端地址是否在白名單中
do
    if [ "$LoginIP" == $ip ];then
        COOL="YES"
    fi
done

if [ "$COOL" == "YES" ];then
    echo "用戶【 $UserName 】於北京時間【 $LoginTime 】登錄了服務器,其IP地址安全!" >> $SSHLoginLog
elif [ $LoginIP ];then
    echo "用戶【 $UserName 】於北京時間【 $LoginTime 】登錄了服務器,其IP地址爲【 $LoginIP 】,歸屬地【 $LoginPlace 】" | mail -s "【 通知 】 有終端SSH連上服務器了!" ${SendToEmail[*]}
    echo "用戶【 $UserName 】於北京時間【 $LoginTime 】登錄了服務器,其IP地址爲【 $LoginIP 】,歸屬地【 $LoginPlace 】" >> $SSHLoginLog
fi
echo

------------------------------------------------------------------------

 

  將腳本添加到hosts.allow裏,登陸終端自動執行該腳本一次:

# vim  /etc/hosts.allow

------------------------------------------------------------------------

# 添加下面這句話便可

sshd:All:spawn (/bin/sh /mydata/bash_shell/ssh_login_monitor.sh) &:allow

------------------------------------------------------------------------

 

BUG提示】本人在後期使用過程當中發現,若是寫在/etc/hosts.allow中,會有一個BUG,那就是第一個SSH終端登陸的用戶將不會被「監視」到,也就是沒法觸發腳本,不會記錄下日誌。因而作以下改進:

  將腳本寫到到 /etc/ssh/sshrc 中,ssh登陸時自動執行該腳本一次:

# vim  /etc/ssh/sshrc

------------------------------------------------------------------------

# 添加下面這句話便可

/bin/sh  /mydata/bash_shell/ssh_login_monitor.sh

------------------------------------------------------------------------

    因爲/etc/hosts.allow 不管登陸用戶是誰,執行該文件中的都將是root用戶,所以,被調用的腳本也是root執行的。可是 /etc/ssh/sshrc 中就不同了,哪一個用戶登陸的,就是哪一個用戶執行腳本,那麼問題來了,記錄登陸信息的日誌此時可能權限爲644(echo生成的txt文件默認權限),普通用戶寫不成該文件!因此必定要記得用root用戶賦予login_access.log文件 666 權限(若是結合zabbix自定義報警的話,就須要讀文件,在這裏讀寫權限一塊兒給了):

# chmod  666  /var/log/login_access.log

 

   能夠打開一個新的終端試試效果了。若是腳本沒有執行,請賦予腳本可執行權限(chmod +x),講道理/bin/sh已經避免了權限致使腳本不可執行的問題。下面是實際效果:

  查看郵箱:

     查看服務器上登陸記錄日誌:

     # vim  /var/log/login_access.log

  至此,監控終端登錄所有完成!

相關文章
相關標籤/搜索