最近老闆總感覺有人能登錄到公司的linux系統,我排查了半天也沒有找到任何蛛絲馬跡,乾脆設置一個陷阱,等着那個人往裏走
【1】使用sendmail搭建簡單郵件服務器
第一步:安裝sendmail並啓動服務
yum -y install sendmail
/etc/init.d/sedmial start
第二步:修改mail的配置文件,即在/etc/mail.rc最後添加下面內容
set from=郵箱地址,後面必須要有@qq.com一類的字樣
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 -p'passwd' 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
注意:需要放到定時任務中,每秒執行一次