什么是登录档、干嘛要分析登录档
这部分是最轻易被新手所忽略的,那就是具体而确实的纪录或者是备份系统的登录档。
什么是登录档呢?简单的说,就是记录系统活动记录的几个档案,例如:何时、何地(来源 IP )、何人( login name )、做了什么动作,另外就是系统在什么时候做了什么样的行为时,发生了什么样的事件等等,要知道的是,我们的 Linux 主机在背景之下,有相当多的 daemons 在工作着,那么这些工作中的程序总是会有一些讯息显示,这些显示的讯息就是给记录在登录档当中啦,也就是说,记录这些系统的重要讯息,就是登录档所进行的纪录工作的内容了。而由于这些记录的工作内容对于系统的资讯太具体了,若被取得将可能影响到系统的安全性,因此,通常这些登录档只有 root 可以进行视察的功能!
那么为何要记录与解析登录档呢?这是由于记录档有几个重要的功能:
·解决系统的错误:这个对于系统治理员来说是很重要的资讯,例如:开机的过程当中侦测到的硬体讯息资料会记录到记忆体当中,由于这些侦测的资讯可以提供我们了解硬体资讯,所以假如你的系统发生问题时,可以下达 dmesg 看看硬体的侦测有没有发生错误呢!另外,假如系统资源被耗尽、核心活动发生错误等等事件发生的时候,则系统登录档亦会将错误的讯息记录在登录档中(通常是 /var/log/messages ),这些都可以藉以取得错误发生时的资讯,并加以克服问题!!
·解决网路服务的问题:在安装或设定新服务的套件时,最常使用到这个功能了!例如在安装启动 sendmail 时,假如 sendmail 无法提供服务的时候,那么无法提供服务的问题则会被纪录到登录档当中去,则只要分析登录档就可以了解问题点,并藉以解决问题啦!( 所以我们常说『天助自助者』是真的啦!察看(1)萤幕上面的错误讯息与(2)登录档的错误资讯,几乎可以解决大部分的 Linux 问题! )
·记录登录资讯:这个东西相当的重要!例如:有天您的 apache 这个 WWW 服务挂了,你怎么知道何时挂掉的?而最后登入者是谁?!这都可以藉由分析 apache 的登录档来取得资讯;此外,万一有一天您的系统被入侵,并且被利用来攻击他人的主机,这个时候对方的主机查出是您的 Linux 在进行攻击的行为,这个时候你要如何告知对方您的主机是由于被入侵所导致的问题,并且协助对方继续往来源追查呢?!呵呵!此时登录档可是相当重要的呢!
因此,一个有经验的主机治理员,会随时随地查阅一下自己的登录档,以随时把握系统的最新脉动!那么见的几个登录档有哪些呢?一般而言,有下面几个:
·/var/log/secure:记录登入系统存取资料的档案,例如 pop3, ssh, telnet, FTP 等都会记录在此档案中;
·/var/log/wtmp:记录登入者的讯息资料,由于本档案已经被编码过,所以必须使用 last 这个指令来取出档案的内容;
·/var/log/messages:这个档案相当的重要,几乎系统发生的错误讯息(或者是重要的资讯)都会记录在这个档案中;
·/var/log/boot.log:记录开机或者是一些服务启动的时候,所显示的启动或关闭讯息;
·/var/log/maillog 或 /var/log/mail/*:纪录邮件存取或往来( sendmail 与 pop3 )的使用者记录;
·/var/log/cron:这个是用来记录 crontab 这个例行性服务的内容的!
·/var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log: 分别是几个不同的网路服务的记录档啦!
好了,那么记录了这些登录档之后,我要做什么分析呀!?基本上,一个好的系统治理员大概都知道『一部主机负责的服务最好能少尽量少』,这是什么意思呢?也就是说,这部主机为邮件主机那么就专门负责邮件工作,不要还搞 WWW 服务!这样有几个好处,除了系统的安全性较佳之外(因为开的 port 变少了!),记录档的解析也会比较简单!因为我们的 /var/log/secure 记录的登入者资讯就会比较有一致性!那么我们就可以查询一下每日登入的使用者帐号啦与错误讯息啦等等的!(当然啰,假如你的频宽够、经验丰富的话,那么一部主机上面安装所有的网路服务也是可以的啦!)基本上,检查/var/log/messages、/var/log/secure这些个档案也就相当够了!因为系统发生的错误或者是警告讯息通常都会写入这个档案中。
但是,假如我手边有数十部主机怎么办?我要不要一部一部去察看 log file 呢?呵呵!那样察看会死人ㄋㄟ?因此,我们底下也使用一个简易的登录档来分析 Red Hat 或 Mandrake 这两种 Linux distribution 的登录档吧!
Linux 登录档的规划: syslogd, logrotate,
在系统的登录档系统当中,大多以一支常驻程式来进行写入这些讯息的这个工作,那就是 syslogd 这支程式啦!另外,由于登录档假如一直长大的话,那么这些登录档的写入动作将会很没有效率,这是因为档案太大时,ASCII 格式码的资料档案写入比较麻烦的缘故!那么怎么进行登录档资料的备份工作呢?呵呵!那就使用 logrotate 吧!将资料进行轮转( rotate )?什么是轮转?!(我ㄌㄟ台语不轮转呦!?)其实也可以称为轮替啦!基本上,就是将旧的 log 档案更改名称,然后建立一个空的 log 档案,如此一来,新的 log 档案将从零开始记录,然后只要将旧的 log 档案留下一阵子,嗯!那就可以达到将登录档『轮转』的目的啦!此外,假如旧的纪录(大概要保存几个月吧!)保存了一段时间没有问题,那么就可以让系统自动的将他砍掉,免得占掉很多宝贵的硬碟空间说!(举个例子来说,我的 WWW 网站一个月的登录档,所占掉的硬碟空间大小,大概就有 1GB 这么多....而且都是纯文字档....很可怕吧!)
所以说,基本上,针对 log 档案来设计的服务有这两支:
osyslogd:进行系统或者是网路服务的登录档记录工作;
ologrotate:将旧的资料更名,并且建立新的登录档,以保持登录档的『新鲜』,并视设定将最旧的登录档删除。
所以,接着下来我们来谈一谈怎么样规划这两支程式呢?!就由 syslogd 这支程式先谈起吧!究竟得先有登录档,才可以进行 logrotate 呀!您说是吧!?
osyslogd:
我们在Linux里面预设就已经使用了syslogd这支程式来记录系统的登入资料,不相信的话,你可以使用ps来查询一下:
[root @test root]# ps -auxgrep syslog root 7820.00.81340508 ?SOct30 0:00 syslogd -m 0 root 110440.01.12408732 pts/1S00:03 0:00 grep syslog
o
看到syslog这个服务名称了吧?!呵呵!所以知道他已经在背景底下工作啰!syslog 这支程式可以提供『系统登入资讯记录』及『Kernel错误或警示资讯记录』等功能,此外,他还提供了『本地端与远端电脑的登录资讯记录』功能,所以,可以将远端的主机登入资讯同时记录在本地端呢!很不错的功能吧!!此外,目前正规使用的系统服务中,大都预设支援以 syslog 这一个服务来记录他的登录档案资料,例如apache, samba, sendmail 等等。而通常syslog提供的记录参数主要有:
§事件发生时间;
§主机名称;
§启动此事件的服务名称(例如 httpd, samba...)
§讯息资料内容
等等这些资讯,当然,这些资讯的具体度是可以修改的,此外,这些资讯可以作为系统除错之用呢!我们先来看一下/var/log/secure的内容显示些什么呢?
[root @test root]# vi /var/log/secure Nov4 16:28:35 test xinetd[7831]: START: telnet pid=7841 from=192.168.1.11 Nov4 16:28:35 test xinetd[7841]: FAIL: telnet address from=192.168.1.11 Nov4 23:41:17 test sshd[10803]: Accepted passWord for test from 192.168.1.11 port 3117 ssh2 Nov4 23:41:17 test sshd(pam_unix)[10805]: session opened for user test by (uid=500) Nov4 23:41:29 test su(pam_unix)[10838]: authentication failure; logname=test uid=500 euid=0 tty= ruser=test rhost=user=root Nov4 23:41:34 test su(pam_unix)[10839]: session opened for user root by test(uid=500)
在上面的表格中,可以看到每笔记录的主要内容是:
以第一笔资料来看,,在,,,这样够具体了吧!还有很多的资讯值得看的呢!尤其是/var/log/messages的内容。然后,不要忘记了,在最后一笔资料中,还记录了可以使用su的使用者的uid为500,帐号名称为test,那么假如这个资料被人家夺走了,呵呵!未来外面的cracker将可能试图以test这个帐号来猜测你的密码,并加以破解,嗯!真的很重要吧!所以这些资料很多都不能外流呢!
好了,再来看到我们要如何来设定 syslogd 呢?!刚刚说到 syslog 可以记录我们系统中的几乎所有的预设的系统工作,那么万一我的网路服务是自行设定的呢?!例如以 Tarball 安装好的服务套件。OK!我们可以藉由修改 syslog 的参数档来达到这个目的。那么预设的 syslog 参数档放在哪里呢?!
§/etc/syslog.conf
其实预设的 syslogd 程式的参数档案就是 /etc/syslog.conf 这个档案内容啦!这个档案的内容可以规定『什么服务需要被记录、该服务被纪录的讯息等级如何?』。基本上,可以使用底下的句子语法来说明:
服务名称.讯息等级存放或显示地点
§服务名称:例如 mail, http, news, cron, at 等等的服务名称;
§讯息等级:总共分成下列几种等级:
§info : 提示一些讯息资料;
§notice : 注重!需要比较留意的讯息;
§waring