登录失败时发送电子邮件?

登录失败时发送电子邮件?

我想知道是否可以这样设置,当登录失败时,Ubuntu 会给我发送电子邮件?当然,如果尝试登录时计算机未连接到互联网,那么它应该在再次连接互联网时向我发送电子邮件,而不是只是尝试登录,失败,然后永远不会提醒我登录。电子邮件应包含登录day/month/year - hour:minute:second失败的日期和时间(),以及(尽管是可选的 - 换句话说,不解释如何执行此操作的答案是可以接受的,因为这可能是一个很大的要求)采取的任何行动,例如,如果我有它设置将人锁定 5 分钟或类似时间那么它应该会提醒我它已经采取了该操作。我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10,这种情况可能吗?

答案1

访问日志

具有 root 权限的用户可以使用该命令lastb查看计算机中所有失败的登录尝试,还可以找到一个更详细的日志文件,其中记录了一周内失败的登录尝试/var/log/auth.log(无需 root 权限),错误的登录尝试将按如下方式列出:

MONTH  DAY HH:MM:SS MACHINE lightdm: pam_unix(lightdm:auth): authentication failure; logname= uid=0 euid=0 tty=:0 ruser= rhost=  user=USER

脚本

您可以编写一个脚本来读取这些日志文件,并在记录新的错误登录尝试时通过电子邮件发送给您。以下是我的看法:

首先,每当有人尝试登录并失败时,我们都会触发脚本执行。PAM 会保留,/var/log/auth.log因此我们可以使用它来触发我们的脚本。打开/etc/pam.d/common-auth

sudo vim /etc/pam.d/common-auth

然后,就在这一行之前:

auth    requisite                       pam_deny.so

添加此内容:

auth [default=ignore] pam_exec.so seteuid /usr/bin/report_badlogin

并将以上各行中出现的 改为success=1success=2如果有的话,改为 ,success=2等等success=3

现在创建指定的脚本:

sudo vim /usr/bin/report_badlogin

在其中写入向您发送报告电子邮件的命令:

#! /bin/sh
# report_badlogin

if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure' | mail -s "Bad login attempt notification" "[email protected]"; then
  cp -f /var/log/auth.log /var/log/auth.log.old
  chown YOURUSERNAME /var/log/auth.log.old
fi

exit 0

简要说明:首先,grep通过从上次保存的副本 (.old) 中减去日志文件的更改内容来获取更改内容。其次,grep只获取重要的行,即通知您尝试登录的日期、时间和用户。将该mail行作为电子邮件发送给您,主题为错误登录尝试通知。如果电子邮件发送成功,auth.log.old则会更新,但由于脚本以 root 身份运行,我们会将文件的所有权重新设置给您的用户。

保存并关闭它(VIM 命令:wq)。

确保脚本有执行权限:

sudo chmod a+x /usr/bin/report_badlogin

手动创建第一个副本auth.log

cp /var/log/auth.log{,.old}

处理无互联网连接的情况

潜在的入侵者可以断开您的电脑与互联网的连接,同时尝试猜测密码以阻止通知电子邮件,但即使他这样做,他的错误登录尝试也会全部被记录到auth.log

为了尽快收到通知,您可以做的是,在成功登录并连接到互联网的机器时触发略有不同的脚本。为此,让我们使用~/.bashrc每次登录时执行的脚本:

vim ~/.bashrc

将这些行添加到文件末尾:

# Pending bad login attempts notification
sh /usr/bin/report_pending

保存并退出。现在创建该脚本:

sudo vim /usr/bin/report_pending

并写入以下内容:

#! /bin/sh
# report_pending

if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure'; then
    if grep -F -x -v -f /var/log/auth.log.old /var/log/auth.log | grep -n 'authentication failure' | mail -s "Bad login attempt notification" "[email protected]"; then
        cp -f /var/log/auth.log /var/log/auth.log.old
    fi
fi

exit 0

简要说明auth.log.old:此脚本的作用与第一个脚本几乎相同,但由于它始终在登录时执行,因此我们首先检查是否存在待处理报告,否则每次登录时您都会收到一封空白电子邮件。请注意,此脚本未以 root 权限运行,因此更新后无需更改所有权。

现在只需为脚本添加执行权限:

sudo chmod a+x /usr/bin/report_pending

配置 SMTP 设置

为了发送电子邮件安装邮件实用程序SMTP协议

sudo apt-get install mailutils ssmtp

配置SMTP协议

sudo vim /etc/ssmtp/ssmtp.conf

将其编辑成如下内容:

[email protected]    
mailhub=smtp.gmail.com:587    
AuthUser=yoursmtpemail    
AuthPass=PASSWORD    
UseSTARTTLS=YES    
[email protected]    
FromLineOverride=YES

如果您不使用 GMail,只需将其更改为您的提供商。

我建议您创建一个仅用作 SMTP 服务器的电子邮件([email protected]),而不要使用您的个人电子邮件,因为正如您所见,您将该电子邮件的密码存储在纯文本文件中(只有 root 可以访问此文件,但无论如何这不是一个好习惯,虽然我不知道如何以其他方式做到这一点......)。

如果是 GMail(我还没有尝试过其他提供商),你仍然需要允许访问安全性较低的应用程序。如果您尝试运行,您应该会收到一封电子邮件,通知您该电子邮件的访问被拒绝,因为应用程序不符合 GMail 的安全级别,如果您愿意,您可以echo "Test mail" | mail -s "Testing" [email protected][email protected]了解更多关于允许不太安全的应用程序访问,单击它,GMail 最终会向您提供允许它的选项。

完毕!

答案2

这可能有点过头了,但是配置服务器防火墙(CSF)和LFD可以帮助监控和保护您的机器。

发送有关登录失败的通知只是其众多功能之一。此功能开箱即用,可将通知电子邮件发送给 root。

为了在另一台机器上接收邮件,您需要一个可以发送邮件的程序。安装软件包mail-transport-agent可能就足够了,但我通常会安装一个exim4服务器,如果您离线(我认为最多 3 天),它可以排队发送邮件。

CSF 不作为 Ubuntu 软件包提供,因此你需要遵循其安装说明

cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

相关内容