我想知道是否可以这样设置,当登录失败时,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=1
,success=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