当 root 登录时发送邮件但不是从本地主机发送

当 root 登录时发送邮件但不是从本地主机发送

我遵循了这些说明

如何获取 Root 和用户 SSH 登录电子邮件警报

您必须将此代码添加到 .bashrc

`echo 'ALERT - Root Shell Access (ServerName) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" [email protected]`

我确实收到了通知,但我还收到了似乎来自本地主机的通知(每隔几分钟)我可以排除本地主机的通知吗?或者有没有更好的方法仅在有人远程登录时获取邮件?

答案1

最好的和唯一合适的方法是禁用 SSH 登录. 无需电子邮件提醒。如果发生了不好的事情,当你最终阅读电子邮件通知时已经太晚了。你正在关注的文章中已经解释了这一点:

因此,允许通过 SSH 会话直接登录 root 不是一个好习惯,建议创建具有sudo访问权限的非 root 帐户。每当需要 root 访问权限时,首先以普通用户身份登录,然后使用su切换到 root 用户。要禁用直接 SSH root 登录,请按照以下说明操作 [禁用 SSH 根登录并限制 SSH 访问] 文章介绍了如何禁用和限制 SSH 中的 root 登录。

如果您仍然愿意使用电子邮件提醒...

.bashrc解决方案似乎非常流行,但也存在一些问题。它总是在bash启动时运行。如果被任何其他 shell 替换,或者 shell 未启动(例如,登录仅用于 SFTP 上的隧道),它就会停止工作,并且即使不涉及 SSH,它也会运行。攻击者可以在.bashrc调用之前修改bash,以规避您的警报。

由于您可能不在内部使用 SSH,使用~/.ssh/rc将满足所需条件例如

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
echo "Root login from $ip" | mail -s "Alert: SSH root login from $ip" [email protected]

然后,用于全局 SSH 登录警报我不会使用用户主目录中的任何东西,~/因为用户可以轻松修改它。可以~/.ssh/rc使用 将设置为全局默认值/etc/ssh/sshrc,任何用户都可以使用 own 覆盖设置~/.ssh/rc,只需删除文件即可轻松恢复。

如果您需要以用户无法覆盖的方式强制执行警报,则可以使用/etc/pam.d/sshd:添加脚本session optional pam_exec.so seteuid /path/to/login-notify.sh.sh您(或用户)发送电子邮件的行。

答案2

我发表了bash 脚本Github Gist 上的一个脚本可以满足您的要求。每当用户从新 IP 地址登录时,它都会向系统管理员发送电子邮件。我使用该脚本仔细检查我们严格控制的生产系统上的登录信息。如果登录信息被泄露,我们会收到有关异常登录位置的通知,并有机会在他们造成严重损害之前将其锁定在系统之外。

要安装脚本,只需使用您的系统管理员电子邮件更新它,然后将其复制到/etc/profile.d/

如果你想将其限制为仅限 root 用户登录,那么你可以将其部署/root/.bashrc/etc/profile.d/

相关内容