shell脚本实例-通过监视用户登陆找到入侵者

本文介绍了一种检测系统中非法用户登录尝试的方法,并通过分析失败的登录记录来识别潜在的攻击行为。文中提供了详细的shell脚本,用于搜集非法登录的用户名、IP地址及登录尝试的时间范围等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者简介:
陈志珂(头条号:强扭的瓜不好吃),公众号“铅笔学园”运维内容合作作者之一。目前就职于中国最大的安卓应用软件公司,任高级工程师,现在公司任php开发工程师,python开发工程师,高级运维工程师。
铅笔学园:IT资源分享|知识分享,做初级程序员的指明灯

#!/usr/bin/bash
#用户检测入侵工具

AUTHLOG=/var/log/secure

if [[ -n $1 ]];then
    AUTHLOG=$1
    echo "Using Log File: $AUTHLOG"
fi  


LOG=/tmp/valid.$$.log

grep -v "Invalid"  $AUTHLOG > $LOG #将系统中有效的用户
users=$( grep "Failed password" $LOG |awk '{ print $(NF-5) }'|sort|uniq ) # 搜集非法用户的用户名

printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "Sr#" "User" "Attempts" "IP address" "Host_Mapping" "Time range"

ucount=0
ip_list="$( egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" $LOG |sort|uniq )" #获取登陆失败的IP地址

for ip in $ip_list
do
        grep $ip $LOG > /tmp/temp.$$.log #这一步是将失败的那一行信息存到文件中
		for user in $users
		do
				grep $user /tmp/temp.$$.log >/tmp/$$.log
				cut -c-16 /tmp/$$.log >$$.time #这一行的前16个字符是时间戳
				tstart=$(head -1 $$.time);
                start=$(date -d "$tstart" "+%s");
                tend=$(tail -1 $$.time)
                end=$(date -d "$tend" "+%s")

                limit=$(($end-$start))

                if [ $limit -gt 120  ] ;then #检查这个时间戳是否大于两分钟
                        let ucount++;
                        IP=$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /tmp/$$.log|head -1 )
                        TIME_RANGE="$tstart-->$tend"
                        ATTEMPTS=$(cat /tmp/$$.log|wc -1)
                        HOST=$(host $IP|awk '{print $NF}') #根据ip 查找对应主机的名字 这个步骤如果显示host没有找到命令 请安装bind-utils
                        printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "$ucount" "$user" "$ATTEMPTS" "$IP" "$HOST" "$TIME_RANGE"
                fi  
        done
done

rm -f /tmp/valid.$$.log
rm -f /tmp/$$.log
rm -f /tmp/$$.time
rm -f /tmp/temp.$$.log






 vim /etc/pam.d/sshd
 auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=10
#参数解释
#even_deny_root 也限制root用户;
#deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户
#unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
#root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值