试想这样一种情况,手上管理着一批 Linux 服务器,但是我们不可能时时刻刻的实时监控有哪些用户登陆到了我们的服务器上,如果是内部有授权的人员登陆系统或许没有什么问题,但是如果是非授权用户非法登陆服务器,然而我们却全然不知,那就存在极大的安全风险了,因此我们就需要一种主动通知机制,当用户成功登陆系统后,系统立刻使用邮件的方式通知管理员,这样至少在一定程度上增加了安全可控性
1、实现原理
当用户成功登陆系统后,通过获取当前用户的登陆信息,然后以邮件的方式通知管理员
2、实现方法
2.1、使用到的软件包
-
sendmail
该软件是一个邮件服务器,在这里主要是用于代理邮件发送服务
-
s-nail(或mailx)
该软件提供了邮件发送客户端 mail 工具,用于邮件的发送
2.2、环境配置
-
安装软件包
[root@vm-rocky9 ~]# yum install sendmail s-nail -y
-
配置邮件发送参数
注意:以下内容中的大写部分需要替换为实际参数
[root@vm-rocky9 ~]# vim /etc/mail.rc # 用于发送邮件的邮箱 set from=MAIL-NAME@163.com # SMTP服务器地址 set smtp=smtp.163.com # 发送邮件的用户名 set smtp-auth-user=MAIL-NAME # 这里使用的是邮箱的授权密码,而不是登陆密码 set smtp-auth-password=PASSWORD # 设置SMTP认证 set smtp-auth=login
-
修改hostname
这里需要注意的是,hostname 必须是 FQDN 格式的(如:baidu.com),否则会出现发送邮件特别慢和用户登陆特别慢的情况,查看 /var/log/maillog 日志文件会提示以下错误
sendmail[2115]: My unqualified host name (vm-rocky9) unknown; sleeping for retry sendmail[2115]: unable to qualify my own domain name (vm-rocky9) -- using short name ......
# 配置hostname [root@vm-rocky9 ~]# hostnamectl set-hostname vm-rocky9.host
-
修改hosts文件
[root@vm-rocky9 ~]# vim /etc/hosts 192.168.1.2 vm-rocky9 vm-rocky9.host
-
启动服务
[root@vm-rocky9 ~]# systemctl enable --now sendmail
-
测试邮件发送
[root@vm-rocky9 ~]# echo "this is my test mail" | mail -s 'mail test' 123@163.com
-
创建邮件发送脚本
[root@vm-rocky9 ~]# vim /etc/profile.d/user_login_info.sh #!/usr/bin/bash USER=`whoami` LOGGED_IP=`who | awk '{print $NF}' | sed 's/(//g' | sed 's/)//g'` SERVER=`echo $HOSTNAME | awk -F "." '{print $1}'` SERVER_IP=`ip addr show | grep "inet" | grep -v "inet6" |grep -v "127.0.0.1" | awk '{print $2}' | awk -F "/" '{print $1}'` echo -e " User $USER successfully logged in from $LOGGED_IP\n\n\n ----- server info -----\n server_name:$SERVER\n server_ip:$SERVER_IP" | mail -s 'User login information' 123@163.com [root@vm-rocky9 ~]# chmod +x /etc/profile.d/user_login_info.sh
到此用户登陆主动通知管理员的机制就配置完毕了,这样就不用随时在茫茫的日志大海中去查找用户的登陆信息了