![为什么 btmp 不显示登录用户的用户名?](https://linux22.com/image/86031/%E4%B8%BA%E4%BB%80%E4%B9%88%20btmp%20%E4%B8%8D%E6%98%BE%E7%A4%BA%E7%99%BB%E5%BD%95%E7%94%A8%E6%88%B7%E7%9A%84%E7%94%A8%E6%88%B7%E5%90%8D%EF%BC%9F.png)
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/btmp
、who
读取/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 日)。
进一步阅读: