如何以编程方式查看登录事件?

如何以编程方式查看登录事件?

我想以编程方式从日志文件中查找用户登录 Debian 计算机的情况。我还想查看当时登录的用户以及文件中记录的内容。如何在 Debian 计算机版本 4.1 或 5 上完成该任务?

如果任何文件中都不存在该信息,是否有其他方法可以捕获这些事件并以编程方式获取事件详细信息?

答案1

该文件/var/run/utmp包含谁登录、他们正在使用哪个 tty、他们闲置了多长时间等信息。查看此文件(有一个用于此的 C API ( /usr/include/utmp.h))。

另外,/var/log/wtmp(如果我理解手册页正确的话),是用户列表登录。

答案2

last命令是命令行方法。请参阅man last以了解选项。

它会搜索/var/log/wtmp登录详细信息。

您可能能够通过编程来实现这一点。

答案3

查看 /var/log/auth.log 中记录的身份验证会话事件。您需要 root 权限才能访问该文件。

答案4

在 Linux 上,没有单一的“登录”事件 - 每个程序都可以用自己的方式实现它。最接近的是 PAM ... 对于使用 PAM 的应用程序。它们中的大多数都这样做,但例如,SSH 仅在您使用密码登录时调用 pam_authenticate(),但使用公钥或 Kerberos 时不会调用 pam_open_session(),尽管 pam_open_session() 总是被调用。

如果你只需要记录交互式会话(SSH,控制台),那么观察/var/log/wtmp(使用通知)。请参阅的手册页wtmp以了解确切结构的描述。

对于邮件、[S]FTP 和其他协议,您必须使用/var/log/auth.log,但不幸的是它没有一致的格式。

  • 三个不同的例子来自auth.log

    • 使用密码进行 SSH – 列出“sshd:auth”和“sshd:session”

      sshd[24870]: pam_krb5(sshd:auth): 用户 grawity 已验证为 grawity@领域
      sshd[24870]: 从 ::1 端口 57063 接受 grawity 的密码 ssh2
      sshd[24870]: pam_unix(sshd:session): 为用户 grawity 打开会话 (uid=0)

    • IMAP – “mail:auth”但没有“mail:session”

      auth [0 等待,0 passdb,0 userdb]:pam_krb5(mail:auth):用户 grawity 已验证为 grawity@领域

    • 使用公钥的 SSH – 仅“sshd:session”,没有“sshd:auth”

      sshd[24985]: 从 ::1 端口 51606 接受了 grawity 的公钥 ssh2
      sshd[24985]: pam_unix(sshd:session): 为用户 grawity 打开了会话 (uid=0)

相关内容