目前,客户只能在发现数据或者虚拟机被恶意侵入或者用户的误操作导致了数据的丢失之后,采取善后的手段,但是并没法做到提前的预警。那么通过 PAM 模块,就可以实现用户登录及获取root 权限时,通过邮件的方式进行通知。以实现预先知道、预先警惕的目标,同时降低受影响的范围。以下是通过 PAM 模块实现的邮件通知用户登录的功能

1.创建脚本(/tmp/ssh/login_notify.sh),备注:该脚本可存放在服务器的任意位置,但是需要将后续的路径指定好

[root@hlmcen75n1-gen-um waagent]# cat /tmp/ssh/login_notify.sh
#!/bin/bash [ "$PAM_TYPE" = "open_session" ] || exit
{
echo "User: $PAM_USER"
echo "Ruser: $PAM_RUSER"
echo "Rhost: $PAM_RHOST"
echo "Service: $PAM_SERVICE"
echo "TTY: $PAM_TTY"
echo "Date: `date`"
echo "Server: `uname -a`"
} | mail -s "`hostname -s` $PAM_SERVICE login: $PAM_USER" user@yourdomain.com

2.给脚本(/tmp/ssh/login_notify.sh)添加可执行权限

[root@hlmcen75n1-gen-um ~]# chmod +x /tmp/ssh/login_notify.sh

3.编辑文件(/etc/pam.d/sshd),在文件最后追加一行(session optional pam_exec.so debug /bin/bash /tmp/ssh/login_notify.sh)

[root@hlmcen75n1-gen-um waagent]# cat /etc/pam.d/sshd
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare
session optional pam_exec.so debug /bin/bash /tmp/ssh/login_notify.sh

4.至此,每一个用户登录都会发邮件通知给收件人,内容包括用户名以及登录的 IP 地址信息。如果遇到陌生 IP,那么就要注意。以此来判断该虚拟机是否正在遭受攻击,邮件示例如下:

5.同理,你可以在把上述脚本应用到 /etc/pam.d/ 其他模块中,比如 sudo,login 等,来进行监控

参考链接:https://docs.azure.cn/zh-cn/articles/azure-operations-guide/virtual-machines/linux/aog-virtual-machines-linux-security-reinforce

登陆Linux服务器时触发邮件提醒的更多相关文章

  1. SecureCRT上使用公钥登陆Linux服务器

    SecureCRT部分配置 1.首先生成公钥. 打开SecureCRT(我的版本为7.0,估计其他版本基本相同)程序,点击菜单栏的“工具”->“创建公钥”.按照步骤执行.其中一步比较重要就是选择 ...

  2. 给Linux设置SSH登录邮件提醒

    给Linux设置SSH登录邮件提醒 心血来潮,用 last 命令查看了登录记录,不看不知道,一看就有问题.竟然有两个陌生的IP ,一个是美国欧莱雅的,一个是北京联通的.真是郁闷,密码简单了真不行 后来 ...

  3. 在linux终端远程登陆linux服务器

    在linux终端远程登陆linux服务器   原来在Linux终端远程登陆linux服务器是那么的容易,如果的服务器用户名是abc(也可以是root),只需要在终端输入: 然后电脑会提示输入密码就登录 ...

  4. 通过SSH服务登陆linux服务器(版本RHEL7)

    通过SSH服务登陆linux服务器(版本RHEL7) SSH服务概述:是一种能够以安全的方式提供远程登陆的协议,也是目前远程管理linux系统的首选方式.在此之前,我们一般使用FTP或者telnet来 ...

  5. 连接到 Linux 服务器时首先要运行的 5 个命令

    作为一个系统管理员/SRE 工作 5 年后,我知道当我连接到一台 Linux 服务器时我首先应该做什么.这里有一系列关于服务器你必须了解的信息,以便你可以(在大部分时间里)更好的调试该服务器. 连上 ...

  6. 批处理程序:自动上传FTP,再登陆linux服务器执行更新

    ----转载请注明出处:博客园-邦邦酱好 最近在学批处理程序,一直没找到能够结合工作来使用它的地方,前几天测试服务端的时候突然想到可以这样做: 写一个批处理程序,自动通过FTP上传软件包到指定的地方, ...

  7. ssh登陆linux服务器 实际场景讲解 让你管理服务器更安全

    很多时候我们管理linux系统,都谁使用ssh登陆,因为都知道ssh是加密传输的协议的,可以有效保证我们与 服务器之间的数据通信安全.但是我们忽略了一点,但是登陆的时候我们是输入的账号和密码,这一点其 ...

  8. 使用ssh公钥密钥自动登陆linux服务器

    转自:http://7056824.blog.51cto.com/69854/403669 作为一名 linux 管理员,在多台 Linux 服务器上登陆进行远程操作是每天工作的一部分.但随着服务器的 ...

  9. [zz] 使用ssh公钥密钥自动登陆linux服务器

    目录 .生成密匙对 .拷贝公匙到远程机 .启动登陆代理 这种方法处理后每次需要运行命令:ssh-add ~/.ssh/id_dsa 作为一名 linux 管理员,在多台 Linux 服务器上登陆进行远 ...

随机推荐

  1. 1059 Prime Factors(25 分)

    Given any positive integer N, you are supposed to find all of its prime factors, and write them in t ...

  2. FOI冬令营 Day4

    目录 T1.循环流(flow) 传送门 Code T2.整除分块(mex) 传送门 Code T3.森林(forest) 传送门 Code 咕咕咕 T1.循环流(flow) 传送门 Code /* 特 ...

  3. vue中子组件传值给父组件

    index.js 子组件 父组件

  4. 基于Spring框架怎么构建游戏玩法服务

    说明:本篇阐述的问题,是基于前面的游戏服务器架构设计的. 问题 众所周知,Spring最擅长的领域是无状态服务的构建,而游戏(尤其是玩法部分)是有状态的.以棋牌游戏为例,玩法服务里面大概涉及以下两类对 ...

  5. [Ubuntu] sudo apt-get update指令执行失败

    系统:Ubuntu 16.04 LTS 安装软件前执行 sudo apt-get update 更新,但是提示失败如下: 网上搜索后,因为连接不到 US 的服务器,所以更新失败,需要在系统设置中将源服 ...

  6. RK3399 4G模块移远EC20移植调试

    转载请注明出处:https://www.cnblogs.com/lialong1st/p/11266330.html CPU:RK3399 系统:Android 7.1 1.通过串口打印或者adb获取 ...

  7. Android 查看和修改网络mtu

    CPU:RK3288 系统:Android 5.1 MTU:通信术语 最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以 ...

  8. Java 面向对象(十)

    常用类之Arrays java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList 返回 ...

  9. C# ASP.NET 控制windows服务的 开启和关闭 以及重启

    用ASP.NET控制Windows服务的开启与关闭效果如图 代码 首页页面需要添加引用 页面的pageload中 实例化windows服务 protected void Page_Load(objec ...

  10. qt mvc3

    前面两节讲的model是一维的,这次开始二维的也就是我们常说的Table,相对与list,我们多了一个列的概念. 下面讲解一个例子.我先说明一下我们这个例子,在程序目录下,我们有一个文本文件,其中存放 ...