![如何以编程方式查看登录事件?](https://linux22.com/image/1279428/%E5%A6%82%E4%BD%95%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E6%9F%A5%E7%9C%8B%E7%99%BB%E5%BD%95%E4%BA%8B%E4%BB%B6%EF%BC%9F.png)
我想以编程方式从日志文件中查找用户登录 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)