第19章、 认识与分析登录档

19.1. 什么是登录档: 登录档的重要性, 常见档名, 服务与程序
『详细而确实的分析以及备份系统的登录文件』是一个系统管理员应该要进行的任务之一。 那么什么是登录档呢?简单的说,就是记录系统活动信息的几个档案, 例如:何时、何地 (来源 IP)、何人 (什么服务名称)、做了什么动作 (讯息登录)。 换句话说就是:记录系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等等。
要知道的是,我们的 Linux 主机在背景之下有相当多的 daemons 同时在工作着,这些工作中的程序总是会显示一些讯息, 这些显示的讯息最终会被记载到登录文件当中。也就是说,记录这些系统的重要讯息就是登录文件的工作!

一、 登录档的重要性
为什么说登录文件很重要,重要到系统管理员需要随时注意他呢?我们可以这么说:

  1. 解决系统方面的错误:
    用 Linux 这么久了,你应该偶尔会发现系统可能会出现一些错误,包括硬件捉不到或者是某些系统程序无法顺利运作的情况。 此时你该如何是好?由于系统会将硬件侦测过程记录在登录文件内,你只要透过查询登录文件就能够了解系统作了啥事! 并且由第十七章我们也知道 SELinux 与登录档的关系更加的强烈!所以查询登录文件可以克服一些系统问题!
  2. 解决网络服务的问题:
    你可能在做完了某些网络服务的设定后,却一直无法顺利启动该服务,此时该怎办?由于网络服务的各种问题通常都会被写入特别的登录档, 其实你只要查询登录档就会知道出了什么差错!举例来说,如果你无法启动邮件服务器 (sendmail), 那么查询一下 /var/log/maillog 通常可以得到不错的解答!
  3. 过往事件记录簿:
    这个东西相当的重要!例如:你发现 WWW 服务 (apache 软件) 在某个时刻流量特别大,你想要了解为什么时, 可以透过登录档去找出该时段是哪些 IP 在联机与查询的网页数据为何,就能够知道原因。 此外,万一哪天你的系统被入侵,并且被利用来攻击他人的主机,由于被攻击主机会记录攻击者,因此你的 IP 就会被对方记录。这个时候你要如何告知对方你的主机是由于被入侵所导致的问题, 并且协助对方继续往恶意来源追查呢?此时登录档可是相当重要的!

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

  • /var/log/cron:
    还记得第十六章例行性工作排程吧?你的 crontab 排程有没有实际被进行? 进行过程有没有发生错误?你的 /etc/crontab 是否撰写正确?在这个登录档内查询看看。
  • /var/log/dmesg:
    记录系统在开机的时候核心侦测过程所产生的各项信息。由于 CentOS 默认将开机时核心的硬件侦测过程取消显示, 因此额外将数据记录一份在这个档案中;
  • /var/log/lastlog:
    可以记录系统上面所有的账号最近一次登入系统时的相关信息。第十四章讲到的 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) ! 我们在第十一章谈到的 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 呢?而且是否有设定开机时启动呢?检查一下先:
这里写图片描述
看到 syslog 这个服务名称了吧?所以知道他已经在系统中工作了!好了,既然本章主要是讲登录档,那么你知道登录档的内容是如何展现的? syslog 的配置文件在哪里?如何设定?如果你的 Linux 主机想要当作整个区网的登录档服务器时,又该如何设定? 底下就让我们来玩玩这玩意!

19.2.1. 登录档内容的一般格式
一般来说,系统产生的讯息经过 syslog 而记录下来的数据中,每条讯息均会记录底下的几个重要数据:

  • 事件发生的日期与时间;
  • 发生此事件的主机名;
  • 启动此事件的服务名称 (如 samba, xinetd 等) 或函式名称 (如 libpam ..);
  • 该讯息的实际数据内容。

当然,这些信息的『详细度』是可以修改的,而且,这些信息可以作为系统除错之用! 我们拿登录时一定会记载帐户信息的 /var/log/secure 为例好了:
这里写图片描述
我们拿第一笔数据来说明好了,该资料是说:『在三月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, 预设的 syslog.conf 内容
登录档还有配置文件?不是啦~是 syslogd 这个 daemon 的配置文件! 我们现在知道 syslogd 可以负责主机产生的各个信息的登录,而这些信息本身是有『严重等级』之分的, 而且这些资料最终要传送到哪个档案去是可以修改的,所以我们才会在一开头的地方说, 每个 Linux distributions 放置的登录档档名可能会有所差异!
基本上, syslog 针对各种服务与讯息记录在某些档案的配置文件就是 /etc/syslog.conf, 这个档案规定了『(1)什么服务 (2)的什么等级讯息 (3)需要被记录在哪里(装置或档案)』 这三个咚咚,所以设定的语法会是这样:
这里写图片描述
我们将上面的数据简单的分为三部分来说明:

一、服务名称
syslog 本身有规范一些服务,你可以透过这些服务来储存系统的讯息。syslog 认识的服务主要有底下这些: (可使用 man 3 syslog 查询到相关的信息)
这里写图片描述
上面谈到的都是 syslog 自行制订的服务名称,软件开发商可以透过呼叫上述的服务名称来记录他们的软件。 举例来说, sendmail 与 postfix 及 dovecot 都是与邮件有关的软件,这些软件在设计登录文件记录时,都会主动呼叫 syslogd 内的 mail 服务名称 (LOG_MAIL),所以上述三个软件 (sendmail, postfix, dovecot) 产生的讯息在 syslog 看起来,就会『是 mail 』类型的服务了。我们可以将这个概念绘制如底下的图示来理解:
这里写图片描述
另外,每种服务所产生的数据量其实差异是很大的,举例来说, mail 的登录文件讯息多的要命, 每一封信件进入后, mail 至少需要记录『寄信人的信息;与收信者的讯息』等等; 而如果是用来做为工作站主机的,那么登入者 (利用 login 登录主机处理事情) 的数量一定不少,那个 authpriv 所管辖的内容可就多的要命了。
为了让不同的信息放置到不同的档案当中,好让我们分门别类的进行登录档的管理, 所以将各种类别的服务之登录文件,记录在不同的档案里面,就是我们 /etc/syslog.conf 所要作的规范了!

二、讯息等级
同一个服务所产生的讯息也是有差别的,有启动时仅通知系统而已的一般讯息 (information), 有出现还不至于影响到正常运作的警告讯息 (warn) ,还有系统硬件发生严重错误时,所产生的重大问题讯息 (error 等等); 讯息到底有多少种严重的等级呢?基本上,syslog 将讯息分为七个主要的等级,依序是这样的(由不重要排列到重要讯息等级):
这里写图片描述
除了这些有等级的讯息外,还有两个特殊的等级,那就是 debug(错误侦测等级) 与 none (不需登录等级) 两个,当我们想要作一些错误侦测,或者是忽略掉某些服务的信息时, 就用这两个咚咚吧! 特别留意一下在讯息等级之前还有 [.=!] 的链接符号!他代表的意思是这样的:

  • . :代表『比后面还要高的等级 (含该等级) 都被记录下来』的意思,例如: mail.info 代表只要是 mail 的信息,而且该信息等级高于 info (含 info 本身)时,就会被记录下来的意思。
  • .=:代表所需要的等级就是后面接的等级而已, 其他的不要!
  • .!:代表不等于, 亦即是除了该等级外的其他等级都记录。

一般来说,我们比较常使用的是『.』这个链接符号!

三、讯息记录的文件名或装置或主机
再来则是这个讯息要放置在哪里的记录了。通常我们使用的都是记录的档案!但是也可以输出到装置! 例如打印机之类的!也可以记录到不同的主机上头去!底下就是一些常见的放置处:

  • 档案的绝对路径:通常就是放在 /var/log 里头的档案!
  • 打印机或其他:例如 /dev/lp0 这个打印机装置 ;
  • 使用者名称:显示给用户!
  • 远程主机:例如 @www.vbird.tsai 当然要对方主机也能支持才行!
  • *:代表『目前在在线的所有人』,类似 wall 这个治疗的意义!

四、syslog.conf 语法练习
基本上,整个 syslog 的配置文件就只是这样而已,底下我们来思考一些例题,好让你可以更清楚的知道如何设定 syslogd !
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

五、CentOS 5.x 预设的 syslog.conf 内容
了解语法之后,我们来看一看 syslog 有哪些系统服务已经在记录了呢?就是瞧一瞧 /etc/syslog.conf 这个档案的预设内容! (注意!如果需要将该行做为批注时,那么就加上 # 符号就可以了)
这里写图片描述
这里写图片描述
上面总共仅有十一行设定值,每一行的意义是这样的:

  1. #kern.*:只要是核心产生的讯息,全部都送到 console(终端机) 去。console 通常是由外部装置连接到系统而来, 举例来说,很多封闭型主机 (没有键盘、屏幕的系统) 可以透过连接 RS232 连接口将讯息传输到外部的系统中, 例如以笔记本电脑连接到封闭主机的 RS232 插口。这个项目通常应该是用在系统出现严重问题而无法使用默认的屏幕观察系统时, 可以透过这个项目来连接取得核心的讯息。(注1)
  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 这个档案时, 你可以怎么作呢?先自己想一想,并且作一下,再来看看底下的作法!
这里写图片描述
这里写图片描述
如此一来,所有的信息都会写入 /var/log/admin.log 里面了!

19.2.3. 登录档的安全性设置
好了,由上一个小节里面我们知道了 syslog.conf 的设定,也知道了登录档内容的重要性了, 所以,如果幻想你是一个很厉害的黑客,想利用他人的计算机干坏事,然后又不想留下证据, 你会怎么作?对啦!就是离开的时候将屁股擦干净,将所有可能的讯息都给他抹煞掉, 所以第一个动脑筋的地方就是登录档的清除工作~ 如果你的登录档不见了,那该怎办?
伤脑筋呢!有没有办法防止登录档被删除?或者是被 root 自己不小心变更呢?有呀!拔掉网络线或电源线就好了…… 别担心,基本上,我们可以透过一个隐藏的属性来设定你的登录档,成为『 只可以增加数据,但是不能被删除 』的状态,那么或许可以达到些许的保护!不过,如果你的 root 账号被破解了,那么底下的设定还是无法保护的,因为你要记得『 root 是可以在系统上面进行任何事情的 』,因此,请将你的 root 这个账号的密码设定的安全一些!千万不要轻视这个问题!
既然如此,那么我们就来处理一下隐藏属性的咚咚吧!我们在第七章谈到过 lsattr 与 chattr 这两个东西!如果将一个档案以 chattr 设定 i 这个属性时,那么该档案连 root 都不能杀掉!而且也不能新增数据,真安全!但是,如此一来登录文件的功能岂不是也就消失了? 因为没有办法写入呀!所以我们要使用的是 a 这个属性 !你的登录文件如果设定了这个属性的话,那么 他将只能被增加,而不能被删除 !这个项目就非常的符合我们登录档的需求!因此,你可以这样的增加你的登录文件的隐藏属性。
这里写图片描述
加入了这个属性之后,你的 /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 旗标拿掉吧!
这里写图片描述

19.2.4. 登录档服务器的设定
我们在之前稍微提到的,在 syslog.conf 档案当中,可以将登录数据传送到打印机或者是远程主机上面去。这样做有什么意义呢? 如果你将登录信息直接传送到打印机上面的话,那么万一不小心你的系统被 cracker 所入侵, 他也将你的 /var/log/ 砍掉了,怎么办?没关系啊!反正你已经将重要数据直接以打印机记录起来了,他是无法逃开的!
再想象一个环境,你的办公室内有十部 Linux 主机,每一部负责一个网络服务, 你为了要了解每部主机的状态,因此,你常常需要登入这十部主机去查阅你的登录档~ 光用想的,每天要进入十部主机去查数据,想到就烦~这个时候我们可以让某一部主机当成 『登录文件服务器』,用他来记录所有的十部 linux 主机的信息,这样我就直接进入一部主机就可以了!
那要怎么达到这样的功能呢?我们 CentOS 5.x 预设的 syslog 本身就已经具有这个登录文件服务器的功能了, 只是默认并没有启动该功能而已。你可以透过 man syslogd 去查询一下相关的选项就能够知道了! 既然是登录档服务器,那么我们的 Linux 主机当然会启动一个埠口来监听了,那个预设的埠口就是 UDP 的 514 !
这里写图片描述
如上图所示,服务器会启动监听的埠口,客户端则将登录档再转出一份送到服务器去。 而既然是登录档『服务器』,所以当然有服务器与客户端 (client) !这两者的设定分别是这样的:
这里写图片描述
这里写图片描述
透过这个简单的动作,你的 Linux 主机已经可以接收来自其他主机的登录信息了! 当然你必须要知道网络方面的相关基础,这里只是先介绍, 未来了解了网络相关信息后,再回头来这里瞧一瞧!
至于 client 端的设定就简单多了!只要指定某个信息传送到这部主机即可! 举例来说,我们的登录档服务器 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机, 所以可以在 /etc/syslog.conf 里面新增这样的一行:
这里写图片描述
再重新启动 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 的主要功能就是将旧的登录档案移动成旧档, 并且重新建立一个新的空的档案来记录,他的执行结果有点类似底下的图示:
这里写图片描述
由上面的图示我们可以清楚的知道,当第一次执行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存登录文件。而第二次执行之后,则 messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存登录档!那么如果我们仅设定保留三个登录档而已的话,那么执行第四次时,则 messages.3 这个档案就会被删除,并由后面的较新的保存登录档所取代!基本的工作就是这样!
那么多久进行一次这样的 logrotate 工作呢?这些都记录在 logrotate.conf 里面,我们来看一下预设的 logrotate 的内容吧!
这里写图片描述
由这个档案的设定我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录,所以,其实我们可以将所有的资料都给他写入 /etc/logrotate.conf 即可,但是这样一来这个档案就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的设定也似乎不太合理~ 所以,如果独立出来一个目录,那么每个以 RPM 打包方式所建立的服务的登录档轮替设定, 就可以独自成为一个档案,并且放置到 /etc/logrotate.d/ 当中即可,真是方便又合理的做法!
一般来说,这个 /etc/logrotate.conf 是『预设的轮替状态』而已, 我们的各个服务都可以拥有自己的登录档轮替设定,你也可以自行修改成自己喜欢的样式! 例如,如果你的系统的空间够大,并且担心除错以及黑客的问题,那么可以:

  • 将 rotate 4 改成 rotate 9 左右,以保存较多的备份文件;
  • 大部分的登录档不需要 compress !但是空间太小就需要 compress !尤其是很占硬盘空间的 httpd 更需要 compress 的!

上面我们大致介绍了 /var/log/wtmp 这个档案的设定,现在你知道了 logrotate.conf 的设定语法是:
这里写图片描述
底下我们再以 /etc/logrotate.d/syslog 这个轮替 syslog 服务的档案,来看看该如何设定他的 rotate 呢?
这里写图片描述
在上面的语法当中,我们知道正确的 logrotate 的写法为:

  • 档名:被处理的登录文件绝对路径文件名写在前面,可以使用空格符分隔多个登录档;
  • 参数:上述档名进行轮替的参数使用 { } 包括起来;
  • 执行脚本:可呼叫外部指定来进行额外的命令下达,这个设定需与 sharedscripts …. endscript 设定合用才行。至于可用的环境为:
    o prerotate:在启动 logrotate 之前进行的指令,例如修改登录文件的属性等动作;
    o postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务!
    o Prerotate 与 postrotate 对于已加上特殊属性的档案处理上面,是相当重要的执行程序!

那么 /etc/logrotate.d/syslog 内设定的六个档案的轮替功能就变成了:
- 该设定只对 /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 来进行登录档轮替前、后所需要作的动作! 果真如此时,那么你可以这样修改一下这个档案!
这里写图片描述
看到否?就是先给他去掉 a 这个属性,让登录文件 /var/log/messages 可以进行轮替的动作, 然后执行了轮替之后,再给他加入这个属性!请特别留意的是,那个 /bin/kill -HUP … 的意义,这一行的目的在于将系统的 syslogd 重新以其参数档 (syslog.conf) 的资料读入一次!也可以想成是 reload 的意思! 由于我们建立了一个新的空的记录文件,如果不执行此一行来重新启动服务的话, 那么记录的时候将会发生错误!(请回到第十七章读一下 kill 后面的 signal 的内容说明)

19.3.2. 实际测试 logrotate 的动作
设定完成之后,我们来测试看看这样的设定是否可行呢?给他执行底下的指令:
这里写图片描述
这里写图片描述
上面那个 -f 具有『强制执行』的意思,如果一切的设定都没有问题的话,那么理论上,你的 /var/log 这个目录就会起变化!而且应该不会出现错误讯息才对!这样就 OK 了!
由于 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 时,则主动进行轮替,不需要考虑一个月的期限;
  • 保存五个备份文件;
  • 备份文件需要压缩 ;

那你可以怎么样设定呢?看看底下的动作吧!
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
看到了吗?透过这个方式,我们可以建立起属于自己的 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 分析的结果如下所示:
这里写图片描述
这里写图片描述
这里写图片描述
由于我的测试用主机尚未启动许多服务,所以分析的项目很少。若你的系统已经启动许多服务的话, 那么分析的项目理应会多很多才对。

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:10am 执行这支小程序!
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
目前我都是透过这支程序去分析自己管理的主机,然后再据以了解系统状况,如果有特殊状况则实时进行系统处理! 而且都是将上述的 email 调整成自己可以在 Internet 上面读到的邮件,这样我每天都可以收到正确的登录文件分析信息!

猜你喜欢

转载自blog.csdn.net/kk53976047/article/details/79546171