1. 程式人生 > >檢測到有人登錄到linux,mysql,ftp,就發郵件通知管理員

檢測到有人登錄到linux,mysql,ftp,就發郵件通知管理員

mysql ftp 檢測到有人登錄到linux 就發郵件通知管理員

最近老板總感覺有人能登錄到公司的linux系統,我排查了半天也沒有找到任何蛛絲馬跡,幹脆設置一個陷阱,等著那個人往裏走


1】使用sendmail搭建簡單郵件服務器

第一步:安裝sendmail並啟動服務

yum -y install sendmail

/etc/init.d/sedmial start

第二步:修改mail的配置文件,即在/etc/mail.rc最後添加下面內容

set from=郵箱地址,[email protected]

set smtp=smtp地址

set smtp-auth-user=郵箱登錄名

set smtp-auth-password=郵箱登錄密碼

set smtp-auth=login

這是配置中介郵件服務器,發送郵件,可以通過中介服務器(可以是任何郵箱,比如新浪,搜狐,qq等郵箱),把郵件發送到指定的郵箱


下面是參考

技術分享


第三步:測試

echo test | mail -s 郵件標題 郵箱

比如

echo ‘有人正在登錄郵箱,請查看‘ | mail -s ‘linux_login‘ [email protected]

/* */



2】登錄linux,發送郵件

原理:用戶只要登錄,/etc/profile.d目錄下面所有的腳本都會執行一遍,所以可以在這個目錄下建立一個shell腳本,腳本內容如下

#郵件又是會發不出去,所以要把發送結果賦值給變量jie
jie=$(who|mail -s ‘liunx_login‘ [email protected] 2>&1)
count=1
#如果jie=‘‘,就表示郵件發出去了,就不需要在發了,反之,如果jie !=‘‘,就表示需要重新發送
while [ "$jie" != ‘‘ ]
do
#循環裏面如果郵件一直發送不出去,就會阻擋用戶登錄linux系統,所以在嘗試6次之後,郵件還是發不出去,就不要再發了,這是可以在本地寫一份文件,記錄一下
if [ $count -gt 7 ]
then
who >> /tmp/login/liux_login_info
break
fi
((count++))
jie=$(who|mail -s ‘liunx_login‘ [email protected]
/* */ 2>&1) done


註意:

1)把這個腳本放到/etc/profile.d/目錄下

2)這個腳本後綴名必須是sh,不然不會被執行

3】登錄mysql,發送郵件

原理:使用mysqladmin -u root [email protected] processlist檢測當前有哪些人正在使用mysql,腳本如下

#排除執行mysqladmin -u root -p‘數據庫密碼‘ processlist這條命令的用戶,以及本地登錄的用戶(一方面本地php程序需要用到,另一方面本地登錄mysql必須要登錄linux)
email_content=$(mysqladmin -u root -p‘數據庫密碼‘ processlist | grep -v ‘show processlist\|localhost:‘)
#內容排除後的行數
line_num=$(echo "$email_content" | wc -l)
#去掉重復的IP,同一個IP執行不同的操作,會出現多行信息,
content=$(echo "$email_content" | awk -F "|" ‘{if(NR !=2)print $4}‘ | awk -F ":" ‘{print $1}‘| uniq)
mysql_compare_path=‘/tmp/mysql_compare‘
if [ ! -f $mysql_compare_path ]
then
touch $mysql_compare_path
fi
 
old_content=$(cat $mysql_compare_path)
#排除後的行數超過4,並且與上一次登錄信息不同,就發送郵件
if [ $line_num -gt 4 ] && [ "$content" != "$old_content" ]
then 
echo "$content" > /tmp/mysql_compare
jie=$(echo -e "Someone is working on mysql please check it,you can excute mysqladmin -u root -p‘passwd‘ processlist to see user ifromation ,if you want to kill Mysql user ,you can excute kill id. \n$email_content" | mail -s ‘mysql_login‘ [email protected] 2>&1)
count=1
while [ "$jie" != ‘‘ ]
do
if [ count -gt 7 ]
then 
break
fi
((count++))
 
jie=$(echo "Someone is working on mysql please check it(mysqladmin -u root -p‘passwd‘ processlist)" | mail -s ‘mysql_login‘ [email protected] 2>&1)
done
 
fi



註意:這個腳本需要放到定時任務中,每秒執行一次就可以了

4】登錄ftp,發送郵件

原理:只要ftp的操作日誌發生變化,就發送郵件,shell腳本如下

pure_file=‘/var/log/pureftpd.log‘
md5size_file=‘/tmp/pure_size_file‘
if [ ! -f $md5size_file  ]
then
old_size=$(md5sum $pure_file | awk ‘{print $1}‘)
echo $old_size > $md5size_file
else
old_size=$(cat $md5size_file)
fi
now_size=$(md5sum $pure_file | awk ‘{print $1}‘)
if [ $old_size != $now_size ]
then
jie=$(echo "Somone is working on ftp ,please check the log(/var/log/pureftpd.log) " | mail -s ‘ftp_login‘ 
[email protected]
 2>&1) 
while [ "$jie" != ‘‘ ]
do
jie=$(echo "Somone is working on ftp ,please check the log(/var/log/pureftpd.log) " | mail -s ‘ftp_login‘ 
[email protected]
 2>&1) 
done 
echo $now_size > $md5size_file
fi


註意:需要放到定時任務中,每秒執行一次


好了,坐等犯罪。哈哈技術分享

本文出自 “技術” 博客,謝絕轉載!

檢測到有人登錄到linux,mysql,ftp,就發郵件通知管理員