我相信我的 Linux 机器可以合理地防止外部登录。但由于我有点偏执,我希望在尝试登录服务器时收到警报,无论成功与否。
浏览网站,我找不到任何统一的方法来实现这一点。据我所知,对于不成功的尝试logcheck 已被推荐以及成功人士sshrc 或(甚至更多)pam_exec 方法我喜欢一举两得的方法,想知道你们这些专业人士是否知道是否有办法让其中一种方法同时实现这两种方法?PAM 似乎是一个聪明的地方,因为毕竟,据我所知,它是我 ubuntu 机器上的中央身份验证系统。
有什么建议吗?
答案1
好吧,您可以使用cron
一个愚蠢的小脚本每 10 分钟检查一次/var/log/auth.log
。如果您正确设置它,cron
将通过电子邮件将输出发送到您想要的任何位置,因此我们只需要运行一个脚本:
#!/bin/bash
cat /var/log/auth.log | perl -MDate::Parse -ne '
print if /login|ssh/ && /^(\S+\s+\d+\s+\d+:\d+:\d+)\s/ && str2time($1) > time-600'
这只是寻找带有login
或ssh
的项目。您可能想添加更多或只是排除一些。但在我的系统上,它生成的内容如下:
Aug 29 10:19:50 bert sudo: oli : TTY=pts/10 ; PWD=/home/oli ; USER=root ; COMMAND=/bin/login
Aug 29 10:19:52 bert login[15544]: pam_unix(login:session): session opened for user oli by oli(uid=0)
Aug 29 10:19:54 bert login[15544]: pam_unix(login:session): session closed for user oli
Aug 29 10:20:11 bert sshd[15614]: Accepted publickey for oli from ::1 port 41663 ssh2: RSA XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Aug 29 10:20:11 bert sshd[15614]: pam_unix(sshd:session): session opened for user oli by (uid=0)
将该脚本保存为类似/usr/local/sbin/checkauth
(和chmod u+x
它) 的内容,然后您可以添加一个 root crontab 行sudo crontab -e
:
*/10 * * * * /usr/local/sbin/checkauth
在 cron 文件的顶部也添加一行,(前提是安装了邮件服务器 —如果没有,请安装)你将收到输出的电子邮件,MAILTO="[email protected]"
postfix
当且仅当有任何输出。