最近老板总感觉有人能登录到公司的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' 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
注意:需要放到定时任务中,每秒执行一次