Kali Linux 日志分析:使用 journalctl

Kali LinuxKali LinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验中,你将学习在 Kali Linux 环境中使用强大的 journalctl 工具和其他命令行实用程序进行日志分析的基础知识。专为初学者设计,这种实践体验侧重于系统管理和调试的基本技能。你将探索如何在 LabEx 虚拟机上的 Kali Linux 容器中访问、查看和分析系统日志。

通过逐步的实践练习,你将查看存储在 /var/log 等目录中的系统日志,按特定服务过滤日志,搜索错误,并导出日志以进行进一步分析。所有操作都将在 Kali Linux 容器的 shell 中执行,当你打开终端时,你将自动进入该 shell。这个实验提供了一个受控的环境,以培养你在监控和排除系统事件方面的技能。

在 Kali Linux 中查看系统日志

在第一步中,你将学习如何在 LabEx 虚拟机上的 Kali Linux 容器中查看系统日志。系统日志对于监控和排除 Linux 系统上的问题至关重要,因为它们记录了事件、错误和活动。作为一个初学者,了解如何访问这些日志是系统管理的一项基础技能。

当你打开 LabEx 虚拟机环境中的终端时,你将自动连接到 Kali Linux 容器的 shell。无需手动启动容器或进入 shell;环境已经为你设置好了。本实验中的所有操作都将在该容器的终端内执行。

Linux 系统将日志存储在 /var/log 等目录中。常见的日志文件包括 /var/log/syslog(用于常规系统消息)和 /var/log/auth.log(用于与身份验证相关的事件)。让我们从使用简单命令查看这些文件的内容开始。

在终端中运行以下命令,以显示 /var/log/syslog 文件的最后 10 行:

tail -n 10 /var/log/syslog

此命令使用 tail 显示日志文件中最新的条目。输出将类似于这样,尽管确切的内容取决于你系统的活动:

Oct 15 10:22:34 kali-container kernel: [ 1234.567890] some kernel message
Oct 15 10:23:01 kali-container cron[1234]: (CRON) INFO (pidfile fd = 3)
...

每行通常包括一个时间戳、主机名、服务或进程名称以及事件详细信息。此输出确认你已成功访问系统日志。

要实时持续监控新的日志条目,这对于调试很有用,请运行此命令:

tail -f /var/log/syslog

这将显示添加的新条目。要停止监控,请按 Ctrl + C 返回到终端提示符。

接下来,让我们检查身份验证日志文件 /var/log/auth.log,它记录登录尝试和其他安全事件。运行此命令:

tail -n 5 /var/log/auth.log

输出可能如下所示,显示与身份验证相关的活动:

Oct 15 10:20:01 kali-container sudo: root : TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=/bin/bash
...

这一步向你介绍了查看日志,这是一项基本但必不可少的技能。在后续步骤中,你将在此基础上构建,通过过滤和分析这些日志来获取特定信息。

安装和使用 journalctl 查看日志

现在你已经看到了如何使用 tail 等基本命令查看日志,让我们转向一个更强大的工具,名为 journalctl。此工具用于查询和显示由 systemd 管理的日志,systemd 是现代 Linux 发行版(包括 Kali Linux)中的系统和服务管理器。作为一个初学者,学习 journalctl 很重要,因为它提供了一种结构化的方式来访问详细的系统日志。

由于你已经在 Kali Linux 容器的 shell 中(打开终端时自动进入),因此无需手动导航或启动任何东西。但是,journalctl 在最小的容器设置中可能未预先安装或功能不全,因此我们将通过更新软件包列表并安装所需的组件来确保必要的工具可用。

运行以下命令以更新软件包列表并安装 systemd 组件(如果需要):

apt update
apt install -y systemd

这些命令会刷新软件包存储库并安装 systemd,其中包括 journalctl。等待安装完成;这可能需要几分钟。

安装完成后,你可以使用 journalctl 查看系统日志。运行此命令以显示最近的日志条目:

journalctl -n 10

-n 10 选项将输出限制为最后 10 行。输出将类似于这样,尽管它取决于你系统的活动:

Oct 15 10:25:01 kali-container systemd[1]: Starting system activity...
Oct 15 10:25:02 kali-container systemd[1]: Started system activity...
...

此输出显示带有时间戳、服务名称和消息的日志条目。如果你看到类似这样的内容,则表示 journalctl 正在正常工作。如果没有输出出现或你遇到错误,则可能是由于容器环境中日志数据有限,这对于此实验设置是正常的。

要实时查看日志,类似于 tail -f,请运行此命令:

journalctl -f

这将持续显示新的日志条目。按 Ctrl + C 停止监控并返回到终端提示符。

这一步帮助你了解如何使用 journalctl 查看日志,这比基本的文件查看更高级。在下一步中,你将学习如何过滤这些日志以获取特定服务。

使用 journalctl 按服务过滤日志

在你可以使用 journalctl 查看日志的基础上,这一步侧重于过滤日志以显示与特定服务相关的条目。作为一个初学者,过滤是一项关键技能,因为系统日志通常包含来自各种进程的混合消息,而隔离相关信息有助于解决特定问题。

你仍然在 Kali Linux 容器的 shell 中工作,当你打开终端时,你将自动进入该 shell。无需手动导航或启动容器。我们将使用 journalctl 过滤特定服务的日志,例如 cron,它管理 Linux 中的计划任务。这使你能够专注于与单个组件相关的日志,而不会被不相关的数据淹没。

要过滤 cron 服务的日志,请运行以下命令:

journalctl -u cron

-u 选项指定要过滤的单元(服务),在本例中为 cron。输出将仅显示与 cron 服务相关的日志,看起来像这样,具体取决于系统活动:

Oct 15 10:30:01 kali-container cron[1234]: (CRON) INFO (pidfile fd = 3)
Oct 15 10:30:02 kali-container cron[1235]: (CRON) STARTUP (fork ok)
...

此输出仅显示与 cron 相关的条目,包括时间戳和事件详细信息。如果没有输出出现,则可能意味着 cron 服务在此容器中没有生成最近的日志,这对于学习目的来说是可以接受的。

如果 cron 日志不可用或你想探索另一个服务,你可以尝试过滤 sshd(如果已安装),它处理 SSH 连接。首先,通过运行以下命令确保已安装 openssh-server

apt install -y openssh-server

等待安装完成。然后,使用此命令过滤 sshd 的日志:

journalctl -u ssh

如果服务处于活动状态,输出可能会显示与 SSH 相关的事件。如果没有输出出现,对于本实验来说是可以的,因为重点是学习过滤过程。

这一步教你如何使用 journalctl 将日志数据缩小到特定服务。在下一步中,你将学习在这些日志中搜索错误以识别潜在问题。

使用 journalctl 搜索日志中的错误

在学习了按服务过滤日志之后,这一步将指导你使用 journalctl 搜索系统日志中的错误。作为一个初学者,在日志中识别错误对于故障排除至关重要,因为日志通常包含指示服务或应用程序出现问题的消息。这项技能可以帮助你快速查明需要关注的问题。

你仍然在 Kali Linux 容器的 shell 中运行,当你打开终端时,会自动访问该 shell。无需额外的设置或导航。我们将使用 journalctl 通过根据优先级级别过滤日志来搜索错误消息,其中错误通常以特定的严重性记录。

journalctl 中,日志条目按优先级级别进行分类,其中 3 代表错误(关键问题),4 代表警告。要搜索所有日志中的错误消息,请运行以下命令:

journalctl -p 3

-p 3 选项过滤日志,仅显示优先级级别为 3(错误)的条目。输出可能如下所示,具体取决于你系统的活动:

Oct 15 10:35:10 kali-container some-service[5678]: error: failed to initialize module
...

此输出显示带有时间戳和详细信息的错误消息。如果没有输出出现,则表示日志中没有此优先级级别的最近错误,这在受控容器环境中很常见。

要将警告与错误一起包含在内,你可以通过运行以下命令来搜索优先级级别 3 和 4:

journalctl -p 3..4

此命令显示错误和警告。输出可能包括额外的行,例如:

Oct 15 10:36:15 kali-container another-service[7890]: warning: connection timeout
...

如果没有输出出现,对于本实验来说是可以接受的,因为目标是学习搜索过程。这一步使你能够使用 journalctl 识别日志中的关键问题。在下一步中,你将学习导出这些日志以进行进一步分析。

使用 journalctl 导出日志以进行分析

在这一步中,你将学习如何使用 journalctl 导出系统日志以进行进一步分析。在之前的步骤中,你已经学习了查看、过滤和搜索日志,导出允许你将特定的日志数据保存到文件中。这对于详细检查或与他人共享以进行故障排除非常有用。作为一个初学者,这项技能可以帮助你记录发现,而无需反复访问原始日志。

你仍然在 Kali Linux 容器的 shell 中工作,当你打开终端时,你将自动进入该 shell。无需手动启动容器或导航。我们将使用 journalctl 提取日志,并将输出重定向到 /root 目录中的文件,以便于访问。

让我们将所有最近的日志导出到 /root 目录中名为 system_logs.txt 的文件中。运行此命令:

journalctl -n 50 > /root/system_logs.txt

-n 50 选项将输出限制为最后 50 个日志条目,> 符号将输出重定向到指定的文件。你不会在终端中看到输出,因为它被保存到文件中。要确认文件已创建并包含数据,请运行:

cat /root/system_logs.txt

输出将显示保存的日志条目,类似于你使用 journalctl -n 50 看到的内容,包括时间戳和消息。

接下来,让我们将按特定服务(例如 cron)过滤的日志导出到名为 cron_logs.txt 的文件中。运行此命令:

journalctl -u cron > /root/cron_logs.txt

这仅将与 cron 相关的日志保存到 /root/cron_logs.txt。通过运行以下命令来验证内容:

cat /root/cron_logs.txt

如果可用,输出将显示 cron 服务日志,确认导出成功。

最后,让我们将错误日志导出到名为 error_logs.txt 的文件中。运行此命令:

journalctl -p 3 > /root/error_logs.txt

这将错误消息保存到指定的文件中。使用以下命令检查内容:

cat /root/error_logs.txt

如果存在任何错误日志,此输出将显示它们。通过完成此步骤,你已经学会了保存日志数据以供以后查看,这是系统管理和调试的实用技能。

总结

在本实验中,你学习了使用 journalctl 工具和基本的命令行实用程序在 Kali Linux 中进行日志分析的基本知识。你首先使用 tail 等命令在 /var/log 目录中查看系统日志,然后逐步使用 journalctl 进行更结构化的日志访问。通过实践步骤,你按服务过滤日志,搜索错误,并在 LabEx 虚拟机上的 Kali Linux 容器中导出日志以进行进一步分析。这些基础技能为你提供了在 Linux 环境中进行有效系统管理和调试的能力。