了解谁在何时何地访问您的 Linux 计算机,对于良好的安全实践至关重要。 本文将向您展示如何做到这一点。
wtmp 文件是什么?
Linux 和其他类 Unix 操作系统(如 macOS)都具备强大的日志记录能力。 几乎所有系统内部发生的事件都会被记录在某个地方。 我们在这里关注的日志文件名为 wtmp。”w” 可能代表 “who”(谁)或 “when”(何时), 意见似乎并不统一。”tmp” 部分可能表示 “temporary”(临时的)或 “timestamp”(时间戳)。
我们所知道的是,wtmp 是一个记录每次登录和注销事件的日志。 查看 wtmp 日志中的数据是系统管理员采取安全措施的基本步骤。 虽然对于典型的家庭计算机来说,从安全的角度来看可能不是那么重要,但能够审查您对计算机的组合使用情况还是很有意思的。
与 Linux 中许多基于文本的日志文件不同,wtmp 是一个二进制文件。 要访问其中的数据,我们需要使用专门为此设计的工具。
该工具就是 last
命令。
last
命令详解
last
命令可以从 wtmp 日志中读取数据,并在终端窗口中显示出来。
如果直接输入 last
并按下回车键,它将 显示日志文件中的所有记录。
last
来自 wtmp 的每条记录都会在终端窗口中显示。 从左到右,每行包含以下信息:
- 登录用户的用户名。
- 他们登录的终端。 终端条目
:0
表示他们已在 Linux 计算机本身上登录。 - 他们登录的机器的 IP 地址。
- 登录的时间和日期戳。
- 会话的持续时间。
最后一行会显示日志中最早记录的会话的日期和时间。
每次启动计算机时,都会在日志中输入一个虚构用户 “reboot” 的登录条目。 终端字段会被替换为内核版本。 这些条目的登录会话持续时间表示计算机的正常运行时间。
显示特定数量的行
单独使用 last
命令会生成整个日志的转储,其中大部分会快速滚过终端窗口。 仍然可见的部分是日志中最早的数据,这可能不是我们想要的。
您可以指定 last
命令输出的行数。 只需在命令行中提供所需的行数即可,注意使用连字符。 例如,要查看最近的五行,需要输入 -5
而不是 5
。
last -5
这将输出日志的前五行,即最新的数据。
显示远程用户的网络名称
-d
(域名系统)选项会指示 last
命令尝试将远程用户的 IP 地址解析为机器或网络名称。
last -d
last
命令并不总是可以将 IP 地址转换为网络名称,但它会在可能的情况下执行此操作。
隐藏 IP 地址和网络名称
如果您对 IP 地址或网络名称不感兴趣,可以使用 -R
(无主机名)选项来隐藏此字段。
由于这提供了更整洁的输出,没有多余的环绕,所以在以下所有示例中都使用了此选项。 如果您使用 last
命令来尝试识别异常或可疑活动,则无需隐藏该字段。
按日期选择记录
您可以使用 -s
(since)选项将输出限制为仅显示自特定日期以来发生的登录事件。
例如,如果您只想查看 2019 年 5 月 26 日发生的登录事件,您可以使用以下命令:
last -R -s 2019-05-26
输出将显示从指定日期 00:00 到日志文件中最新记录的登录事件。
搜索直到结束日期
您可以使用 -t
(until) 选项来指定结束日期。 这使您可以选择在两个感兴趣的日期之间发生的一组登录记录。
下面的命令将指示 last 命令检索并显示从 26 日 00:00(黎明)到 27 日 00:00(黎明)的登录记录。 这会将列表缩小到仅在 26 日发生的登录会话。
时间和日期格式
您可以同时使用带 -s
和 -t
选项的时间和日期。
以下是与 last
命令的日期和时间选项一起使用的一些时间格式:
- YYYYMMDDhhmmss
- YYYY-MM-DD hh:mm:ss
- YYYY-MM-DD hh:mm – 秒设置为 00
- YYYY-MM-DD – 时间设置为 00:00:00
- hh:mm:ss – 日期设置为今天
- hh:mm – 日期设置为今天,秒设置为 00
- now
- yesterday – 时间设置为 00:00:00
- today – 时间设置为 00:00:00
- tomorrow – 时间设置为 00:00:00
- +5minutes
- -5days
为什么说是 “据称” 呢?
列表中第二和第三种格式在本文研究期间并未生效。 这些命令在 Ubuntu、Fedora 和 Manjaro 发行版上进行了测试。 它们分别是 Debian、RedHat 和 Arch 发行版的衍生产品,涵盖了 Linux 发行版的所有主要系列。
last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00
如您所见,该命令根本没有返回任何记录。
使用列表中与上一个命令具有相同日期和时间的第一个日期和时间格式,会返回记录:
last -R -s 20190526110000 -t 20190527130000
按相对单位搜索
您还可以指定相对于当前日期和时间以分钟或天为单位的时间段。 在这里,我们要求从两天前到一天前的记录。
last -R -s -2days -t -1days
yesterday
, today
, 和 now
您可以使用 yesterday
和 tomorrow
作为昨天日期和今天日期的简写。
last -R -s yesterday -t today
请注意,这不包括今天的任何记录,这是预期的行为。 该命令要求提供从开始日期到结束日期的记录,不包括结束日期内的记录。
now
选项是 “今天在当前时间” 的简写。 要查看从 00:00(黎明)到您发出命令时发生的登录事件,请使用以下命令:
last -R -s today -t now
这将显示当前的所有登录事件,包括那些仍然登录的事件。
-p
选项
-p
(present) 选项允许您找出谁在某个时间点登录。
他们何时登录或注销并不重要,但如果他们在您指定的时间登录到计算机,他们将被包含在列表中。
如果您指定一个没有最后日期的时间,则假定您的意思是 “今天”。
last -R -p 09:30
仍然登录的人(显然)没有注销时间; 他们被描述为仍然登录。 如果计算机在您指定的时间之后没有重新启动,它将被列为仍在运行。
如果您使用带有 -p
(现在)选项的 now
速记,您可以在您发出命令时找出谁登录了。
last -R -p now
这是一种有点冗长的方式来实现使用 who
命令可以完成的任务。
lastb
命令
lastb
命令也值得一提。 它从名为 btmp 的日志中读取数据。 关于这个日志名称有点争议。 ‘b’ 代表 bad(错误的),但 ‘tmp’ 部分仍有争议。
lastb
列出了错误的(失败的)登录尝试。 它接受与 last
命令相同的选项。 因为它们是失败的登录尝试,所以它们的条目都将具有 00:00 的持续时间。
您必须将 sudo
与 lastb
一起使用。
sudo lastb -R
总结
了解谁在何时何地登录您的 Linux 计算机是一项有用的信息。 将此与失败登录尝试的详细信息相结合,可以帮助您迈出调查可疑行为的第一步。