我目前正在使用 gentoo 并且有以下方法可以知道何时有人登录我的服务器(实际上只有我一个人,但如果有人要获得访问权限,我想知道它)
1) 使用sec 监控日志文件
type=SingleWithScript
ptype=RegExp
pattern=Accepted keyboard-interactive/pam for ([a-z]+) 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;
但我担心我的正则表达式不够广泛。“接受的键盘交互/pam” - 登录可以生成与该格式不匹配的日志吗?
可能有一个专用的 PAM 模块,但我找不到一个临时的。您可以使用
pam_exec
在用户登录时执行您的脚本。见man 8 pam_exec
。基本上你只需要修改你的脚本来读取PAM_USER
和PAM_TTY
环境变量而不是$ARGV
然后添加您是否尝试过使用 OSSEC?它具有分析日志和实时的规则,并轻松报告成功登录、失败登录、来自特定 IP 或用户的首次登录等。
我过去使用过 SEC、logwatch 和其他工具,但我们最近将它们全部替换为 OSSEC。它非常易于安装,我不必编写自己的脚本/正则表达式,因为默认情况下它们都包含在内。
链接:http ://www.ossec.net