第19章 认识与分析日志文件

当你的Linux系统出现不明原因的问题时,很多人都告诉你,你要查阅一下日志文件才能够知道系统出了什么问题了,所以说,了解日志文件是很重要的事情。日志文件可以记录系统在什么时间、哪个主机、哪个服务、出现了什么信息等,这些信息也包括用户识别数据、系统故障排除须知等信息。如果你能够善用这些日志文件信息的话,你的系统出现错误时,你将可以在第一时间发现,而且也能够从中找到解决的方案,而不是昏头转向地乱问人呢!此外,日志文件所记录的信息量是非常大的,要人眼分析实在很困难。此时利用 shell script或者是其他软件提供的分析工具来处理复杂的日志文件,可以帮助你很多喔!

19.1 什么是日志文件

详细而确实地分析以及备份系统的日志文件是一个系统管理员应该要进行的任务之一。那么什么是日志文件呢?简单地说,就是记录系统活动信息的几个文件,例如:何时、何地(来源 IP)、何人(什么服务名称)、做了什么操作(信息日志)。换句话说就是:记录系统在什么时候由哪个进程做了什么样的行为时,发生了何种的事件等。

要知道的是,我们的Linux主机在后台下有相当多的daemons同时在工作着,这些工作中的进程总是会显示一些信息,这些显示的信息最终会被记载到日志文件当中。也就是说,记录这些系统的重要信息就是日志文件的工作。

Ⅰ日志文件的重要性

为什么说日志文件很重要,重要到系统管理员需要随时注意它呢?我们可以这么说:

解决系统方面的错误

用Linux这么久了,你应该偶而会发现系统可能会出现一些错误,包括硬件捕获不到或者是某些系统程序无法顺利运行的情况。此时你该如何是好?由于系统会将硬件检测过程记录在日志文件内,你只要通过查询日志文件就能够了解系统做了什么事,并且由第17章我们也知道SELinux与日志文件的关系更加密切!所以,查询日志文件可以克服一些系统问题。

解决网络服务的问题

你可能在做完了某些网络服务的设置后,却一直无法顺利启动该服务,此时该怎办?去庙里面拜佛抽签吗?三太子可能无法告诉你要怎么处理呢!由于网络服务的各种问题通常都会被写入特别的日志文件,其实你只要查询日志文件就会知道出了什么差错,还不需要请示三太子。举例来说,如果你无法启动邮件服务器(sendmail),那么查询一下/var/log/maillog通常可以得到不错的解答!

过往事件记录簿

这个东西相当重要!例如:你发现WWW服务(apache软件)在某个时刻流量特别大,你想要了解为什么时,可以通过日志文件去找出该时段是哪些IP在联机与查询的网页数据是什么,就能够知道原因。此外,万一哪天你的系统被入侵,并且被利用来攻击他人的主机,由于被攻击主机会记录攻击者,因此你的IP就会被对方记录。这个时候你要如何告知对方你的主机是由于被入侵所导致的问题,并且协助对方继续往恶意来源追查呢?此时日志文件可是相当重要的呢!

所以我们常说“天助自助者”是真的。通过查看屏幕上面的错误信息与日志文件的错误信息,几乎可以解决大部分的 Linux 问题!

ⅡLinux常见的日志文件名

日志文件可以帮助我们了解很多系统重要的事件,包括登录者的部分信息,因此日志文件的权限通常是设置为仅有root能够读取而已。而由于日志文件可以记载系统这么多的详细信息,所以,一个有经验的主机管理员会随时随地查阅一下自己的日志文件,以随时掌握系统的最新动态。那么常见的几个日志文件有哪些呢?一般而言,有下面几个:

/var/log/cron

还记得第16章例行性工作调度吧?你的crontab调度有没有实际被进行?进行过程有没有发生错误?你的/etc/crontab是否编写正确?在这个日志文件内查询看看。

/var/log/dmesg

记录系统在开机的时候内核检测过程所产生的各项信息。由于CentOS默认将开机时内核的硬件检测过程取消显示,因此额外将数据记录一份在这个文件中。

/var/log/lastlog

可以记录系统上面所有的账号最近一次登录系统时的相关信息。第14 章讲到的lastlog命令就是利用这个文件的记录信息来显示的。

/var/log/maillog或/var/log/mail/*

记录邮件的往来信息,其实主要是记录sendmail(SMTP协议提供者)与dovecot(POP3协议提供者)所产生的信息。SMTP是发信所使用的协议,POP3则是收信使用的协议。sendmail与dovecot则分别是两套不同协议的软件。

/var/log/messages

这个文件相当重要,几乎系统发生的错误信息(或者是重要的信息)都会记录在这个文件中;如果系统发生莫名的错误时,这个文件是一定要查阅的日志文件之一。

/var/log/secure

基本上,只要牵涉到需要输入账号密码的软件,那么当登录时(不管登录正确或错误)都会被记录在此文件中。包括系统的login程序、图形界面登录所使用的gdm程序、su、sudo等程序,还有网络联机的ssh、telnet等程序,登录信息都会被记载在这里。

/var/log/wtmp,/var/log/faillog

这两个文件可以记录正确登录系统者的账户信息(wtmp)与错误登录时所使用的账户信息(faillog)。我们在第11章谈到的last就是读取wtmp来显示的,这对于追踪一般账号者的使用行为很有帮助!

/var/log/httpd/,/var/log/news/,/var/log/samba/*

不同的网络服务会使用它们自己的日志文件案来记载它们自己产生的各项信息!上述的目录内则是个别服务所制定的日志文件。

常见的日志文件就是这几个,但是不同的 Linux distributions 中,通常日志文件的文件名不会相同(除了/var/log/messages之外)。所以说,你还是得要查阅你Linux主机上面的日志文件设置数据才能知道你的日志文件主要文件名。

Ⅲ日志文件所需相关服务(daemon)与进程

那么这些日志文件是怎么产生的呢?基本上有两种方式,一种是由软件开发商自行定义写入的日志文件与相关格式,例如 WWW 软件 apache 就是这样处理的;另一种则是由 Linux distribution 提供的日志文件管理服务来统一管理,你只要将信息丢给这个服务后,它就会自己分门别类地将各种信息放置到相关的日志文件去!CentOS提供syslogd这个服务来统一管理日志文件。

除了这个syslogd之外,我们的内核也需要额外的登录服务来记录内核产生的各项信息,这个专门记录内核信息的日志文件服务就是klogd。所以说,日志文件所需的服务主要就是syslogd与klogd这两者。

不过要注意的是,如果你任凭日志文件持续记录的话,由于系统产生的信息天天都有,那么你的日志文件的容量将会无限增大。如果你的日志文件容量太大时,可能会导致大文件读写效率不佳的问题(因为要从磁盘读入内存,越大的文件消耗内存越多)。所以,你需要对日志文件备份与更新。那需要手动处理?当然不需要,我们可以通过logrotate(日志文件轮替)这玩意儿来自动化处理日志文件容量与更新的问题!

所谓的logrotate,基本上就是将旧的日志文件更改名称,然后新建一个空的日志文件,如此一来,新的日志文件将重新开始记录,然后只要将旧的日志文件留下一阵子,那就可以达到将日志文件“轮转”的目的啦!此外,如果旧的记录(大概要保存几个月吧)保存了一段时间没有问题,那么就可以让系统自动将它砍掉,免得占掉很多宝贵的硬盘空间。

总结一下,针对日志文件所需的功能,我们需要的服务与程序有:

syslogd:主要登录系统与网络等服务的信息;

klogd:主要登录内核产生的各项信息;

logrotate:主要进行日志文件的轮替功能。

由于我们的着眼点在于想要了解系统上面软件所产生的各项信息,因此本章主要针对syslogd与logrotate来介绍。接着下来我们来谈一谈怎么样规划。就由syslogd这个程序先谈起吧!毕竟得先有日志文件,才可以进行logrotate呀!你说是吧?

19.2 syslogd:记录日志文件的服务

刚才提到说Linux的日志文件主要是由syslogd在负责,那么你的Linux是否有启动syslogd呢?而且是否有设置开机时启动呢?检查一下先:

[root@www ~]# ps aux | grep syslog

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 4294 0.0 0.0 1716 568 ? Ss Mar31 0:00 syslogd -m 0

瞧!确实有启动的!

[root@www ~]# chkconfig —list syslog

syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off

默认情况下,命令行界面与图形界面 (3, 5) 都有启动。

看到syslog这个服务名称了吧?所以知道它已经在系统中工作。好了,既然本章主要是讲日志文件,那么你知道日志文件的内容是如何展现的?syslog的配置文件在哪里?如何设置?如果你的Linux主机想要当作日志文件服务器时,又该如何设置?下面就让我们来玩玩!

19.2.1 日志文件内容的一般格式

一般来说,系统产生的信息经过syslog而记录下来的数据中,每条信息均会记录下面的几个重要数据:

事件发生的日期与时间;

发生此事件的主机名;

启动此事件的服务名称(如samba,xinetd等)或函数名称(如libpam);

该信息的实际数据内容。

当然,这些信息的“详细度”是可以修改的,而且,这些信息可以作为系统排错之用呢!我们拿登录时一定会记载账户信息的/var/log/secure为例来说好了:

[root@www ~]# cat /var/log/secure

1 Mar 14 15:38:00 www atd[18701]: pam_unix(atd:session): session opened for

user root by (uid=0)

2 Mar 14 15:38:00 www atd[18701]: pam_unix(atd:session): session closed for

user root

3 Mar 16 16:01:51 www su: pam_unix(su-l:auth): authentication failure; logn

ame=vbird uid=500 euid=0 tty=pts/1 ruser=vbird rhost= user=root

4 Mar 16 16:01:55 www su: pam_unix(su-l:session): session opened for user

root by vbird(uid=500)

5 Mar 16 16:02:22 www su: pam_unix(su-l:session): session closed for user root

|—日期/时间—-|-H-|——-服务与相关函数———-|—信息说明———>

我们拿第一条数据来说明好了,该数据是说:在3月14日(Mar 14)的下午15:38分,由www 这台主机的atd [PID为18701]传来的消息,这个消息是通过pam_unix这个模块所提出的,信息内容为root (uid=0)这个账号已经开启atd的活动了。够清楚吧!那请你自行翻译一下后面的 4 条信息内容是什么。

其实还有很多的信息值得查阅的呢!尤其是/var/log/messages的内容。记住:一个好的系统管理员要经常去“巡视”日志文件的内容,尤其是发生下面几种情况时:

当你觉得系统似乎不太正常时;

某个daemon老是无法正常启动时;

某个用户老是无法登录时;

某个demon执行过程老是不顺畅时;

还有很多啦!反正觉得系统不太正常,就得要查询查询日志文件就是了。

提供一个鸟哥常做的检查方式:当我老是无法成功启动某个服务时,我会在最后一次启动该服务后立即检查日志文件,先找到现在时间所登录的信息“第一字段”;再找到我想要查询的那个服务“第三字段”,最后再仔细查阅第四字段的信息,来找到错误点。

19.2.2 syslog的配置文件:/etc/syslog.conf

什么?日志文件还有配置文件?是syslogd这个daemon的配置文件啦!我们现在知道syslogd可以负责主机产生的各个信息的登录,而这些信息本身是有“严重等级”之分的,而且,这些数据最终要传送到哪个文件去是可以修改的,所以我们才会在一开头的地方讲说,每个 Linux distributions放置的日志文件名可能会有所区别啊!

基本上,syslog针对各种服务与信息记录在某些文件的配置文件就是/etc/syslog.conf,这个文件规定了什么服务的什么等级信息以及需要被记录在哪里(设备或文件)这三个东西,所以设置的语法会是这样:

服务名称[.=!]信息等级 信息记录的文件名或设备或主机

下面以 mail 这个服务产生的 info 等级为例:

mail.info  /var/log/maillog_info

这一行说明:mail 服务产生的大于等于 info 等级的信息,都记录到

/var/log/maillog_info 文件中。

我们将上面的数据简单地分为三部分来说明:

服务名称

syslog本身有设置一些服务,你可以通过这些服务来存储系统的信息。syslog设置的服务主要有下面这些,如表 19-1 所示(可使用 man 3 syslog 查询到相关的信息)。

表19-1

figure_0573_0326

上面谈到的都是syslog自行制定的服务名称,软件开发商可以通过调用上述的服务名称来记录他们的软件。举例来说,sendmail与postfix及dovecot都是与邮件有关的软件,这些软件在设计日志文件记录时,都会主动调用syslogd内的mail服务名称(LOG_MAIL),所以上述三个软件(sendmail,postfix,dovecot)产生的信息在syslog看起来,就会是mail类型的服务了。我们可以将这个概念按照如图19-1所示内容来理解。

figure_0574_0327

图19-1 syslog所制定的服务名称与软件调用的方式

另外,每种服务所产生的数据量其实区别是很大的,举例来说,mail 的日志文件信息多得要命,每一封信件进入后,mail 至少需要记录寄信人的信息与收信者的信息等;而如果是用来作为工作站主机的,那么登录者(利用login登录主机处理事情)的数量一定不少,那个authpriv所管辖的内容可就多了。

为了让不同的信息放置到不同的文件当中,好让我们分门别类进行日志文件的管理,所以,将各种类型的服务日志文件记录在不同的文件里面,就是我们/etc/syslog.conf所要做的规范了!

信息等级

同一个服务所产生的信息也是有差别的,有启动时仅通知系统而已的一般信息(information),有出现还不至于影响到正常运行的警告信息(warn),还有系统硬件发生严重错误时所产生的重大问题信息(error 等);信息到底有多少种严重的等级呢?基本上,syslog 将信息分为 7个主要的等级,依序是这样的,如表19-2所示(由不重要排列到重要信息等级)。

表19-2

figure_0574_0328

除了这些有等级的信息外,还有两个特殊的等级,那就是debug(错误检测等级)与none(不需登录等级)两个,当我们想要做一些错误检测或者是忽略掉某些服务的信息时,就用这两个!

特别留意一下在信息等级之前还有[.=!]的链接符号。它代表的意思是这样的:

“.”代表比后面还要高的等级(含该等级)都被记录下来的意思,例如:mail.info 代表只要是mail的信息,而且该信息等级高于info(含info本身)时,就会被记录下来的意思。

“.=”代表所需要的等级就是后面接的等级而已,其他的不要!

“.!”代表不等于,即是除了该等级外的其他等级都记录。

一般来说,我们比较常使用的是“.”这个连接符号。

信息记录的文件名或设备或主机

再来则是这个信息要放置在哪里的记录了。通常我们使用的都是记录的文件。但是也可以输出到设备,例如打印机之类的。也可以记录到不同的主机上头去呢!下面就是一些常见的放置处:

文件的绝对路径:通常就是放在/var/log里面的文件。

打印机或其他:例如/dev/lp0这个打印机设备。

用户名称:显示给用户。

远程主机:例如@www.vbird.tsai,当然,要对方主机也能支持才行!

*:代表目前在线的所有人,类似wall这个命令的意义!

syslog.conf语法练习

基本上,整个syslog的配置文件就只是这样而已,下面我们来思考一些例题,好让你可以更清楚地知道如何设置syslogd。

figure_0575_0329

如果我要将我的mail相关的数据写入/var/log/maillog当中,那么在/etc/syslog.conf的语法如何设计?

答:基本的写法是这样的:

mail.info /var/log/maillog

注意到上面,当我们的等级使用info时,那么任何大于info等级(含info这个等级)之上的信息,都会被写入到后面接的文件之中!这样可以了解吗?也就是说,我们可以将所有mail的日志信息都记录在/var/log/maillog里面的意思。

figure_0575_0330

我要将新闻组资料(news)及例行性工作调度(cron)的信息都写入到一个称为/var/log/cronnews的文件中,但是这两个程序的警告信息则额外地记录在/var/log/cronnews.warn 中,那该如何设置我的syslog.conf呢?

答:很简单,既然是两个程序,那么只好以分号来隔开了,此外,由于第二个指定文件中我只要记录警告信息,因此设置上需要指定“.=”这个符号,所以语法成为了:

news.;cron.  /var/log/cronnews

news.=warn;cron.=warn /var/log/cronnews.warn

上面那个“.=”就是在指定等级的意思。由于指定了等级,因此,只有这个等级的信息才会被记录在这个文件里面呢!此外你也必须要注意,news与cron的警告信息也会写入/var/log/cronnews内。

figure_0575_0331

我的messages这个文件需要记录所有的信息,但是就是不想要记录cron,mail及news的信息,那么应该怎么写才好?

答:可以有两种写法,分别是:

.;news,cron,mail.none   /var/log/messages

.;news.none;cron.none;mail.none /var/log/messages

使用“,”分隔时,那么等级只要接在最后一个即可,如果是以“;”来分的话,那么就需要将服务与等级都写上去。

CentOS 5.x默认的syslog.conf 内容

了解语法之后,我们来看一看syslog有哪些系统服务已经在记录了呢?就是瞧一瞧/etc/syslog.conf这个文件的默认内容。(注意,如果需要将该行作为批注时,那么就加上#符号就可以。)

来自 CentOS 5.x 的相关数据

[root@www ~]# vim /etc/syslog.conf

1 #kern.*          /dev/console

2 *.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages

3 authpriv.*         /var/log/secure

4 mail.*          -/var/log/maillog

5 cron.*          /var/log/cron

6 .emerg          

7 uucp,news.crit        /var/log/spooler

8 local7.*          /var/log/boot.log

9 news.=crit         /var/log/news/news.crit

10 news.=err         /var/log/news/news.err

11 news.notice         /var/log/news/news.notice

上面总共仅有11行设置值,每一行的意义是这样的:

1.#kern.*:只要是内核产生的信息,全部都送到console(终端机)去。console通常是由外部设备连接到系统而来,举例来说,很多封闭型主机(没有键盘、屏幕的系统)可以通过连接RS 232 连接口将信息传输到外部的系统中,例如以笔记本电脑连接到封闭主机的 RS 232 插口。这个选项通常应该是用在系统出现严重问题而无法使用默认的屏幕查看系统时,可以通过这个选项来连接取得内核的信息 [9]

2.*.info;mail.none;news.none;authpriv.none;cron.none:由于 mail,news,authpriv,cron 等类型生成的信息较多,且已经写入下面的数个文件中,因此在/var/log/messages里面就不记录这些选项。除此之外的其他信息都写入/var/log/messages 中。这也是为什么我们说这个messages文件很重要的缘故!

3.authpriv.*:认证方面的信息均写入/var/log/secure文件。

4.mail.*:邮件方面的信息则均写入/var/log/maillog文件。

5.cron.*:例行性工作调度均写入/var/log/cron文件。

6.*.emerg:当产生最严重的错误等级时,将该等级的信息以wall的方式广播给所有在系统登录的账号,要这么做的原因是希望在线的用户能够赶紧通知系统管理员来处理这么可怕的错误问题。

7.uucp,news.crit:uucp是早期Unix-like系统进行数据传递的协议,后来常用在新闻组的用途中。news则是新闻组。当新闻组方面的信息有严重错误时就写入/var/log/spooler文件中。

8.local7.*:将本机开机时应该显示到屏幕的信息写入到/var/log/boot.log文件中。

9.后面的news.=crit、news.=err、news.notice则主要分别记录新闻组产生的不同等级的信息。

在上面的第四行关于 mail 的记录中,在记录的文件/var/log/maillog 前面还有个减号“ - ”是干嘛用的?由于邮件所产生的信息比较多,因此我们希望邮件产生的信息先存储在速度较快的内存中(buffer),等到数据量够大了才一次性将所有数据都填入磁盘内,这样将有助于日志文件的访问性能。只不过由于信息是暂存在内存内,因此若不正常关机导致日志信息未回填到日志文件中,可能会造成部分数据的丢失。

此外,每个 Linux distributions 的 syslog.conf 设置区别是很大的,如果你想要找到相对应的日志信息时,可得要查阅一下/etc/syslog.conf 这个文件才行,否则可能会发生分析到错误的信息。举例来说,鸟哥有自己写一个分析日志文件的 script,这个 script 是依据 Red Hat 系统默认的日志文件所写的,因此不同的distributions想要使用这个程序时,就得要自行设计与修改一下/etc/syslog.conf 才行,否则就可能会分析到错误的信息。那么如果你有自己的需要而得要修订日志文件时,该如何进行?

自行增加日志文件文件功能

如果你有其他的需求,所以需要特殊的文件来帮你记录时,别客气,千万记录在/etc/syslog.conf当中,如此一来,你就可以重复地将许多的信息记录在不同的文件当中,以方便你的管理呢,让我们来作个练习题吧!如果你想要让所有的信息都额外写入到/var/log/admin.log这个文件时,你可以怎么做呢?先自己想一想,并且做一下,再来看看下面的做法。

1. 先设置好所要建立的文件设置!

[root@www ~]# vim /etc/syslog.conf

Add by VBird 2009/04/08  <==再次强调,自己修改的时候加入一些说明

*.info /var/log/admin.log <==有用的是这行。

2. 重新启动 syslog 呢!

[root@www ~]# /etc/init.d/syslog restart

[root@www ~]# ll /var/log/admin.log

-rw———- 1 root root 118 Apr 8 13:50 /var/log/admin.log

新建了这个日志文件。

很简单吧!如此一来,所有的信息都会写入/var/log/admin.log里面了!

19.2.3 日志文件的安全性设置

好了,由上一个小节里面我们知道了 syslog.conf 的设置,也知道了日志文件内容的重要性了,所以,如果幻想你是一个很厉害的黑客,想利用他人的计算机干坏事,然后又不想留下证据,你会怎么做?对啦!就是离开的时候将所有可能的信息都给他抹煞掉,所以第一个动脑筋的地方就是日志文件的清除工作。如果你的日志文件不见了,那该怎办?

鸟哥教人家干坏事?喂!不要乱讲话。俺的意思是,如果改天你发现你的日志文件不翼而飞了,或者是发现你的日志文件似乎不太对劲的时候,最常发现的就是网友经常会说,他的 /var/log 这个目录不见了!不要笑!这是真的事情!请记得,赶快清查你的系统!

伤脑筋呢!有没有办法防止日志文件被删除或者是被root自己不小心更改呢?有呀!拔掉网线或电源线就好了。别担心,基本上,我们可以通过一个隐藏的属性来设置你的日志文件成为只可以增加数据但是不能被删除的状态,那么或许可以达到些许的保护。不过,如果你的root账号被破解了,那么下面的设置还是无法保护的,因为你要记得root是可以在系统上面进行任何事情的,因此,请将你的root这个账号的密码设置得安全一些!千万不要轻视这个问题呢!

为什么日志文件还要防止被自己 (root) 不小心修改过呢? 鸟哥在教 Linux的课程时,我的学生经常会举手说:“老师,我的日志文件不能记录信息了!是不是被入侵了啊?” 奇怪,明明是计算机教室的主机,使用的是 Private IP 而且还有阻挡机制,不可能被攻击吧? 查询了才知道原来同学很喜欢使用“ :wq ”来离开 vim的环境,但是 syslog 的日志文件只要“被编辑过”就无法继续记录,所以才会导致不能记录的问题。此时你得要改变使用 vim 的习惯;重新启动 syslog 让它再继续提供服务才行。

既然如此,那么我们就来处理一下隐藏属性吧!我们在第7章谈到过lsattr与chattr。如果将一个文件以chattr设置i这个属性时,那么该文件连root都不能删掉,而且也不能新增数据,但是,如此一来日志文件的功能岂不是也就消失了?因为没有办法写入呀!所以,我们要使用的是a这个属性。你的日志文件如果设置了这个属性的话,那么它将只能被增加,而不能被删除!这个选项就非常符合我们日志文件的需求。因此,你可以这样增加你的日志文件的隐藏属性。

请注意,下面的这个 chattr 的设置状态仅适合已经对 Linux 系统很有概念的朋友来设置,对于新手来说,建议你直接使用系统的默认值就好了,免得到最后日志文件无法写入。

[root@www ~]# chattr +a /var/log/messages

[root@www ~]# lsattr /var/log/messages

——-a———- /var/log/messages

加入了这个属性之后,你的/var/log/messages日志文件从此就仅能被增加,而不能被删除,直到root以“chattr-a/var/log/messages”取消这个a的参数之后,才能被删除或移动。

虽然,为了你日志文件的信息安全,这个chattr的+a标识可以帮助你维护好这个文件,不过,如果你的系统已经被取得 root 的权限,而既然 root 可以执行 chattr -a来取消这个标志,所以,还是有风险的。此外,前面也稍微提到,新手最好还是先不要增加这个标识,很容易由于自己忘记了导致系统的重要信息无法记录。

基本上,鸟哥认为,这个标识最大的用处除了在保护你日志文件的数据外,它还可以帮助你避免不小心写入日志文件的状况。要注意的是,当你不小心手动改动过日志文件后,例如那个/var/log/messages,你不小心用vi打开它,离开却执行:wq的参数,那么该文件将来将不会再继续进行日志操作。这个问题真的经常发生。由于你以vi保存了日志文件,则syslogd会误判为该文件已被改动过,将导致syslogd不再写入该文件新的内容,很伤脑筋的!

要让该日志文件可以继续写入,你只要重新启动 syslog(/etc/init.d/syslog restart)即可。不过,总是比较麻烦。所以,如果你针对日志文件执行 chattr +a 的参数,将来你就不需要害怕不小心改动该文件了,因为无法写入,除了可以新增之外。

不过,也因为这个+a 的属性让该文件无法被删除与修改,所以,当我们进行日志文件轮替时(logrotate),将会无法移动该日志文件的文件名呢!所以会造成很大的困扰。这个困扰虽然可以使用logrotate的配置文件来解决,但是,还是先将日志文件的+a标志去掉吧!

[root@www ~]# chattr -a /var/log/messages

19.2.4 日志文件服务器的设置

我们在之前稍微提到,在 syslog.conf 文件当中,可以将日志数据传送到打印机或者是远程主机上面去。这样做有什么意义呢?如果你将日志信息直接传送到打印机上面的话,那么万一不小心你的系统被cracker入侵,他也将你的/var/log/删掉了,怎么办?没关系啊!反正你已经将重要数据直接以打印机记录起来了。他是无法逃开的啦!

再想象一个环境,你的办公室内有10台Linux主机,每一台负责一个网络服务,你为了要了解每台主机的状态,因此,你经常需要登录这10台主机去查阅你的日志文件,想想,每天要进入10台主机去查数据,想到就烦,没关系,这个时候我们可以让某一部主机当成“日志文件服务器”,用它来记录所有的10台linux主机的信息,这样我就直接进入一台主机就可以了。省时又省事,真方便。

那要怎么达到这样的功能呢?很简单,我们 CentOS 5.x 默认的 syslog 本身就已经具有这个日志文件服务器的功能了,只是默认并没有启动该功能而已。你可以通过 man syslogd 去查询一下相关的参数就能够知道。既然是日志文件服务器,那么我们的Linux主机当然会启动一个端口来监听了,那个默认的端口就是 UDP 的 514。

figure_0579_0332

图19-2 日志文件服务器的架构

如图 19-2 所示,服务器会启动监听的端口,客户端则将日志文件再转出一份送到服务器去。而既然是日志文件“服务器”,所以当然有服务器与客户端(client)。这两者的设置分别是这样的:

1. Server 端:修改 syslogd 的启动配置文件,通常在 /etc/sysconfig 内!

[root@www ~]# vim /etc/sysconfig/syslog

找到下面这一行:

SYSLOGD_OPTIONS="-m 0"

改成下面这样子!

SYSLOGD_OPTIONS="-m 0 -r"

2. 重新启动与查看 syslogd 。

[root@www ~]# /etc/init.d/syslog restart

[root@www ~]# netstat -lunp | grep syslog

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

udp  0 0 0.0.0.0:514 0.0.0.0:*   13981/syslogd

你的日志文件主机已经设置妥当。很简单吧!

通过这个简单的操作,你的Linux主机已经可以接收来自其他主机的日志信息了。当然,你必须要知道网络方面的相关基础,这里鸟哥只是先介绍,将来了解了网络相关信息后,再回头来这里瞧一瞧先!

至于客户端的设置就简单多了!只要指定某个信息传送到这部主机即可!举例来说,我们的日志文件服务器IP为192.168.1.100,而客户端希望所有的数据都送给主机,所以,可以在/etc/syslog.conf里面新增这样的一行:

[root@www ~]# vim /etc/syslog.conf

.  @192.168.1.100

再重新启动syslog后,立刻就搞定了!而将来主机上面的日志文件当中,每一行的“主机名”就会显示来自不同主机的信息了。接下来,让我们来谈一谈如何针对日志文件来进行轮替(rotate)。

19.3 日志文件的轮替(logrotate)

假设我们已经将日志数据写入了记录文件中了,也已经利用chattr设置了+a这个属性了,那么该如何进行logrotate的工作呢?这里请特别留意的是:syslog利用的是daemon的方式来启动的,当有需求的时候立刻就会被执行的,但是 logrotate 却是在规定的时间到了之后才来进行日志文件的轮替,所以这个logrotate程序当然就是挂在cron下面进行的。仔细看一下/etc/cron.daily/里面的文件,/etc/cron.daily/logrotate 就是记录了每天要进行的日志文件轮替的行为。下面我们就来谈谈怎么样设计这个logrotate吧!

19.3.1 logrotate 的配置文件

既然logrotate主要是针对日志文件来进行轮替的操作,所以,它当然必须要记载在什么状态下才将日志文件进行轮替的设置。那么logrotate这个程序的参数配置文件在哪里呢?那就是:

/etc/logrotate.conf

/etc/logrotate.d/

那个logrotate.conf才是主要的参数文件,至于logrotate.d是一个目录,该目录里面的所有文件都会被主动读入/etc/logrotate.conf当中来进行!另外,在/etc/logrotate.d/里面的文件中,如果没有指定一些:详细设置,则以/etc/logrotate.conf这个文件的规定来指定为默认值!

好了,刚才我们提到logrotate的主要功能就是将旧的日志文件移动成旧文件,并且重新新建一个新的空的文件来记录,它的执行结果如图19-3所示。

figure_0580_0333

图19-3 日志文件进行logrotate 的结果

由上面的图示我们可以清楚地知道,当第一次执行完 rotate 之后,原本的 messages 会变成messages.1 而且会制造一个空的 messages 给系统来保存日志文件。而第二次执行之后,则messages.1会变成messages.2而messages会变成messages.1,又造成一个空的messages来保存日志文件。那么如果我们仅设置保留三个日志文件而已的话,那么执行第四次时,则 messages.3这个文件就会被删除,并由后面的较新的保存日志文件所替代。基本的工作就是这样。

那么多久进行一次这样的logrotate工作呢?这些都记录在logrotate.conf里面,我们来看一下默认的logrotate的内容吧!

[root@www ~]# vim /etc/logrotate.conf

下面的设置是 logrotate 的默认设置值 ,如果个别的文件设置了其他的参数,

则将以个别的文件设置为主,若该文件没有设置到的参数则以这个文件的内容为默认值!

weekly <==默认每个礼拜对日志文件进行一次 rotate 的工作。

rotate 4 <==保留几个日志文件呢?默认是保留四个!

create <==由于日志文件被重命名,因此新建一个新的来继续存储!

compress <==被改动的日志文件是否需要压缩?如果日志文件太大则可考虑此参数启动。

include /etc/logrotate.d

将 /etc/logrotate.d/ 这个目录中的所有文件都读进来执行 rotate 的工作!

/var/log/wtmp {  <==仅针对 /var/log/wtmp 所设置的参数

monthly   <==每个月一次,替代每周!

minsize 1M  <==文件容量一定要超过 1MB 后才进行 rotate (略过时间参数)

create 0664 root utmp <==指定新建文件的权限与所属账号/用户组

rotate 1  <==仅保留一个,即仅有 wtmp.1 保留而已。

}

这个 wtmp 可记录登录者与系统重新启动时的时间与来源主机及登录期间的时间。

由于具有 minsize 的参数,因此不见得每个月一定会进行一次。要看文件容量。

由于仅保留一个日志文件而已,不满意的话可以将它改成 rotate 5 吧!

由这个文件的设置我们可以知道/etc/logrotate.d 其实就是由/etc/logrotate.conf 所规划出来的目录,所以,其实我们可以将所有的数据都写入/etc/logrotate.conf即可,但是这样一来这个文件就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时,每个服务都要去修改/etc/logrotate.conf的设置也似乎不太合理。所以,如果独立出来一个目录,那么每个以 RPM 打包方式所新建服务的日志文件轮替设置,就可以独自成为一个文件,并且放置到/etc/logrotate.d/当中即可,真是方便又合理的做法啊!

一般来说,这个/etc/logrotate.conf是默认的轮替状态而已,我们的各个服务都可以拥有自己的日志文件轮替设置,你也可以自行修改成自己喜欢的样式。例如,如果你的系统的空间够大,并且担心调试以及黑客的问题,那么可以:

将rotate 4 改成rotate 9 左右,以保存较多的备份文件;

大部分的日志文件不需要压缩。但是空间太小就需要压缩!尤其是很占硬盘空间的 httpd 更需要压缩。

好了,上面我们大致介绍了/var/log/wtmp这个文件的设置,现在你知道了logrotate.conf的设置语法。

日志文件的绝对路径文件名 … {

个别的参数设置值,如 monthly, compress 等

}

下面我们再以/etc/logrotate.d/syslog这个轮替syslog服务的文件,来看看该如何设置它的rotate。

[root@www ~]# vi /etc/logrotate.d/syslog

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \

/var/log/boot.log /var/log/cron {

sharedscripts

postrotate

/bin/kill -HUP cat /var/run/syslogd.pid 2&gt; /dev/null 2> /dev/null || true

/bin/kill -HUP cat /var/run/rsyslogd.pid 2&gt; /dev/null 2> /dev/null || true

endscript

}

在上面的语法当中,我们知道正确的logrotate的写法为:

文件名:被处理的日志文件绝对路径文件名写在前面,可以使用空格符分隔多个日志文件;

参数:上述文件名进行轮替的参数使用{ }包括起来;

:可调用外部命令来进行额外的命令执行,这个设置需与 sharedscripts…endscript 设置起使用才行。至于可用的环境为:

prerotate:在启动logrotate之前进行的命令,例如修改日志文件的属性等操作;

postrotate:在做完logrotate之后启动的命令,例如重新启动(kill-HUP)某个服务;

Prerotate与postrotate在对于已加上特殊属性的文件处理上面,是相当重要的执行程序。

那么/etc/logrotate.d/syslog内设置的6个文件的轮替功能就变成了:

该设置只对/var/log/内的messages,secure,maillog,spooler,boot.log,cron有效;

日志文件轮替每周一次、保留四个且轮替下来的日志文件不进行压缩(未更改默认值);

轮替完毕后(postrotate)取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd。

假设我们有针对/var/log/messages这个文件增加chattr +a的属性时,依据logrotate的工作原理,我们知道,这个/var/log/messages 将会被重命名成为/var/log/messages.1 才是。但是由于加上这个+a的参数,所以重命名是不可能成功的!那怎么办呢?就利用prerotate与postrotate来进行日志文件轮替前后所需要做的操作啊!果真如此时,那么你可以这样修改一下这个文件。

[root@www ~]# vi /etc/logrotate.d/syslog

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \

/var/log/boot.log /var/log/cron {

sharedscripts

prerotate

/usr/bin/chattr -a /var/log/messages

endscript

sharedscripts

postrotate

/bin/kill -HUP cat /var/run/syslogd.pid 2&gt; /dev/null 2> /dev/null || true

/bin/kill -HUP cat /var/run/rsyslogd.pid 2&gt; /dev/null 2> /dev/null || true

/usr/bin/chattr +a /var/log/message

endscript

}

看到没?就是先给他去掉a这个属性,让日志文件/var/log/messages可以进行轮替的操作,然后执行了轮替之后,再给他加入这个属性!请特别留意的是,那个/bin/kill -HUP…的意义,这一行的目的在于将系统的syslogd重新以其参数文件(syslog.conf)的数据读入一次。也可以想成是reload的意思。由于我们新疆了一个新的空的记录文件,如果不执行此一行来重新启动服务的话,那么记录的时候将会发生错误。(请回到第17章读一下kill后面的signal的内容说明。)

19.3.2 实际测试 logrotate 的操作

好了,设置完成之后,我们来测试看看这样的设置是否可行呢?执行下面的命令:

[root@www ~]# logrotate [-vf] logfile

参数:

-v :启动显示模式,会显示 logrotate 运行的过程。

-f :不论是否符合配置文件的数据,强制每个日志文件都进行 rotate 的操作。

范例一:执行一次 logrotate 看看整个流程为何

[root@www ~]# logrotate -v /etc/logrotate.conf

reading config file /etc/logrotate.conf <==读取主要配置文件

including /etc/logrotate.d   <==调用外部的设置

reading config file acpid   <==就是外部设置。

….(中间省略)….

Handling 21 logs     <==共有 21 个日志文件被记录

….(中间省略)….

rotating pattern: /var/log/messages /var/log/secure /var/log/maillog \

/var/log/spooler /var/log/boot.log /var/log/cron weekly (4 rotations)

empty log files are rotated, old logs are removed

considering log /var/log/messages  <==开始处理 messages

log does not need rotating   <==因为时间未到,不需要改动!

….(下面省略)….

范例二:强制进行 logrotate 的操作

[root@www ~]# logrotate -vf /etc/logrotate.conf

….(前面省略)….

rotating log /var/log/messages, log->rotateCount is 4

renaming /var/log/messages.4 to /var/log/messages.5 (rotatecount 4, logstart 1, i 4),

renaming /var/log/messages.3 to /var/log/messages.4 (rotatecount 4, logstart 1, i 3),

renaming /var/log/messages.2 to /var/log/messages.3 (rotatecount 4, logstart 1, i 2),

renaming /var/log/messages.1 to /var/log/messages.2 (rotatecount 4, logstart 1, i 1),

renaming /var/log/messages.0 to /var/log/messages.1 (rotatecount 4, logstart 1, i 0),

old log /var/log/messages.0 does not exist

….(下面省略)….

看到否?整个 rotate 的操作就是这样一步一步进行的。

[root@www ~]# ll /var/log/messages*; lsattr /var/log/messages

-rw———- 1 root root 63 Apr 8 15:19 /var/log/messages

-rw———- 1 root root 670 Apr 8 14:22 /var/log/messages.1

-rw———- 1 root root 24984 Apr 1 19:26 /var/log/messages.2

-rw———- 1 root root 1911 Mar 28 11:32 /var/log/messages.3

-rw———- 1 root root 25193 Mar 22 04:02 /var/log/messages.4

——-a———- /var/log/messages <==主动加入 a 的隐藏属性。

上面那个-f具有“强制执行”的意思,如果一切的设置都没有问题的话,那么理论上,你的/var/log这个目录就会起变化,而且应该不会出现错误信息才对!

由于logrotate 的工作已经加入crontab 里面了,所以现在每天系统都会自动查看 logrotate。不用担心。只是要注意一下那个/var/log/messages里面是否经常有类似下面的字眼:

Apr 8 15:19:47 www syslogd 1.4.1: restart (remote reception).

这说明的是 syslogd 重新启动的时间(就是因为/etc/logrotate.d/syslog 的设置的缘故)!下面我们来进行一些例题的练习,让你更详细地了解logrotate的功能!

19.3.3 自定义日志文件的轮替功能

假设前提是这样的,前一小节当中,假设你已经新建了/var/log/admin.log这个文件,现在,你想要将该文件加上+a这个隐藏标签,而且设置下面的相关信息:

日志文件轮替一个月进行一次;

该日志文件若大于10MB时,则主动进行轮替,不需要考虑一个月的期限;

保存五个备份文件;

备份文件需要压缩。

那你可以怎么样设置呢?很简单啊!看看下面的操作吧!

1. 先新建 +a 这个属性啊!

[root@www ~]# chattr +a /var/log/admin.log

[root@www ~]# lsattr /var/log/admin.log

——-a———- /var/log/admin.log

[root@www ~]# mv /var/log/admin.log /var/log/admin.log.1

mv: cannot move /var/log/admin.log&#39; to/var/log/admin.log.1':

Operation not permitted

这里确定了加入 a 的隐藏属性!所以 root 无法移动此日志文件!

2. 开始新建 logrotate 的配置文件,增加一个文件在 /etc/logrotate.d 内就对了!

[root@www ~]# vi /etc/logrotate.d/admin

This configuration is from VBird 2009/04/08

/var/log/admin.log {

monthly <==每个月进行一次

size=10M <==文件容量大于 10M 则开始处置

rotate 5 <==保留五个!

compress <==进行压缩。

sharedscripts

prerotate

/usr/bin/chattr -a /var/log/admin.log

endscript

sharedscripts

postrotate

/usr/bin/killall -HUP syslogd

/usr/bin/chattr +a /var/log/admin.log

endscript

}

3. 测试一下 logrotate 相关功能的信息显示:

[root@www ~]# logrotate -v /etc/logrotate.conf

….(前面省略)….

rotating pattern: /var/log/admin.log 10485760 bytes (5 rotations)

empty log files are rotated, old logs are removed

considering log /var/log/admin.log

log does not need rotating

not running prerotate script, since no logs will be rotated

not running postrotate script, since no logs were rotated

….(下面省略)….

因为还不足一个月,文件也没有大于 10MB,所以不需进行轮替!

4. 测试一下强制 logrotate 与相关功能的信息显示:

[root@www ~]# logrotate -vf /etc/logrotate.d/admin

reading config file /etc/logrotate.d/admin

reading config info for /var/log/admin.log

Handling 1 logs

rotating pattern: /var/log/admin.log forced from command line (5 rotations)

empty log files are rotated, old logs are removed

considering log /var/log/admin.log

log needs rotating

rotating log /var/log/admin.log, log->rotateCount is 5

renaming /var/log/admin.log.5.gz to /var/log/admin.log.6.gz (rotatecount 5, logstart 1, i 5), old log /var/log/admin.log.5.gz does not exist

renaming /var/log/admin.log.4.gz to /var/log/admin.log.5.gz (rotatecount 5, logstart 1, i 4), old log /var/log/admin.log.4.gz does not exist

renaming /var/log/admin.log.3.gz to /var/log/admin.log.4.gz (rotatecount 5, logstart 1, i 3), old log /var/log/admin.log.3.gz does not exist

renaming /var/log/admin.log.2.gz to /var/log/admin.log.3.gz (rotatecount 5, logstart 1, i 2), old log /var/log/admin.log.2.gz does not exist

renaming /var/log/admin.log.1.gz to /var/log/admin.log.2.gz (rotatecount 5, logstart 1, i 1), old log /var/log/admin.log.1.gz does not exist

renaming /var/log/admin.log.0.gz to /var/log/admin.log.1.gz (rotatecount 5, logstart 1, i 0), old log /var/log/admin.log.0.gz does not exist

log /var/log/admin.log.6.gz doesn't exist — won't try to dispose of it

running prerotate script

renaming /var/log/admin.log to /var/log/admin.log.1

running postrotate script

compressing log with: /bin/gzip

[root@www ~]# lsattr /var/log/admin.log*

——-a———- /var/log/admin.log

——————- /var/log/admin.log.1.gz <==有压缩过喔!

看到了吗?通过这个方式,我们可以新建起属于自己的logrotate配置文件,很简便吧!尤其要注意的是,/etc/syslog.conf 与/etc/logrotate.d/*文件经常要搭配起来,例如刚才我们提到的两个案例中所新建的/var/log/admin.log就是一个很好的例子。新建后,还要使用logrotate来轮替。

19.4 分析日志文件

日志文件的分析是很重要的。你可以自行以vi进入日志文件去查阅相关的信息。而系统也提供一些软件可以让你从日志文件中取得数据,例如之前谈过的 last,lastlog,dmesg 等命令。不过,这些数据毕竟都非常分散,如果你想要一口气读取所有的日志信息,其实有点困扰的。不过,好在 CentOS有提供logwatch这个日志文件分析程序,你可以通过该程序来了解日志文件信息。此外,鸟哥也依据Red Hat 系统的 syslog 写了一个小程序给大家使用。

19.4.1 CentOS 默认提供的logwatch

虽然有一些有用的系统命令,不过,要了解系统的状态,还是得要分析整个日志文件才行。事实上,目前已经有相当多的日志文件分析工具,例如 CentOS 5.x 上面默认的 logwatch 这个套件所提供的分析工具,它会每天分析一次日志文件,并且将数据以email的格式寄送给root呢!你也可以直接到logwatch的官方网站上面看看:

http://www.logwatch.org/

logwatch分析的结果如下所示:

[root@www ~]# mail

Mail version 8.1 6/6/93. Type ? for help.

"/var/spool/mail/root": 433 messages 433 new

>N 1 logwatch@www.vbird.t Fri Sep 5 11:42 43/1542 "Logwatch for www.vbird.tsai (Linux)"

N 2 logwatch@www.vbird.t Sat Sep 6 15:34 92/2709 "Logwatch for www.vbird.tsai (Linux)"

N 3 logwatch@www.vbird.t Mon Sep 8 15:26 43/1542 "Logwatch for www.vbird.tsai (Linux)"

….(中间省略)….

N431 logwatch@www.vbird.t Wed Apr 8 04:02 53/1772 "Logwatch for www.vbird.tsai (Linux)"

& 431

Message 431:

From root@www.vbird.tsai Wed Apr 8 04:02:05 2009

Date: Wed, 8 Apr 2009 04:02:05 +0800

To: root@www.vbird.tsai

From: logwatch@www.vbird.tsai

Subject: Logwatch for www.vbird.tsai (Linux)

MIME-Version: 1.0

Content-Transfer-Encoding: 7bit

Content-Type: text/plain; charset="iso-8859-1"

先会说明分析的日期与相关的分析期间!

############# Logwatch 7.3 (03/24/06)

Processing Initiated: Wed Apr 8 04:02:05 2009

Date Range Processed: yesterday

( 2009-Apr-07 )

Period is day.

Detail Level of Output: 0

Type of Output: unformatted

Logfiles for Host: www.vbird.tsai

#

下面则是依据各种服务来进行各项分析!先是登录者的 ssh 服务分析

——————————- SSHD Begin ————————————

Users logging in through sshd:

root:

192.168.100.101: 1 time

192.168.100.254: 1 time

——————————— SSHD End ————————————-

磁盘容量分析!可以避免你的系统使用过量的磁盘空间,导致的系统不稳问题!

——————————- Disk Space Begin ————————————

Filesystem   Size Used Avail Use% Mounted on

/dev/hda2   9.5G 3.8G 5.3G 42% /

/dev/hda3   4.8G 1.1G 3.5G 23% /home

/dev/hda1   99M 21M 73M 23% /boot

——————————— Disk Space End ————————————-

################ Logwatch End

由于鸟哥的测试用主机尚未启动许多服务,所以分析的选项很少。若你的系统已经启动许多服务的话,那么分析的选项理应会多很多才对。

19.4.2 鸟哥自己写的日志文件分析工具

虽然已经有了类似logwatch的工具,但是鸟哥自己想要分析的数据毕竟与对方不同。所以,鸟哥就自己写了一个小程序(shell script 的语法)用来分析自己的日志文件,这个程序分析的日志文件数据其实是固定的,包括:

/var/log/secure

/var/log/messages

/var/log/maillog

当然,还不只这些啦,包括各个主要常见的服务,如pop3,mail,ftp,su等会使用到pam的服务,都可以通过鸟哥写的这个小程序来分析与处理。整个数据还会输出一些系统信息。如果你想要使用这个程序的话,欢迎下载:

http://linux.vbird.org/download/index.php?action=detail&fileid=69

安装的方法也很简单,只要将上述文件下载并解压缩后,就会得到一个名为logfile的目录,将此目录移动到/usr/local/virus/目录下并修改一下:/usr/local/virus/logfile.sh文件,里面的email与相关的信息只要修改一下,你就可以使用啦。还要记得,将这个程序的执行写入/etc/crontab 当中。可以在每天的12:10执行这个小程序。

[root@www ~]# mkdir /usr/local/virus

[root@www ~]# tar -zxvf logfile-0.1-4-2.tgz -C /usr/local/virus

[root@www ~]# cd /usr/local/virus/logfile

[root@www ~]# vi logfile.sh

email="root@localhost" <==大约在 93 行,请填入你的 Email ,否则保留默认值

basedir="/usr/local/virus/logfile" <==保留默认值,除非你的执行目录不同与此!

[root@www ~]# sh logfile.sh

开始尝试分析系统的日志文件,依据你的日志文件大小,分析的时间不固定!

[root@www ~]# vi /etc/crontab

10 0 * root /usr/local/virus/logfile/logfile.sh

增加这一行!让系统在每天的凌晨自己进行日志文件分析!

[root@www ~]# mail

自己找到刚才输出的结果,该结果的输出有点像下面这样:

先进行程序的声明。你也可以在下面的连接找到一些错误回报!

#

欢迎使用本程序来查验你的日志文件

本程序目前版本为: Version 0.1-4-2

程序最后更新日期为: 2006-09-22

若在你的系统中发现本程序有问题, 欢迎与我联络!

鸟哥的首页 http://linux.vbird.org

问题回报: http://phorum.vbird.org/viewtopic.php?t=3425

#

先看看你的硬件与操作系统的相关情况,尤其是分区的使用量更需要随时注意!

=============== 系统信息=================================

内核版本 : Linux version 2.6.18-92.el5 (mockbuild@builder16.centos.org)

CPU 信息 : Intel(R) Celeron(TM) CPU

: 1200.062 MHz

主机名 : www.vbird.tsai

统计日期 : 2009/April/08 17:00:59 ( Wednesday )

分析的日期: Apr 8

已开机期间: 7 days, 22:46,

目前主机挂载的 partitions

Filesystem   Size Used Avail Use% Mounted on

/dev/hda2   9.5G 3.8G 5.3G 42% /

/dev/hda3   4.8G 1.1G 3.5G 23% /home

/dev/hda1   99M 21M 73M 23% /boot

tmpfs    363M 0 363M 0% /dev/shm

这个程序会将针对 internet 与内部监听的端口分开来显示!

================= Ports 的相关分析信息 =======================

主机启用的 port 与相关的 process owner:

仅对本机界面开放的 ports (PID|owner|command)

tcp 25|(root)|sendmail: accepting connections

tcp 631|(root)|cupsd

tcp 2207|(root)|python ./hpssd.py

tcp 2208|(root)|./hpiod

对外部接口开放的 ports (PID|owner|command)

tcp 22|(root)|/usr/sbin/sshd

tcp 111|(rpc)|portmap

tcp 737|(root)|rpc.statd

udp 111|(rpc)|portmap

udp 514|(root)|syslogd -m 0 -r

udp 631|(root)|cupsd

udp 731|(root)|rpc.statd

udp 734|(root)|rpc.statd

udp 5353|(avahi)|avahi-daemon: running [www.local]

udp 32768|(avahi)|avahi-daemon: running [www.local]

udp 32769|(avahi)|avahi-daemon: running [www.local]

以下针对有启动的服务进行分析!

================= SSH 的日志文件信息汇整 =======================

今日没有使用 SSH 的记录

================= Sednamil 的日志文件信息汇整 ==================

你的主机有进行 SASL 身份认证的功能

今日没有 sendmail 的相关信息

================= 全部的日志文件信息汇整 =======================

  1. 重要的日志记录文件 ( Secure file )

说明:已经取消了 pop3 的信息!

Apr 8 15:46:22 www su: session opened for user vbird by root(uid=0)

Apr 8 15:47:02 www su: session closed for user vbird

  1. 使用 last 这个命令输出的结果

wtmp begins Wed Apr 8 15:19:47 2009

  1. 将特重要的 /var/log/messages 列出来。

已经取消 crond 与 snmpd 的信息

Apr 8 15:19:47 www syslogd 1.4.1: restart (remote reception).

Apr 8 15:34:25 www syslogd 1.4.1: restart (remote reception).

目前鸟哥都是通过这个程序去分析自己管理的主机,然后再据以了解系统状况,如果有特殊状况则实时进行系统处理。而且鸟哥都是将上述的Email调整成自己可以在Internet上面读到的邮件,这样我每天都可以收到正确的日志文件分析信息。

19.5 重点回顾

日志文件可以记录一个事件的何时、何地、何人、何事四大信息,故系统有问题时务必查询日志文件。

系统的日志文件默认都集中放置到/var/log/目录内,其中又以messages记录的信息最多!

日志文件记录的主要服务与程序为syslogd,klogd,log。

syslogd的配置文件在/etc/syslog.conf中,内容语法为:服务.等级记载设备或文件。

syslogd本身有提供日志文件服务器的功能,通过修改/etc/sysconfig/syslog内容即可实现。

logrotate程序利用crontab来进行日志文件的轮替功能。

logrotate的配置文件为/etc/logrotate.conf,而额外的设置则可写入/etc/logrotate.d/*内。

logwatch 为CentOS 5 默认提供的一个日志文件分析软件。

19.6 本章习题

练习题

请在你的 CentOS 5.x 上面,依照鸟哥提供的 logfile.sh 去安装,并将结果取出分析看看。

简答题部分

syslogd 可以作为日志文件服务器,请以 man page 的方式配合 network 关键字,查出 syslogd需要加上什么参数就能够成为日志文件服务器。

如果你想要将auth这个服务的结果中只要信息等级高于warn的就发送Email到root的信箱,该如何处理?

启动系统注册表信息时,需要启动哪两个daemon呢?

syslogd以及logrotate个别通过什么机制来执行?

注 释

[1].最完整与详细的密码文件说明,可参考各 distribution 内部的man page。本文中以 CentOS 5.x 的“man 5 passwd”及“man 5 shadow”的内容说明;

[2].MD5与DES均为加密的机制,详细的解释可参考维基百科的说明:MD5:http://zh.wikipedia.org/wiki/MD5 DES:http://en.wikipedia.org/wiki/Data_Encryption_Standard在早期的Linux版本中,主要使用DES加密算法,近期则使用MD5作为默认算法。

[3].telnet与ssh都是可以由远程用户主机连接到Linux服务器的一种机制。详细数据可查询鸟站文章“远程连接服务器”:http://linux.vbird.org/linux_server/0310telnetssh.php

[4].详细的说明请参考 man sudo,然后以5作为关键字查询看看即可了解

[5].详细的PAM说明可以参考如下链接:维基百科:http://en.wikipedia.org/wiki/Pluggable_Authentication_Modules Linux-PAM网页:http://www.kernel.org/pub/linux/libs/pam/

[6].若想对RAID有更深入的认识,可以参考下面的链接与书目:http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html 杨振和的《操作系统导论》的第11章

[7].详细的mdstat说明也可以参考如下网页:http://linux-raid.osdl.org/index.php/Mdstat

[8].gical volume "vbirdss" successfully removed

[9].关于console的说明可以参考下面的链接:http://en.wikipedia.org/wiki/Console http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.files/doc/aixfil es/console.htm