在 Linux 上获取用户登录通知的最佳方式是什么?

在 Linux 上获取用户登录通知的最佳方式是什么?

我目前正在使用 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” - 登录是否可以生成与该格式不匹配的日志?

答案1

可能有一个专门的 PAM 模块用于此,但我一时找不到。您可以使用pam_exec它在用户登录时执行脚本。请参阅man 8 pam_exec。基本上,您只需要修改脚本以读取PAM_USERPAM_TTY环境变量,而不是$ARGV然后添加

auth required pam_exec.so <your script>

答案2

您尝试过使用 OSSEC 吗?它有规则来分析日志和实时情况,并轻松报告成功登录、失败登录、特定 IP 或用户的首次登录等。

我过去曾使用过 SEC、logwatch 和其他工具,但最近我们将它们全部替换为 OSSEC。它非常容易安装,我不需要编写自己的脚本/正则表达式,因为它默认包含所有内容。

关联:http://www.ossec.net

相关内容