我目前使用gentoo,并有以下方法知道什么时候有人login到我的服务器(这只是我,但如果有人获得访问,我想知道)
1)使用秒来监视日志文件
type=SingleWithScript ptype=RegExp pattern=Accepted keyboard-interactive/pam for ([az]+) from ([0-9|\.]+) port script=/root/scripts/userLogin.pl $1 $2 desc=User Login action=write /var/log/sec/sec.log User Login: $1 has logged in from $2 action2=write /var/log/sec/sec.log Script Failed: User Login: $1 has logged in from $2
2)脚本:
#!/usr/bin/perl -w use Net::SMTP::TLS; my $smtp; if (not $smtp = Net::SMTP::TLS->new('smtp.gmail.com', Port => 587, User => '', Password => '', Debug => 1)) { die "Could not connect to server\n"; } $smtp->mail(''); $smtp->to(''); $smtp->data(); $smtp->datasend('To: ' . "\n"); $smtp->datasend('From: ' . "\n"); $smtp->datasend("Subject: User Login: $ARGV[0]\n"); $smtp->datasend("\n"); $smtp->datasend("$ARGV[0] has logged in from $ARGV[1]\n"); $smtp->dataend(); $smtp->quit;
但是我担心我的正则expression式不够广泛。 “Accepted keyboard-interactive / pam” – login是否会生成不符合该格式的日志?
可能有一个专门的PAM模块,但我找不到一个。 您可以使用pam_exec在用户login时执行脚本。 见man 8 pam_exec 。 基本上你只需要修改脚本来读取PAM_USER和PAM_TTY环境variables而不是$ARGV ,然后添加
auth required pam_exec.so <your script>
你尝试过使用OSSEC吗? 它具有分析日志和实时的规则,并且容易地报告成功的login,失败的login,来自特定IP或用户的首次login等。
过去我曾经使用SEC,logwatch和其他工具,但最近我们把它们全部换成了OSSEC。 这是很容易安装,我不必写我自己的脚本/正则expression式,因为它是默认包括在内。
链接: http : //www.ossec.net