Linux 的“娓娓道来之心” ,第二部分

作者:Marcel Gagné

大家好,欢迎回到 Corner 专栏。很高兴看到大家欢聚一堂,又迎来新的一周,共同深入了解您的 Linux 系统。我们了解系统的方式是倾听计算机在告诉我们什么。正如我上次暗示的那样,您的 Linux 系统中正在进行大量的对话,而日志只是其中的一部分。然而,由于日志非常重要,我们将在深入研究其他秘密之前,先更深入地探讨一下日志。

本周我想做的第一件事是赞扬本专栏的许多读者,他们正确地审视了我上周的“愚蠢的 Perl 脚本”,并说:“嗯,Marcel,你知道有更好的方法可以做到这一点,不是吗?” 在我告诉您更好的方法之前,我将在此坦诚地袒露心声,并诚实地告诉您,我甚至没有考虑过更好的方法。感谢所有来信的人,让我的大脑不至于变成浆糊。

更好的监视日志文件更改的方法是使用 tail 命令的 -f 标志。假设您正在密切关注 邪恶的 系统破解者,因此希望密切关注您的 /var/log/secure 文件。打开一个终端窗口,然后键入以下命令。

     tail -f /var/log/messages

-f 标志告诉 tail “跟踪”该文件,直到我使用 control-C 取消命令为止,tail 将继续添加文件中出现的任何新内容。再次感谢我的读者们让我保持警惕。

说到日志文件:当然,系统正忙于编写这冗长的日记,但在某些情况下,您可能希望能够自己写入系统日志。为此,您可以使用一个名为 logger 的小程序。logger 的作用是为您(或您的脚本)提供一个与 syslog 系统交互的命令行界面。那么您会问,这有什么好处呢?我将首先回答说,我真诚地钦佩 真正的(tm) 程序员。就我个人而言,如果我可以编写一个快速而简陋的脚本来解决问题,我就不会花几个小时来编写 C 代码。一个真正的 C 程序员会使用 syslog 库并为自己编写一个优雅的小守护程序。而我,作为一个懒惰的系统管理员类型,会编写一个脚本,该脚本使用 C 程序员编写的巧妙工具,例如 logger。使用 logger,我可以记录在一个标准化的系统位置 (/var/log/messages),我的 syslogd 守护程序正忙于处理其他业务。您可能还记得上一篇文章中提到,syslogd 甚至可能也在写入另一个系统的日志。

想象一下一个名为 “natika” 的脚本,它监视我的服务器上的一些关键系统资源。如果这些资源降至某个级别以下,系统会将一条消息写入系统日志文件,在本例中为 /var/log/messages。我将放入脚本中以实现此目的的命令如下。-f 标志允许您标识要写入的日志文件。-i 包括 logger 的进程 ID。

     logger -f /var/log/messages -i "Low on coffee.  This is very important."

如果我 “tail” 我的 /var/log/messages 文件,我将得到以下结果

    # tail -1 /var/log/messages
    Jul  5 14:32:06 natika logger[1355]: Low on coffee.  This is very important.

由于我的系统正在侦听 natika 的 syslog 消息,我将立即知道另一个系统上是否发生了重要事件。

除了您自己生成的用户日志条目之外,您可能已经注意到您的系统的个人日记开始变得相当繁忙。那么您如何知道要查找什么呢?更糟糕的是,即使在屏幕上运行 tail -f 消息日志在您连接并且您 恰好 正在观看时非常棒,那么其他时候呢?您的日志也需要关注那些您不在场的时候,而且(信不信由你)即使是系统管理员也需要睡觉。

这就是 Psionic Software 的 logcheck 发挥作用的地方。这是一个自动化的日志文件分析器,它在您睡觉时工作,并且可以免费使用并以 GPL 许可。请访问 http://www.psionic.com/abacus/logcheck/ 获取您的副本,然后立即返回查看详细信息。

最新版本是 logcheck-1.1.1.tar.gz。要安装它,请将文件解压到一个临时目录中并构建软件。您可能需要阅读整个 INSTALL 文件(尽管我将为您提供快速而简便的方法)。该文件包含一些关于保护您的日志文件的有价值的信息。如果您运行的是标准的 Linux 发行版,则您的日志文件的权限可能没问题 (rw-------)。

Logcheck(或多或少)由两个程序组成,logcheck.shlogtail。第一个程序 logcheck.sh 是一个脚本,它遍历您的日志文件,记录任何异常情况,并报告回来。第二个程序 logtail 记住它上次检查日志文件中的位置,以便它不会重复或重复地向 logcheck.sh 提供信息。还有一些额外的配置文件,我们稍后会介绍。以下是安装软件包的方法

     tar -xzvf logcheck-1.1.1.tar.gz
     cd logcheck-1.1.1
     make linux

安装运行速度很快,只需几秒钟,您就可以开始使用了。我们需要做的第一件事是进行一些本地配置。使用您最喜欢的编辑器(是的,我是 vi 的拥趸),按以下方式修改 /usr/local/etc/logcheck.sh 脚本。稍稍向下滚动,您会注意到一个类似于以下的条目

     # Person to send log activity to
     SYSADMIN=root

生成的报告将通过电子邮件发送给该用户。在我们的系统中,我使用 SYSADMIN=security。“security” 是一个邮件别名,它将电子邮件发送给不同地点的少数人(以防万一)。如果发生可怕的事情(即,邪恶的破解者攻击),我仍然有证据,因为它已通过邮件发送到系统外。

您还会找到另一个名为 “LOG FILE CONFIGURATION SECTION” 的部分,其中包含 logcheck 监视的日志文件。您可以根据需要添加或删除文件。以下是我自己的脚本文件中的文件

     $LOGTAIL /var/log/messages > $TMPDIR/check.$$
     $LOGTAIL /var/log/secure >> $TMPDIR/check.$$
     $LOGTAIL /var/log/maillog >> $TMPDIR/check.$$

现在一切都配置好了,我们需要设置 cron 以定期运行 logcheck.sh 脚本。以下是 root crontab 的示例条目(请记住,您可以使用命令 crontab -e 添加 cron 条目)。在本示例中,logcheck.sh 将每小时运行四次,间隔 15 分钟。

     0,15,30,45 * * * * /usr/local/etc/logcheck.sh

当 logcheck 运行时,它将报告分为三个主要部分:“活动系统攻击”、“安全违规” 和 “异常系统事件”。请注意,其中一些项目可能会在所有三个区域中报告,例如任何符合活动系统攻击条件的项目。触发此类消息的关键字位于您可能还记得我之前提到的其他文件之一中,在本例中为 “logcheck.hacking”。其他三个文件称为 “logcheck.violations”、“logcheck.violations.ignore” 和普通的 “logcheck.ignore”。您将在 /usr/local/etc 中找到所有这些文件。

logcheck.hacking 具有像 ATTACK、LOGIN FAILURE 等令人讨厌的关键字。与此文件中的任何内容匹配的消息都将发送到您的电子邮件地址,主题行显示 “ACTIVE SYSTEM ATTACK”。显然,这是为了引起您的注意,而且确实如此。与 logcheck.violations 中的关键字匹配的消息将显示在 “安全违规” 标题下。最后一个文件 logcheck.violations.ignore 正如其名称所示:logcheck 要忽略的关键字列表。例如,对于我自己的内部网络,我告诉 logcheck 忽略任何包含 “192.168.1.” 的内容,方法是将该内容添加到文件中。默认情况下,该文件中唯一的内容是 “stat=Deferred”。

最后一个文件 logcheck.ignore 适用于任何和所有类型的消息。如果您扫描该文件,您会看到其中有很多内容 - 名为 “lame” 的消息、cron 启动、sendmail 统计信息和其他内容。键入 more /usr/local/etc/logcheck.ignore 以查看这些内容。与其他文件一样,您可以根据自己的需要自定义它们。警告!!由于 logcheck 生成的信息量很大(其实并没有那么糟糕),您会很想在这些忽略文件中添加很多内容,但请务必小心。您不希望为了获得更简洁的报告而开始过滤掉重要数据。更多信息几乎总是比更少信息更好。以下是 logcheck 输出的一个(非常小的)示例

Security Violations
=-=-=-=-=-=-=-=-=-=
Jul  5 16:05:03 netgate PAM_pwdb[3908]: authentication failure; (uid=0) ->
+edgarc for pop service
Jul  5 16:05:04 netgate ipop3d[3908]: Login failure user=edgarc
+host=[192.168.1.6]
Jul  5 16:06:36 netgate PAM_pwdb[3912]: authentication failure; (uid=0) ->
+edgarc for pop service

看来 “edgarc” 可能忘记了他的密码。

如您所见,借助像这样的软件包,您可以大大简化过滤和查看日志的工作。随着您越来越熟悉您期望在这些日志中看到的内容,您可以自定义关键字文件以提供您想要的信息。即使使用默认文件,logcheck 也是一个非常棒的小软件包。

是时候结束了。当我们下次在系统管理员专栏聚会时,我们将研究如何在目前的基础上扩展我们的警惕之眼,以便在脚本小子和系统破解者造成任何实际损害之前发现他们。那么,我引起您的注意了吗?在那之前,请记住:您的 Linux 系统正在与您对话。您在倾听吗?

电子邮件:ljeditors@ssc.com

加载 Disqus 评论