我遵循了这些说明
您必须将此代码添加到 .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/