如何在 Linux 中查找最后登录的用户

在本教程中,我们将看到如何在 Linux 中使用 last, lastblastlog 带有示例的命令。

介绍

作为 Linux 系统管理员,您应该定期检查 Linux 服务器中用户的登录日期和时间。 它为您提供了一些有用的详细信息,例如有多少用户处于活动状态、多少用户处于非活动状态以及他们何时登录以及登录时长等。

如果某些用户帐户长时间未使用,您可以在不再需要时将其锁定。 您还可以在审核 Linux 服务器时使用上次登录日期,并调查可能是哪个用户导致了问题。

幸运的是,GNU/Linux 操作系统包括三元组命令,即 last, lastblastlog 显示最近用户的登录日期。

1. 使用 last 命令显示 Linux 中最后登录用户的列表

顾名思义, last 命令用于查看 Linux 和类 Unix 系统中最后登录的用户。 它通过阅读 /var/log/wtmp 文件并查找自该文件创建以来所有已登录和已注销的用户。 您还可以列出特定用户的最近登录日期,甚至查找 谁重新启动了 Linux 系统 在…的帮助下 last 命令。

请注意,您的系统仅将信息记录在 wtmp 文件。 如果此文件因任何原因不可用,只需使用 touch 命令如下:

$ sudo touch /var/log/wtmp

现在让我们找出最近的登录日期和时间 last 命令。

要在您的 Linux 系统中显示上次登录、持续时间和其他信息,只需运行:

$ last

样本输出:

ostechni pts/0        192.168.225.37   Thu Jan  7 08:30   still logged in
ostechni tty1                          Thu Jan  7 08:29   still logged in
reboot   system boot  5.4.0-53-generic Thu Jan  7 08:20   still running
reboot   system boot  5.4.0-48-generic Fri Nov 20 10:13 - 11:44  (01:31)
.
.
.
reboot   system boot  5.4.0-33-generic Wed Jul  8 08:49 - 11:41  (02:52)
ostechni web console                   Mon Jul  6 08:19 - 08:20  (00:00)
ostechni pts/2        192.168.225.37   Mon Jul  6 08:14 - 08:30  (00:15)
ostechni pts/0        192.168.225.37   Mon Jul  6 07:41 - 12:27  (04:45)
reboot   system boot  5.4.0-33-generic Mon Jul  6 07:21 - 12:27  (05:06)
ostechni pts/3        192.168.225.37   Sat Jul  4 12:01 - 12:12  (00:10)
ostechni pts/2        192.168.225.37   Sat Jul  4 11:14 - 13:01  (01:46)
ostechni pts/0        192.168.225.37   Sat Jul  4 07:55 - 13:01  (05:05)
reboot   system boot  5.4.0-33-generic Sat Jul  4 07:53 - 13:03  (05:09)
ostechni tty1                          Fri May 29 10:07 - down   (00:00)
reboot   system boot  5.4.0-33-generic Fri May 29 10:06 - 10:07  (00:01)
ostechni pts/0        192.168.225.37   Fri May 29 09:36 - 10:06  (00:29)
ostechni tty1                          Fri May 29 09:36 - down   (00:29)
reboot   system boot  5.4.0-31-generic Fri May 29 09:35 - 10:06  (00:30)
ostechni tty1                          Sun May 24 13:17 - down   (00:02)
reboot   system boot  5.4.0-31-generic Sun May 24 13:16 - 13:20  (00:03)

wtmp begins Sun May 24 13:16:52 2020
使用 last 命令列出 Linux 中最后登录的用户

正如您在上面的输出中看到的,最后一个命令显示了最近登录的以下详细信息:

  • 用户的名称。 如果任何用户仍处于登录状态,它也会显示该详细信息。
  • 发生会话的终端设备的类型(例如 tty 或 pts)。
  • 用户登录的源 IP 地址或主机名。
  • 登录日期和时间戳(即登录会话开始和停止时间)。
  • 会话的总持续时间。
  • 最后一行表示最早记录会话的日期和时间 wtmp 日志文件。

在上面的输出中,您可能已经注意到有一个名为的特殊用户的登录条目 reboot. 这 last 每次启动计算机时,命令都会保留该用户的记录。

当我们跑 last 命令没有任何选项,它将显示整个日志输出。 它有许多选项可以根据您的喜好过滤、格式化和限制输出。 我已经包含了最常见选项的示例。

1.1。 将输出限制为特定用户

如前所述, last 命令列出所有最近登录记录在 wtmp 文件。 如果要显示特定用户的最近登录(即查看特定用户的所有登录),对于 example ostechnix,命令将是:

$ last ostechnix

样本输出:

ostechni pts/0        192.168.225.37   Thu Jan  7 08:30   still logged in
ostechni tty1                          Thu Jan  7 08:29   still logged in
ostechni pts/0        192.168.225.37   Wed Jan  6 11:02 - 13:31  (02:28)
[...]
使用 last 命令显示特定用户的最近登录

您还可以使用逗号分隔指定多个用户名,如下所示:

$ last ostechnix sk

1.2. 将输出限制为特定的 tty 或 pts

last 命令会记录发生会话的终端设备的类型(例如 tty 或 pts)。

说为 example,用户可能已经在本地或通过 ssh 登录到 Linux 机器。 如果要将输出限制为特定 tty,只需运行:

$ last tty1

样本输出:

ostechni tty1                          Thu Jan  7 08:29   still logged in
ostechni tty1                          Wed Jan  6 11:00 - down   (02:31)
ostechni tty1                          Fri Nov 20 11:52 - down   (00:38)
[...]

tty 的名称可以缩写。 例如,您可以运行 last 1 代替 last tty1.

同样,仅列出 pts 会话的登录,运行:

$ last pts/0
ostechni pts/0        192.168.225.37   Thu Jan  7 08:30   still logged in
ostechni pts/0        192.168.225.37   Wed Jan  6 11:02 - 13:31  (02:28)
sk       pts/0        192.168.225.37   Wed Jan  6 11:02 - 11:02  (00:00)
[...]

您还可以使用 ttys 指定多个用户名,如下所示:

$ last ostechnix sk pts/0 tty1

1.3. 将输出限制为特定行数

wtmp 日志文件可能有大量条目。 如果你想限制输出 last 命令到一定数量的行,使用 -n 标志如下:

$ last -n 5

或者,

$ last -5

上面的命令只会在输出中显示 5 行:

ostechni pts/0        192.168.225.37   Thu Jan  7 08:30   still logged in
ostechni tty1                          Thu Jan  7 08:29   still logged in
reboot   system boot  5.4.0-53-generic Thu Jan  7 08:20   still running
ostechni pts/0        192.168.225.37   Wed Jan  6 11:02 - 13:31  (02:28)
sk       pts/0        192.168.225.37   Wed Jan  6 11:02 - 11:02  (00:00)

wtmp begins Sun May 24 13:16:52 2020

1.4. 显示主机名而不是 IP 地址

默认情况下, last 命令显示用户登录它的源 IP。 如果要显示主机名而不是 IP 地址,请使用 -d (或者 --dns) 选项:

$ last -d -5

您还可以在输出中显示完整的用户名和域名 -w (或者 --fullnames) 选项。

1.5。 隐藏主机名和 IP 地址

要禁止显示主机名或 IP 字段,请使用 -R 选项。

$ last -5 -R

样本输出:

ostechni pts/0        Thu Jan  7 08:30   still logged in
ostechni tty1         Thu Jan  7 08:29   still logged in
reboot   system boot  Thu Jan  7 08:20   still running
ostechni pts/0        Wed Jan  6 11:02 - 13:31  (02:28)
sk       pts/0        Wed Jan  6 11:02 - 11:02  (00:00)

wtmp begins Sun May 24 13:16:52 2020

1.6. 显示特定时间的用户登录记录

-p (或者 --present) 选项用于查找当前或指定时间登录的用户。

为了 example,运行以下命令列出今天 8:30 最后登录的用户:

$ last -p 08:30

样本输出:

ostechni tty1                          Thu Jan  7 08:29   still logged in
reboot   system boot  5.4.0-53-generic Thu Jan  7 08:20   still running

wtmp begins Sun May 24 13:16:52 2020

要列出当前记录的人员(即在运行此命令时,请运行:

$ last -p now
查找在特定时间登录的用户查找在特定时间登录的用户

1.7. 显示特定时间间隔内的登录用户

last 命令有两个选项,即 -s (--since) 和 -t (--until) 以显示特定时间段内的登录用户。 这 -s 选项用于显示自指定时间以来的登录状态和 -t 选项用于显示在指定时间之前的登录状态。

为了 example如果你想显示最后一次登录 2021-01-072021-01-11,命令是:

$ last -s 2021-01-07 -t 2021-01-11

样本输出:

ostechni pts/0        192.168.225.37   Thu Jan  7 08:30 - 13:16  (04:46)
ostechni tty1                          Thu Jan  7 08:29 - down   (04:47)
reboot   system boot  5.4.0-53-generic Thu Jan  7 08:20 - 13:16  (04:56)

wtmp begins Sun May 24 13:16:52 2020

查看最近的登录 昨天今天, 跑:

$ last -s yesterday -t today

如果您只想列出自 2021 年 1 月 7 日至今的登录记录,请运行:

$ last -s 2021-01-07
ostechni pts/0        192.168.225.37   Mon Jan 11 06:39   still logged in
reboot   system boot  5.4.0-59-generic Mon Jan 11 06:37   still running
ostechni pts/0        192.168.225.37   Thu Jan  7 08:30 - 13:16  (04:46)
ostechni tty1                          Thu Jan  7 08:29 - down   (04:47)
reboot   system boot  5.4.0-53-generic Thu Jan  7 08:20 - 13:16  (04:56)

wtmp begins Sun May 24 13:16:52 2020

1.8. 显示最后登录用户的完整日期和时间

-F (--fulltimes) 选项用于显示完整的登录和注销日期和时间 last 命令的输出。

$ last -5 -F

样本输出:

ostechni pts/0        192.168.225.37   Mon Jan 11 06:39:29 2021   still logged in
[...]

1.9。 在最后一列显示主机名

-a (--hostlast) 选项用于最后显示主机名列以防止截断。

$ last -d -a
ostechni pts/0        Mon Jan 11 06:39   still logged in    ostechnix
[...]

1.10。 查看伪用户“rebo​​ot”的上次登录记录

正如我前面提到的,最后一个命令保存了一个名为“rebo​​ot”和“shutdown”的特殊伪用户的记录。

要查看“rebo​​ot”和“shutdown”用户的上次登录详细信息,请使用以下命令:

$ last reboot
$ last shutdown

2. 在 Linux 中使用 lastb 显示失败的登录尝试

lastblast 命令,但它只列出所有错误的登录尝试。 它从 /var/log/btmp 文件。

请注意,您的系统仅将信息记录在 btmp 文件(如果存在)。 如果此文件因任何原因不可用,只需使用 touch 命令如下:

$ sudo touch /var/log/btmp

现在我们可以使用 lastb 命令显示失败的登录尝试,如下所示:

$ sudo lastb

样本输出:

UNKNOWN  tty1                          Mon Jan 11 07:51 - 07:51  (00:00)
sk       tty1                          Mon Jan 11 07:51 - 07:51  (00:00)
UNKNOWN  tty1                          Mon Jan 11 07:51 - 07:51  (00:00)
sk       tty1                          Mon Jan 11 07:51 - 07:51  (00:00)
ostechni ssh:notty    192.168.225.37   Mon Jan 11 07:49 - 07:49  (00:00)
ostechni ssh:notty    192.168.225.37   Mon Jan 11 07:49 - 07:49  (00:00)
ostechni ssh:notty    192.168.225.37   Mon Jan 11 07:49 - 07:49  (00:00)
UNKNOWN  tty1                          Wed Jan  6 10:59 - 10:59  (00:00)

btmp begins Wed Jan  6 10:59:57 2021
在 Linux 中使用 lastb 命令显示失败的登录尝试在 Linux 中使用 lastb 命令显示失败的登录尝试

上述命令列出了 Linux 系统中所有用户的所有不成功登录尝试。 它还显示了通过 SSH 发生的失败登录尝试。

3.在Linux中使用lastlog命令查找最后登录的用户

最后日志 命令显示 Linux 和类 Unix 操作系统中所有用户或特定用户的最近登录。 它从以下位置检索上次登录用户的列表 /var/log/lastlog 文件并在标准输出中显示结果。

要显示所有用户的最近登录,请运行:

$ lastlog

样本输出:

Username         Port     From             Latest
root                                       **Never logged in**
daemon                                     **Never logged in**
bin                                        **Never logged in**
[...]
systemd-coredump                           **Never logged in**
ostechnix        tty1                      Mon Jan 11 07:51:46 +0000 2021
lxd                                        **Never logged in**
dnsmasq                                    **Never logged in**
libvirt-qemu                               **Never logged in**
libvirt-dnsmasq                            **Never logged in**
cockpit-ws                                 **Never logged in**
cockpit-wsinstance                           **Never logged in**
libvirtdbus                                **Never logged in**
_flatpak                                   **Never logged in**
sk               pts/0    192.168.225.37   Wed Jan  6 11:02:17 +0000 2021
root                                       **Never logged in**
nobody                                     **Never logged in**
使用 lastlog 命令在 Linux 中查找最后登录的用户使用 lastlog 命令在 Linux 中查找最后登录的用户

正如您在上面的输出中看到的, lastlog 命令显示系统用户帐户以及其他服务帐户的最后登录记录,例如 bin, daemon, sys, mail, nobody 等等

lastlog 命令打印用户登录的登录名、端口、源 IP 地址以及上次登录日期和时间。 如果用户从未登录,它将打印消息 ** Never logged in** 而不是输出中的端口和时间。

您可能想知道为什么有许多服务帐户从未登录。这是因为这些帐户的登录 shell 设置为 /sbin/nologin. 用于限制对 shell 的直接访问是常见的安全实践。

3.1。 显示特定用户的上次登录详细信息

如果要显示指定用户的lastlog记录,对于 example ostechnix,命令将是:

$ lastlog -u ostechnix

样本输出:

Username         Port     From             Latest
ostechnix        tty1                      Mon Jan 11 07:51:46 +0000 2021

3.2. 显示 X 天之前或最近的上次登录记录

lastlog 命令可以显示最近的登录记录早于或最近早于 X 天。

例如,您可以使用 5 天之前获取所有用户的最近登录记录 -b 标志如下:

$ lastlog -b 5

同样,要显示 5 天以上的登录记录,请使用 -t 旗帜:

$ lastlog -t 5

3.3. 在 Linux 中使用 lastlog 删除或清除上次登录信息

如果您不想要用户的 lastlog 记录,只需使用清除它们 -C (--clear) 旗帜:

$ sudo lastlog -u ostechnix -C

要验证日志记录是否已清除,请运行:

$ lastlog -u ostechnix
Username         Port     From             Latest
ostechnix                                         **Never logged in**

获得帮助

有关更多详细信息,请参阅相应命令的帮助部分。

$ last --help
$ lastb --help
$ lastlog --help

或者浏览每个命令的手册页:

$ man last
$ man lastb
$ man lastlog

结论

last, lastblastlog 命令可以用来检测 Linux 系统中的可疑用户活动。 查找最近登录(或注销)Linux 服务器的人员、他们何时登录以及登录时长等重要细节,这些重要细节肯定会在故障排除时帮助您。

相关阅读:

  • 如何在 Linux 中查找当前登录的用户
  • 如何在 Linux 中列出所有用户
  • 如何在 Linux 中监控用户活动
  • 如何限制用户对 Linux 系统的访问