Linux系统运维脚本:检查登录用户是否过多 (比如超过20个),使用uptime,who,cron等命令查看登录用户的数量

目 录

一、问题

二、解决方法

1、通过统计登录用户来发现非法入侵者

2、脚本实现登录用户数超过阈值,给出提醒

3、定期运行脚本,让提醒及时有效


一、问题

Linux的服务器放在公网上,很多人需要访问这个服务器,知道服务器的IP地址,同时服务器的ssh端口也是开放的。那么这个服务器就可能碰到一些网络攻击,比如暴力破解用户密码、拒绝服务攻击(DoS)或其他形式的网络攻击。攻击者可能会尝试使用多个用户名和密码组合来登录系统,以获取未经授权的访问。攻击者一般都比较专业,往往会攻破一些防范不严的服务器。

有时候,我们的服务器可能还会泄密,这样,攻击者会登录到我们系统,进行非法活动。

如何最快的时间发现这个问题呢?

二、解决方法

注意,以下演示的环境的系统为:CentOS Linux release 8.2.

1、通过统计登录用户来发现非法入侵者

要查看当前登录的用户数,可以使用 who | wc -l 和uptime命令

who | wc -l

或命令

uptime

实际环境演示如下:

bash 复制代码
[root@ecs-52a1 home]#
[root@ecs-52a1 home]# who
121yunwei pts/0        2024-03-10 21:39 (112.81.59.194)
121yunwei pts/3        2024-03-10 22:11 (112.81.59.194)
121yunwei pts/4        2024-03-10 22:14 (112.81.59.194)
vidisit  pts/5        2024-03-10 22:17 (112.81.59.194)
vidisit  pts/6        2024-03-10 22:18 (112.81.59.194)
vidisit  pts/7        2024-03-10 22:18 (112.81.59.194)
vidisit  pts/8        2024-03-10 22:18 (112.81.59.194)
[root@ecs-52a1 home]#
[root@ecs-52a1 home]#
[root@ecs-52a1 home]# who | wc -l
7
[root@ecs-52a1 home]#
[root@ecs-52a1 home]#
[root@ecs-52a1 home]# uptime
 22:48:29 up 47 days,  9:21,  7 users,  load average: 0.51, 0.54, 0.54
[root@ecs-52a1 home]#

2、脚本实现登录用户数超过阈值,给出提醒

实现当登录到系统的用户数超过一定数值(比如20个)时,系统给出提醒,可以使用 shell 脚本来完成这个任务。以下是一个简单的示例脚本:

bash 复制代码
#!/bin/bash    
# 定义最大用户数 
MAX_USERS=20  

# 获取当前登录用户数 
CURRENT_USERS=$(who | wc -l)    

# 检查用户数是否超过最大值 
if [ "$CURRENT_USERS" -gt "$MAX_USERS" ]; then 
    echo "警告:当前登录用户数超过 $MAX_USERS 个!" | mail -s "用户数警告" admin@example.com 

    # 或者你可以使用其他通知方式,比如发送短信、Slack 消息等 
fi

这个脚本首先定义了一个变量 MAX_USERS 来存储最大用户数。然后,它使用 who | wc -l 命令获取当前登录用户数,并将其存储在 CURRENT_USERS 变量中。接下来,脚本使用 if 语句检查当前用户数是否超过了最大值。如果超过了,它会使用 mail 命令发送一封包含警告信息的电子邮件给管理员(在这个例子中是 admin@example.com)。

将脚本保存到一个文件中,比如 user_limit_prompt.sh,并给它执行权限:

chmod +x user_limit_prompt.sh

3、定期运行脚本,让提醒及时有效

要将这个脚本设置为定期运行,你可以使用 cron。首先,将脚本保存到一个文件中,比如 user_limit_alert.sh,并给它执行权限:

chmod +x user_limit_alert.sh

然后,编辑 crontab 文件来定期运行这个脚本。你可以使用 crontab -e 命令来编辑当前用户的 crontab:

crontab -e

在打开的编辑器中,添加一行来指定脚本的运行时间和频率。例如,如果你想每分钟检查一次用户数,可以添加以下行:

* * * * * /home/user_limit_alert.sh

保存并关闭文件后,crond 会自动每分钟运行一次这个脚本。

发送电子邮件需要系统上安装有邮件发送工具(如 sendmail 或 postfix),并且正确配置了邮件发送设置。如果你不想使用电子邮件,可以考虑使用其他通知机制,比如写入日志文件、发送 HTTP 请求到某个监控服务等。

相关推荐
linweidong3 小时前
C++ 模块化编程(Modules)在大规模系统中的实践难点?
linux·前端·c++
invicinble7 小时前
对linux形成认识
linux·运维·服务器
小Pawn爷8 小时前
14.VMmare安装ubuntu
linux·运维·ubuntu
技术路上的探险家8 小时前
8 卡 V100 服务器:基于 vLLM 的 Qwen 大模型高效部署实战
运维·服务器·语言模型
有谁看见我的剑了?8 小时前
介绍一款 测试 DNS解析成功率的网站
运维
半桔8 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
HABuo9 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
Howrun7779 小时前
关于Linux服务器的协作问题
linux·运维·服务器
小白同学_C10 小时前
Lab3-page tables && MIT6.1810操作系统工程【持续更新】
linux·c/c++·操作系统os
十年磨一剑~10 小时前
Linux程序接收到sigpipe信号崩溃处理
linux