为什么 btmp 不显示登录用户的用户名?

为什么 btmp 不显示登录用户的用户名?

btmp我正在尝试比较文件和who -a命令的输出。

我不知道为什么,但btmp file目前不显示用户名,而是显示UNKNOWN在用户名字段中。我(用户名:debian)登录了该会话。

请观察下面的输出:

virt00# who -a
           system boot  2016-03-06 19:36
           run-level 5  2016-03-06 19:36
debian   - tty1         2016-03-06 19:36 00:33        1006
debian   + pts/0        2016-03-06 19:43   .          1037 (192.168.56.1)

virt00# last -f /var/log/btmp | grep still
UNKNOWN  tty1                          Sat Feb 20 16:24   still logged in
virt00#

您能否解释一下为什么这两者之间存在差异以及为什么我通过 SSH 登录并且虚拟机上又运行了一个会话?

谢谢。

答案1

那是因为who -a从不读取/var/log/btmpwho读取/var/run/utmp并显示当前登录的用户。

另一方面,/var/log/btmp存储失败的登录尝试。


我重现了这种情况,我做到了:

  • 去过tty5(可以是任何tty

  • 输入了系统上不存在的用户

  • 给定一个随机密码

  • 登录提示再次显示密码错误

  • /var/log/btmp但在as中有一个条目

    UNKNOWN  tty5  Mon Mar 21 16:16   still logged in 
    

    一段时间后,这变成了:

    UNKNOWN  tty5  Mon Mar 21 16:16    gone - no logout
    

答案2

该文件/var/log/btmp跟踪失败的登录尝试。如果每个人都登录没有问题,则没有任何内容可显示。

在测试该功能时,我只能使用 telnet(而不是 ssh)看到“未知”记录(在 Debian 7 上),如果我在提示符下给出未知的用户名,则会导致失败。这类似于 Ubuntu 线程中显示的场景sshd 不会添加到 /var/log/btmp。使用 ssh 连接永远不会在这台机器上产生故障。

快速阅读源代码没有显示任何可以自行last提供的地方。UNKNOWN这可能来自在 中创建记录的应用程序/var/log/btmp

在您的配置中,登录过程似乎无法获取实际的用户名并记录作为 中的一个问题/var/log/btmp。就像utmp,有可能有陈旧其中未删除的条目btmp(创建条目的程序应该删除它们 - 这是不是自动完成)。您的示例显示了一个月前(2 月 20 日)的条目,并且(因为您在同一个 tty 上以已知用户身份登录)与您当前的登录无关 - 并且来自机器最近一次启动的时间(3 月 3 日)。

进一步阅读:

相关内容