最近老板总感觉有人能登录到公司的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等邮箱),把邮件发送到指定的邮箱


下面是参考

wKiom1mMAJDS_dpOAAAJcc-YQRM381.png


第三步:测试

echo test | mail -s 邮件标题 邮箱

比如

echo '有人正在登录邮箱,请查看' | mail -s 'linux_login' 3071959726@qq.com



2】登录linux,发送邮件

原理:用户只要登录,/etc/profile.d目录下面所有的脚本都会执行一遍,所以可以在这个目录下建立一个shell脚本,脚本内容如下

 

#邮件又是会发不出去,所以要把发送结果赋值给变量jie
jie=$(who|mail -s 'liunx_login' 3071959726@qq.com 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' 3071959726@qq.com 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' 3071959726@qq.com 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' 3071959726@qq.com 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' 
3071959726@qq.com
 2>&1) 
while [ "$jie" != '' ]
do
jie=$(echo "Somone is working on ftp ,please check the log(/var/log/pureftpd.log) " | mail -s 'ftp_login' 
3071959726@qq.com
 2>&1) 
done 
echo $now_size > $md5size_file
fi


注意:需要放到定时任务中,每秒执行一次


好了,坐等犯罪。哈哈j_0061.gif