Linux 服务器日志文件查找技巧精粹(1)


51CTO.com独家特稿】用来在日志文件里搜索特定活动事件的工具不下几十种,本文将介绍搜索日志文件时应该采取的策略。然后,通过几个具体示例介绍一些使用grep命令手动搜索日志文件的办法。接下来,我们将看到logwatch工具和logsurfer工具的用法。最后,将看到需要自行下载和安装的工具,如swatch等。

1、查找日志文件简单方法

一般来说,系统日志文件几乎都保存在/var/子目录该路径由syslog.conf文件定义)。如果想让所有的应用程序都把日志文件集中存放到/var/子目录下,需要依次对每一个应用程序的配置文件进行编辑。把日志集中到/var/子目录下是个很好的主意。首先,当需要查看它们、修改它们的权限或者对它们进行备份的时候,只要到一个地方就可以找到所有的日志文件。

其次,/var/子目录通常是在一个独立于根目录/)的文件系统里,这有助于防止日志文件迅速变大并占满可用空间,避免操作系统和应用程序受到影响。可以利用find命令把你不知道的日志文件查找出来具体做法是:先切换到根目录下,然后以根用户root)身份执行下面这条命令把最近被修改过的文件全部找出来:

find . -type f -mtime -5 –print | grep -v proc | grep -v lock

2、搜索日志文件时的策略

日志文件分析工作中的第一个挑战是把异常活动从正常活动中识别出来。完成这项挑战的前提是你必须知道系统和网络上的正常活动在日志文件里是什么样子。如果没有事先积累的经验,很难知道按规律发生的事件在日志文件里的表现。熟悉正常的日志文件活动要有一个时间过程,要求大家一上来就把日志文件看明白显然不现实,这是一个需要时间积累的过程。

要知道,随着网络上的应用程序和用户的数量不断增减和变化,日志文件的内容肯定会发生相应的改变。把异常情况孤立出来之后,接下来的步骤是正确地判断这种异常情况是否属于警报条件。要想正确地做出判断,只能通过加深对公司日常活动的了解才能做到。往往需要在系统的可用性与防范风险之间把握一种平衡。

3、以手动方式搜索日志文件

grep是Unix系统上功能最强大的shell命令之一。利用grep命令在日志文件里搜索各种可疑线索是这个文本文件搜索命令的绝佳用途。grep命令的用法很简单——在命令行上输入:

grep "failed" /var/log/messages

上面这条grep命令将把/var/log/messages文件里包含单词“failed”的文本行全部找出来。在默认情况下,grep命令是大小写敏感的,你可能需要根据具体情况使用grep命令和它的“-i”选项来进行对大小写不敏感的搜索。搜索日志文件的挑战之一是你必须先知道自己想找什么东西,然后才可以把可能存在的这个东西找出来。有几种办法可以帮助解决这一问题。

如果你知道自己想找的事件或活动——比如,用户试图使用su命令切换为根用户——可以先自己进行一次这样的活动,然后去日志文件里看看它是什么样子。比如,在SUSE Linux系统上,执行失败的su命令将在日志文件里留下这样一条记录:

Apr  1 11:15:54 chim su: FAILED SU (to root) rreck on /dev/pts/1

于是,如果想把所有这类活动都查出来,应该使用下面这样的命令:

grep "FAILED SU" /var/log/messages

上面示例里的活动是黑客攻击的一种标志。如果grep命令只在日志文件里零零散散地找到了几个这样的失败事件,那很可能是有人忘记了口令字或者是打字时出现了错误。反之,如果grep命令在日志文件里找到几十个这样的失败事件,很可能是有人在试图闯入你的系统,应该立刻采取措施在网络级拒绝他们的访问。

4、使用logsurfer工具搜索日志文件

logsurfer是一个日志文件搜索工具。与swatch等日志搜索工具相比,logsurfer允许人们做出更细致的决定。与其他日志搜索程序相似,logsurfer工具也是把日志文件里的每一行与一些规则表达式进行匹配,每找到一个匹配就相应地执行某个动作,而那些动作被表达为“规则”。logsurfer工具在某些方面比swatch工具做得还要好。

首先,logsurfer工具使用两组规则表达式匹配文本行;日志文件中的文本行必须匹配第一组表达式,但不需要匹配可选的第二组表达式。这种安排在某些场合非常有用,它可以让人们方便地排除异常情况。logsurfer工具的另外一个突出优点是它可以结合上下文进行检查而不是只检查单个的文本行。这很方便,因为日志文件里的单独一行文本往往不足以包含做出某个决定所需要的信息。

要说不足,不少人认为logsurfer工具比较难以配置,因为对它进行配置必须精通规则表达式,而且它本身提供的配置示例不够多。如果想了解更多关于logsurfer工具的信息,它的man文档是最好的地方。列在表1里的细节都可以在这个工具的man文档里查到。logsurfer配置文件里的每

一行可以是以下三种情况之一:如果第一个字符是“#”,它是一个注释行;如果第一个字符是空格,它是上一行的继续;如果第一个字符既不是“#”也不是空格,它是一条新规则的开始。每条新规则由六个必要字段第1、2、3、4、5、7字段)和一个可选字段第6字段)组成,对这七个字段的详细解释见表1。

表1 logsurfer配置行上的各个字段

字段编号

是否是可选

字段名

字段解释

1

必要

match_regex

“字段1”被解释为一个规则表达式。如果文本行匹配“字段1”match_regex),按后续各项定义依次处理;如果不匹配,logsurfer将用下一条规则匹配这个文本行,本规则后续各项定义不起作用

2

必要或-

not_match_regex

这个字段将被解释为一个规则表达式。用“字段1”match_regex)匹配到的文本行只有在不匹配“字段2”not_match_regex)的情况下才继续按后续各项定义依次处理

3

必要或-

stop_regex

如果不是减号-)字符,本字段将被解释为一个规则表达式。如果这个表达式得到匹配,本规则将从活跃规则表里被删除

4

必要或-

not_stop_regex

如果不是减号-)字符,本字段将被解释为一个规则表达式。只有在“字段3”stop_regex)存在且已得到匹配和“字段4”not_stop_regex)不匹配的情况下才删除这个规则

5

必要或0

timeout

以秒计算logsurfer规则的寿命,把“字段5”设置为0表示规则永远有效

6

可选

Continue

如果这个字段被设置为“continue”,logsurfer将继续使用下一条规则来匹配文本行;如果没有“continue”,后续的规则将全部被跳过

7

必要

Action

以下几种动作之一:ignore、exec、pipe、open、delete、report、rule

表2 logsurfer动作解释

动作名称

解释

Ignore

什么都不做,忽略被匹配到的文本行。有时候,虽然用logsurfer工具找到了一些日志文本行,但如果知道它们并不重要,可以用这个动作不让logsurfer发出警报

exec

这个动作的参数被解释为一个程序,规则得到匹配时logsurfer将调用该程序

pipe

类似于exec动作,但被调用的程序将从stdin设备读入一个日志文本行

open

增加打开)一个新的上下文,但在匹配match_regex“字段1”)时已经存在的上下文就不必再次打开了

Delete

如果一个现已存在的match_regex被用做这个动作的参数,指定的上下文将被关闭并删除,而且不采取“default_action”选项定义的默认动作

report

这个动作的第1个参数是一个将被调用执行的程序及其命令行选项)。随后的参数是一些将被用做该程序的标准输入的上下文定义

Rule

这个动作将创建一条新规则。关键字“rule”的后面必须有一个告诉logsurfer按什么顺序使用新规则的指示符:before在本规则之前使用)、behind在本规则之后使用)、top在本配置文件所有规则之前使用)、bottom在本配置文件所有规则之后使用)

5、使用swatch工具搜索日志文件

swatch工具不是Red Hat Enterprise Linux发行版本的标准组成部分,但因为swatch工具很容易安装、配置和使用,所以你应该考虑下载并安装它。在开始使用它之前,还需要一个配置文件。在默认情况下,swatch工具将在启动它的那个用户的登录子目录里寻找.swatchrc文件例如/home/rreck/.swatchrc),但你可以用“-f”选项为它另外指定一个配置文件,如下所示:

swatch –f /etc/.swatchrc

接下来,看看如何使用swatch工具从日志文件里发现黑客活动的踪迹以及发现之后该做些什么。


相关内容