鸟哥的 Linux 私房菜 -- 登录档的分析啦!

since2012/04/23

     
 
最近更新日期:2006/07/23
本文已不再维护,更新文章请参考此处
『登录档』似乎是常常听到的名词,网络上的老手们也常常告知新手们要多察看登录档, 那么这些登录档是干嘛用的?嗯!似乎是当你启发一个事件的时候,或者是有人登入你的 Linux 主机的时候,主机会有一些认证的程序或者是一些重要的讯息,由于这些讯息有被追踪的重要性, 所以自然就有需要将他保留下来,以备未来的不时之需啰,这些讯息会被纪录在某些档案上, 这些档案就被称为登录档了!那么您晓得该登入者的信息被纪录在哪里吗?这些信息的量有多大呢? 您可以每天自行观看吗?哇!如果能用 Shell Scripts 来分析的话,不是就更快速了吗?呵呵! 这里鸟哥写了一个小小的分析档案 ( logfile.sh ),让大家可以更快乐的管理你的 Linux 主机呦! ^_^

大标题的图示什么是登录档?
这部分是最容易被新手所忽略的,那就是『 详细而确实的纪录或者是备份系统的登录文件 』。那么什么是登录档呢?简单的说,就是记录系统活动记录的几个档案, 例如:何时、何地 (来源 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
    分别是几个不同的网络服务的记录文件啦!
常见的登录档就是这几个,但是,不同的 Linux distributions ,通常登录档的档名不会相同 ( 除了 /var/log/messages 之外 ),所以说,您还是得要查阅您 Linux 主机上面的登录文件设定数据, 才能知道你的登录档主要档名喔!

好了,那么记录了这些登录文件之后,我要做什么分析呀!?基本上,一个好的系统管理员大概都知道 『一部主机负责的服务最好能少尽量少』,这是什么意思呢? 也就是说,这部主机为邮件主机那么就专门负责邮件工作,不要还搞 WWW 服务!这样有几个好处,除了系统的安全性较佳之外 ( 因为开的 port 变少了! ) , 登录档的解析也会比较简单!因为我们的 /var/log/secure 记录的登入者信息就会比较有一致性! 那么我们就可以查询一下每日登入的用户账号啦与错误讯息啦等等的!( 当然啰,如果你的带宽够、经验丰富的话,那么一部主机上面安装所有的网络服务也是可以的啦!) 基本上,检查 /var/log/messages、/var/log/secure 这些个档案也就相当够了! 因为系统发生的错误或者是警告讯息通常都会写入这些档案中。

但是,如果我手边有数十部主机怎么办?我要不要一部一部去察看 log file 呢?呵呵!那样察看会死人ㄋㄟ~因此,我们底下也使用一个简易的登录档来分析 Red Hat (含 Fedora 啦!) 系列的登录文件吧!

在 Linux 的登录文件系统当中,大多以一支特定的 daemon 来进行写入这些讯息的工作,那就是 syslogd 这支程序啦!所以说,只要软件套件有支持 syslogd 的登录文件写入模式, 那么该软件套件的信息就会被写入到 syslogd 管理的登录档当中。

另外,由于登录档如果一直长大的话,那么这些登录档的写入动作将会很没有效率, 这是因为档案太大时,ASCII 格式码的数据文件写入比较麻烦的缘故! 那么怎么进行登录文件数据的备份工作呢?呵呵!那就使用 logrotate 吧!将数据进行轮转( rotate )?什么是轮转?!(我ㄌㄟ台语不轮转呦!?) 其实也可以称为轮替啦!

所谓的 logrotate 基本上,就是将旧的 log 档案更改名称,然后建立一个空的 log 档案,如此一来,新的 log 档案将从零开始记录,然后只要将旧的 log 档案留下一阵子,嗯!那就可以达到将登录档『轮转』的目的啦! 此外,如果旧的纪录 (大概要保存几个月吧!保存了一段时间没有问题,那么就可以让系统自动的将他砍掉, 免得占掉很多宝贵的硬盘空间说!(举个例子来说,鸟哥的 WWW 网站一个月的登录档,所占掉的硬盘空间大小,大概就有 3GB 这么多....而且都是纯文本档....很可怕吧!)

所以说,基本上,针对 log 档案来设计的服务有这两支:
  • syslogd
    进行系统或者是网络服务的登录文件记录工作;

  • logrotate
    将旧的数据更名,并且建立新的登录档, 以保持登录档的『新鲜』,并视设定将最旧的登录档删除。
所以,接着下来我们来谈一谈怎么样规划这两支程序呢?!就由 syslogd 这支程序先谈起吧!毕竟得先有登录档,才可以进行 logrotate 呀!您说是吧!?


大标题的图示登录文件的纪录: syslogd
刚刚上面提到说,Linux 的登录档主要是由 syslogd 这个 daemon 在负责,那么您的 Linux 是否有启动 syslogd 呢?而且是否有设定开机时启动呢?呵呵!检查一下先:
[root@linux ~]# ps aux | grep syslog
USER    PID %CPU %MEM   VSZ   RSS TTY  STAT START  TIME COMMAND
root  11129  0.0  0.0  1616   204 ?    Ss   Oct03  0:01 syslogd -m 0
# 瞧!对吧!确实有启动的!

[root@linux ~]# chkconfig --list | grep syslog
syslog   0:off   1:off   2:on   3:on   4:on   5:on   6:off
# 因为鸟哥的系统用 run level 3 ,所以,也是有启动的!
看到 syslog 这个服务名称了吧?!呵呵!所以知道他已经在背景底下工作啰!如前所述, syslog 这支程序提供了『系统登入信息记录』及『 Kernel 错误或警示信息记录』等功能,此外, 他还提供了『本地端与远程计算机的登录信息记录』功能,所以,可以将远程的主机登入信息同时记录在本地端呢! 很不错的功能吧!!此外,目前正规使用的系统服务中,大都默认支持以 syslog 这一个服务来记录他的登录档案数据,例如 apache, samba, sendmail 等等。


小标题的图示登录档内容的一般格式
一般来说,通常经过 syslog 而记录下来的数据主要有:
  • 事件发生的日期与时间;
  • 发生此事件的主机名;
  • 启动此事件的服务名称 (如 samba, xinetd 等) 或函式名称 (如 libpam ..);
  • 该讯息数据内容。
当然,这些信息的『详细度』是可以修改的,而且,这些信息可以作为系统除错之用呢! 我们先来看一下 /var/log/secure 的内容显示些什么呢?
[root@linux ~]# cat /var/log/secure
Oct 16 10:16:13 linux sshd[3494]: Accepted password for dmtsai from 
192.168.1.11 port 1037 ssh2
Oct 16 10:20:15 linux xinetd[21592]: START: shell pid=4176 from=192.168.1.31
Oct 16 14:50:25 linux sshd[26665]: Accepted password for dmtsai from 
192.168.1.11 port 1078 ssh2
Oct 16 19:56:06 linux xinetd[20576]: START: shell pid=21013 from=192.168.1.31
以第一笔数据为例,该数据说明的内容为:『时间在 Oct 16 10:16:13 (10/16, 10:16)时;由主机名为 linux 的那部主机当中;由 sshd (且其 PID 为 3494) 那项服务所产生的一个讯息;讯息内容说明是:接受来自 192.168.1.11 连接至本机,使用 ssh2 联机机制,接受的使用者为 dmtsai』。有够清楚的吧! ^_^。就是因为太清楚了, 包括那个 192.168.1.11 的 IP 来源,以及使用者账号为 dmtsai , 这些信息如果让比较高竿的 cracker 知道后,是有可能猜测密码的, 所以啰,这些信息当然不能够外流啦!好好保存吧!

其实还有很多的信息值得查阅的呢!尤其是 /var/log/messages 的内容。记得一个好的系统管理员, 要常常去『巡视』登录档的内容喔!尤其是:
  • 当你觉得系统似乎不太正常时;
  • 某个 daemon 老是无法正常启动时;
  • 某个使用者老是无法登入时;
  • 某个 demon 执行过程老是不顺畅时;
还有很多啦!反正觉得系统不太正常,就得要查询查询登录档就是了。


小标题的图示登录档的配置文件:/etc/syslog.conf
什么?登录档还有配置文件??喔!不是啦~是 syslogd 这个 daemon 的配置文件啦! 我们现在知道 syslogd 可以负责主机产生的各个信息的登录,而这些信息本身是有『严重等级』之分的, 而且,这些数据要传送到什么文件名的档案里去?这都是可以修订的呢,所以我们才会在一开头的地方讲说, 每个 Linux distributions 放置的登录档档名可能会有所差异啊!

基本上, syslog 针对各种服务与讯息记录在某些档案的配置文件就是:
    /etc/syslog.conf
这个档案规定了『哪些服务需要被纪录, 该服务产生的什么等级的讯息要被纪录?』这个 /etc/syslog.conf 的内容语法是这样的:
服务名称[.=!]讯息等级		讯息记录的文件名或装置或主机
# 例如底下:
mail.info			/var/log/maillog_info
简单的说明如下:

  • 服务名称:
  • 什么服务产生的讯息要被纪录的意思。syslog 认识的服务主要有底下这些:
    • auth, authpriv:主要与认证有关的机制,例如 telnet, login, ssh 等需要认证的服务都是使用此一机制;
    • cron:就是例行性命令 cron/at 等产生讯息记录的地方;
    • daemon:与各个 daemon 有关的讯息;
    • kern:就是核心 (kernel) 产生讯息的地方;
    • lpr:亦即是打印相关的讯息啊!
    • mail:只要与邮件收发有关的讯息纪录都属于这个;
    • news:与新闻组服务器有关的东西;
    • syslog:就是 syslogd 这支程序本身产生的信息啊!
    • user, uucp, local0 ~ local7:与 Unix like 机器本身有关的一些讯息。
    基本上,syslog 所认识的信息服务与一般我们常说的服务不太一样。举例来说, 关于邮件服务器,我们可以选择 sendmail, qmail 或者是当红的 postfix 这些软件来达成, 但这些服务器使用的都是同一个通讯协议,亦即是 smtp 这个玩意儿 (参阅一下 /etc/services 的内容, 找到 smtp 观察一下 port number 啦!)。所以,这些同性质的服务器,产生的讯息都属于 syslog 当中的 mail 所管辖的范围喔!

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

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

  • 讯息等级
  • 每种服务所产生的讯息是有差异的,有启动时告知系统的信息讯息 (information), 有被入侵时发出的警告讯息 (warn) ,还有系统硬件发生错误时,所产生的重大问题讯息 (error 等等); 基本上,系统将讯息分为七个主要的等级,依序是这样的(由不重要排列到重要讯息等级):
    1. info:仅是一些基本的讯息说明而已;
    2. notice:比 info 还需要被注意到的一些信息内容;
    3. warning 或 warn:警示的讯息,可能有问题, 但是还不至于影响到某个 daemon 运作的信息;基本上, info, notice, warn 这三个讯息都是在告知一些基本信息而已,应该还不至于造成一些系统运作困扰;
    4. err 或 error :一些重大的错误讯息, 例如配置文件的某些设定值造成该服务服法启动的信息说明, 通常藉由 err 的错误告知,应该可以了解到该服务无法启动的问题呢!
    5. crit:比 error 还要严重的错误信息,这个 crit 是临界点 (critical) 的缩写,这个错误已经很严重了喔!
    6. alert:警告警告,已经很有问题的等级,比 crit 还要严重!
    7. emerg 或 panic:疼痛等级,意指系统已经几乎要当机的状态! 很严重的错误信息了。 通常大概只有硬件出问题,导致整个核心无法顺利运作,就会出现这样的等级的讯息吧!
    除了这些有等级的讯息外,还有两个特殊的等级,那就是 debug(错误侦测等级) 与 none (不需登录等级) 两个,当我们想要作一些错误侦测,或者是忽略掉某些服务的信息时,就用这两个咚咚吧!

    特别留意一下在讯息等级之前还有 [.=!] 的链接符号喔!他代表的意思是这样的:
    • . :代表『比后面还要高的等级(含该等级)都被记录下来』的意思, 例如: mail.info 代表只要是 mail 的信息,而且该信息等级高于 info (含 info 本身)时,就会被记录下来的意思。
    • .=:代表所需要的等级就是后面接的等级而已,其他的不要!
    • .!:代表不等于,亦即是除了该等级外的其他等级都记录。
    一般来说,我们比较常使用的是『.』这个链接符号啦!^_^

  • 讯息记录的文件名或装置或主机
  • 再来则是这个讯息要放置在哪里的纪录了。通常我们使用的都是记录的档案啦!但是也可以输出到装置呦! 例如打印机之类的!也可以记录到不同的主机上头去呢!底下就是一些常见的放置处:
    • 档案的绝对路径:通常就是放在 /var/log 里头的档案啦!
    • 打印机或其他:例如 /dev/lp0 这个打印机装置
    • 使用者名称:显示给用户啰!
    • 远程主机:例如 @test.adsldns.org当然啦,要对方主机也能支持才行!
    • *:代表『目前在在线的所有人』,类似 wall 这个指令的意义!
    基本上,整个 syslog 的配置文件就只是这样而已,底下我们来思考一些例题, 好让你可以更清楚的知道如何设定 syslogd 啊!

    例题:如果我要将我的 mail 相关的数据给他写入 /var/log/maillog 当中,那么在 /etc/syslog.conf 应该如何写?
    答:
      基本的写法是这样的:

        mail.info     /var/log/maillog

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

    例题:我要将新闻组数据 (news) 及例行性命令的信息 (cron) 都写入到一个称为 /var/log/cronnews 的档案中,但是这两个程序的警告讯息记录在 /var/log/cronnews.warn 该如何设定我的档案呢?
    答:
      很简单啦!既然是两个程序,那么只好以分号来隔开了,此外,由于第二个指定档案中,我只要记录警告讯息, 因此设定上需要指定『=』这个符号,所以就成为了:

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

      上面那个『.=』就是在指定等级的意思啦!由于指定了等级,因此,只有这个等级的讯息才会被纪录在这个档案里面呢!

    例题:我的 messages 这个档案需要记录所有的信息,但是就是不想要记录 cron, mail 及 news 的信息,那么应该怎么写才好?
    答:
      可以有两种写法,分别是:

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

      使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话, 那么就需要将服务与等级都写上去啰!这样会设定了吧!

    了解语法之后,我们来看一看在尚未开启网络服务的情况下,我们的 syslog 有哪些系统服务已经在纪录了呢?!那就是瞧一瞧 /etc/syslog.conf 这个档案的预设内容啰! ( 注意!如果需要将该行做为批注时,那么就加上 # 符号就可以啦!)
    # 来自 Fedora Core Release 4 的相关资料
    [root@linux ~]# vi /etc/syslog.conf
    #kern.*                                    /dev/console
    # 只要是 kernel 产生的讯息,全部都送到 console 去!
    # 这个项目默认是关闭的!不过,只要您愿意,可以开启就是了!
    
    *.info;mail.none;authpriv.none;cron.none   /var/log/messages
    # 在已知各服务的讯息中,不要记录到这个档案当中啦!
    # 例如 mail 我们已经默认要记录在 /var/log/maillog (底下),
    # 所以自然不要在记录 mail 到这个 /var/log/messages 档案中啦! 
    # 然后其他的讯息全部都记录到 /var/log/messages 当中!
    # 所以这个档案相当的重要!没有被规定到的讯息都可以在这里找到!
    
    authpriv.*                                 /var/log/secure
    # 这个就是经过一些身份确认的行为之后,需要记录身份的档案啦!
    # 什么是身份确认呢?例如 pop3 收信要输入账号与密码、 ssh 与 telnet, ftp 
    # 等等的服务需要输入账号与密码,这些都会在 /var/log/secure 里面记录!
    # 他可也是相当重要的一个档案呢!
    
    mail.*                                     -/var/log/maillog
    # 只要跟 mail 有关的(不论是 pop3 还是 sendmail )都会被纪录到这个档案中!
    
    cron.*                                     /var/log/cron
    # 还记得例行性命令那一章节吗?!对啦!就是那个 crontab 的东西,
    # 那东西的服务程序名称就是 cron 啦!执行 cron 的结果都记录于此!
    
    *.emerg                                    *
    # 任何时候发生的警告讯息都会显示给在线的所有人!那个 * 就是目前在线的所有人啦!
    # 这个就是利用 wall 之类的方式传输讯息的啊!
    
    uucp,news.crit                             /var/log/spooler
    # 记录新闻错误高于 crit 的等级的信息,写入 spooler 当中!
    
    local7.*                                   /var/log/boot.log
    # 将开机的当中的讯息给他写入 /var/log/boot.log 这个档案当中呦! 
    
    基本上,每个版本的 syslog.conf 差异是颇大的,所以,每个登录文件记录的数据其实不很固定。 举例来说,如果您曾经使用过 Mandriva 的话,他的 syslogd 设定信息有点像这样:
    # 来自 Mandrake 9.0 的 syslog.conf 内容
    [root@linux ~]# vi /etc/syslog.conf
    auth,authpriv.*                                /var/log/auth.log
    *.*;auth,authpriv.none                        -/var/log/syslog
    user.*                                        -/var/log/user.log
    *.info;mail.none;;news.none;authpriv.none     -/var/log/messages
    Authpriv.*                                     /var/log/secure
    mail.=debug;mail.=info;mail.=notice           -/var/log/mail/info
    mail.=warn                                    -/var/log/mail/warnings
    mail.err                                      -/var/log/mail/errors
    cron.=debug;cron.=info;cron.=notice           -/var/log/cron/info
    cron.=warn                                    -/var/log/cron/warnings
    cron.err                                      -/var/log/cron/errors
    kern.=debug;kern.=info;kern.=notice           -/var/log/kernel/info
    kern.=warn                                    -/var/log/kernel/warnings
    kern.err                                       /var/log/kernel/errors
    lpr.=debug;lpr.=info;lpr.=notice              -/var/log/lpr/info
    lpr.=warn                                     -/var/log/lpr/warnings
    lpr.err                                       -/var/log/lpr/errors
    news.=debug;news.=info;news.=notice           -/var/log/news/news.notice
    news.=crit                                    -/var/log/news/news.crit
    news.=err                                     -/var/log/news/news.err
    Daemon.=debug;daemon.=info;daemon.=notice     -/var/log/daemons/info
    Daemon.=debug;daemon.=info;daemon.=notice     -/var/log/daemons/info
    Daemon.=warn                                  -/var/log/daemons/warnings
    Daemon.err                                    -/var/log/daemons/errors
    *.emerg                                       *
    Local1.*                                      -/var/log/explanations
    
    基本上,他将每个服务的登录档都分成三个内容,那么我们就可以简单的依据比较严重的登录档来解析, 有助于系统的快速整理。但是每个人的喜好不同,因此,并不见得这样的设定大家都喜欢。 而像鸟哥自己,我自己写了一支分析 logfile 的程序,该程序主要针对 Red Hat 系统的登录文件来作处理的,则 Mandriva 的版本是否适用呢?当然适用啊! 只要手动修订一下 /etc/syslog.conf 内容即可啊!这样说,瞭了吧?! ^_^

    另外,这些档案都相当的重要 (例如什么时候被谁登入进来主机啦!?) ,所以他们的权限大多是属于 root 的可擦写而已!这点非常需要小心而留意! ( 请注意,在系统的默认状况中,所有的未知状态的讯息几乎都是写入 /var/log/messages 这个档案中,所以,如果系统有问题,请详细的检查一下这个 /var/log/messages 档案吧!!)

    如果您有其他的需求,所以需要特殊的档案来帮你记录时,呵呵!别客气,千万给他记录在 /etc/syslog.conf 当中,如此一来,您就可以重复的将许多的信息记录在不同的档案当中,以方便您的管理呢!

    让我们来作个练习题吧!如果你想要让『所有的信息』都额外写入到 /var/log/admin.log 这个档案时, 你可以怎么作呢?先自己想一想,并且作一下,再来看看底下的作法啦!
    # 1. 先设定好所要建立的档案设置!
    [root@linux ~]# vi /etc/syslog.conf
    *.info          /var/log/admin.log
    
    # 2. 重新启动 syslog 呢!
    [root@linux ~]# /etc/init.d/syslog restart
    [root@linux ~]# ll /var/log/admin.log
    -rw-------  1 root root 122 Oct 23 22:21 /var/log/admin.log
    # 瞧吧!建立了这个档案出现啰!
    
    很简单吧!如此一来,所有的信息都会写入 /var/log/admin.log 里面了!


    小标题的图示登录档的安全性设置
    好了,由上一个小节里面我们知道了 syslog.conf 的设定,也知道了登录档内容的重要性了, 所以,如果幻想你是一个很厉害的黑客,想利用他人的计算机干坏事,然后又不想留下证据, 你会怎么作?对啦!就是离开的时候将屁股擦干净,将所有可能的讯息都给他抹煞掉, 所以第一个动脑筋的地方就是登录档的清除工作啦~

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

    伤脑筋呢!那么有没有办法防止这样的事情呢?有呀!拔掉网络线……呵呵!别担心,基本上, 我们可以透过一个隐藏的属性来设定你的登录档,成为『 只可以增加数据,但是不能被删除 』的状态,那么或许可以达到些许的保护!不过,如果你的 root 账号被破解了,那么底下的设定还是无法保护的,因为你要记得『 root 是可以在系统上面进行任何事情的 』,因此,请将你的 root 这个账号的密码设定的安全一些!千万不要轻忽这个问题呢!

    好了,开始来设定一下基本的隐藏属性吧!那就是在 Linux 文件属性 提过的 lsattrchattr 这两个东西啦!如果将一个档案以 chattr 设定 i 这个属性时,那么该档案连 root 都不能杀掉!而且也不能新增数据,嗯!真安全!但是,如此一来登录文件的功能岂不是也就消失了? 因为没有办法写入呀!所以啰,我们要使用的是 a 这个属性!你的登录文件如果设定了这个属性的话,那么 他将只能被增加,而不能被删除!嗯! 这个项目就非常的符合我们登录档的需求啦!因此,您可以这样的增加你的登录文件的隐藏属性。
    Tips:
    请注意,底下的这个 chattr 的设定状态:『仅适合已经对 Linux 系统很有概念的朋友』来设定, 对于新手来说,建议您直接使用系统的默认值就好了,免得到最后登录档无法写入~ 那就比较糗一点! @_@
    鸟哥的图示
    [root@linux ~]# chattr +a /var/log/messages
    [root@linux ~]# 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@linux ~]# chattr -a /var/log/messages
    

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

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

    那要怎么达到这样的功能呢?首先,你必须要连上网络嘛!不然怎么接受信息? 再来,由于 syslog 用的是 udp 封包的 514 埠号,因此,你的登录文件主机就得要启用这个 port 才行~ 如何启用呢?很简单啊!这样做就可以了!
    # 1. 先取得 port number 的信息!
    [root@linux ~]# grep 514 /etc/services
    syslog          514/udp
    # 特别特别注意,你的 /etc/services 里面必须要存在这一行才行~
    # 如果不存在这一行,你可以手动自行增加的!
    
    # 2. 修改 syslogd 的启动配置文件,通常在 /etc/sysconfig 内!
    [root@linux ~]# vi /etc/sysconfig/syslog
    # 找到底下这一行:
    SYSLOGD_OPTIONS="-m 0"
    # 改成底下这样子!
    SYSLOGD_OPTIONS="-m 0 -r"
    
    # 3. 重新启动与观察 syslogd 喔!
    [root@linux ~]# /etc/init.d/syslog restart
    [root@linux ~]# netstat -tlunp
    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:*              24314/syslogd
    # 嘿嘿!你的登录文件主机已经设定妥当啰!很简单吧!
    
    透过这个简单的动作,你的 Linux 主机已经可以接收来自其他主机的登录信息了! 当然啦,你必须要知道网络方面的相关基础,这里鸟哥只是先介绍, 未来了解了网络相关信息后,再回头来这里瞧一瞧先! ^_^,此外, 更多的相关信息可以 man syslogd 查阅看看喔! ^_^

    至于 client 端的设定就简单多了!只要指定某个信息传送到这部主机即可! 举例来说,我们的登录文件主机 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机, 所以,可以在 /etc/syslog.conf 里面新增这样的一行:
    [root@linux ~]# vi /etc/syslog.conf
    *.*       @192.168.1.100
    
    立刻就搞定了!而未来主机上面的登录文件当中,每一行的『主机名』就会显示来自不同主机的信息了。 很简单吧! ^_^。接下来,让我们来谈一谈,那么如何针对登录档来进行轮转 (rotate) 呢?

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


    小标题的图示logrotate 的配置文件
    既然 logrotate 主要是针对登录档来进行轮替的动作,所以啰,他当然必须要记载『 在什么状态下才将登录档进行轮替』的设定啊!那么 logrotate 这个程序的参数配置文件在哪里呢?!呵呵!那就是:
    • /etc/logrotate.conf
    • /etc/logrotate.d/
    注意啰!那个 logrotate.conf 才是主要的参数档案,至于 logrotate.d 是一个目录, 该目录里面的所有档案都会被主动的读入 /etc/logrotate.conf 当中来进行!另外,在 /etc/logrotate.d/ 里面的档案中,如果没有规定到的一些细部设定,则以 /etc/logrotate.conf 这个档案的规定来指定为默认值!

    好了,刚刚我们提到 logrotate 的主要功能就是将旧的登录档案移动成旧档, 并且重新建立一个新的空的档案来记录,他的执行结果有点类似底下的图示:

    登录档进行 logrotate 的结果
    图一、登录档进行 logrotate 的结果

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

    那么多久进行一次 logrotate 的工作呢?嗯!这些都记录在 logrotate.conf 里面,我们来看一下预设的 logrotate 的内容吧!
    [root@linux ~]# vi /etc/logrotate.conf
    # 底下的设定是 "logrotate 的预设设定值" ,如果个别的档案设定了其他的参数,
    # 那么将以个别的档案设定为主,若该档案没有设定到的参数,
    # 则以这个档案的内容为默认值!
    
    weekly
    # 预设每个礼拜对登录档进行一次 rotate 的工作
    
    rotate 4
    # 保留几个登录档呢?预设是保留四个!
    
    create
    # 是否建立新的登录文件来记录呢?因为我们要继续记录,所以当然是建立啰!
    
    #compress
    # rotate 之后的登录档,要不要压缩,通常是不要压缩啦,但是如果你的系统很忙碌,
    # 表示你的登录档很庞大的时候,那么最好就是给他压缩一下比较不会占空间!
    # 如果要压缩,将 # 拿掉即可!不过,登录档扩展名会变成 messages.1.gz 喔!
    
    include /etc/logrotate.d
    # 将底下这个目录中的所有档案都读进来执行 rotate 的工作!
    
    /var/log/wtmp {
        monthly
        create 0664 root utmp
        rotate 1
    }
    # 基本上,在 logrotate.conf 档案当中,只有这个数据是在记载如何对登录文件进行轮替的!
    # 这个登录文件记载的就是使用 login 登入系统时的用户状态,还记得那个 last 指令吧?
    # 就是读自 /var/log/wtmp 当中记录的数据啦!整个段落的意义是:
    # 1. 每个月进行一次 log rotate 的工作; 
    # 2. 将档案的权限设定为 664 ,且拥有者为 root ,群组为 utmp; 
    # 3. 仅保存前一个月的 rotate 备份!
    # 这也是为什么我们说 last 只会秀出这个月的数据而已的原因~因为一个月轮替一次嘛!
    # 这个 rotate 可以改大一点,例如 5 以保存五个月,以利追踪 
    
    /var/log/btmp {
        missingok
        monthly
        create 0600 root utmp
        rotate 1
    }
    # 这个跟 wtmp 类似!
    
    由这个档案的设定我们可以知道 /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 这个档案的设定,但是还是不很详细啦,所以底下我们以 /etc/logrotate.d/syslog 这个轮替 syslog 服务的档案,来看看该如何设定他的 rotate 呢:
    [root@linux ~]# 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> /dev/null` 2> /dev/null || true
        endscript
    }
    # 亦即是这样的格式啦!
    # 登录文件的绝对路径文件名 {
    # 	各项基本上设定值
    # }
    
    在上面的语法当中,我们知道正确的 logrotate 的写法为:
    • 将要被处理的登录档档名 (包含绝对路径) 写在前面,可以使用空格符分隔多个登录档;
    • 用 { } 包括所有的设定;
    • 设定的项目与前面提到的相同,并且可加入轮替前 (pre) 与后 (post) 的一些特殊执行的指令! 这个设定需与 sharedscripts .... endscript 设定合用才行;
      • prerotate:在启动 logrotate 之前进行的指令,例如修改登录文件的属性等动作;
      • postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -1 或 kill -HUP) 某个服务!
      • Prerotate 与 postrotate 对于已经加上了特殊属性的档案处理上面,是相当重要的执行程序!
    也就是说,这一段设定值说明的是:『 /var/log 目录内的 messages, secure, mailog, spooler, boot.log 及 cron 这六个档案,每个礼拜进行一次轮替,且保留四个登录档,此外, 在轮替进行完毕之后,执行 syslog 的重新启动』为什么会知道每个礼拜进行一次呢? 呵呵!因为没有提到该设定项目,所以就用 /etc/logrotate.conf 内的默认值来作用啊!

    好!若假设我们有针对 /var/log/messages 这个档案增加 chattr +a 的属性存在时, 依据 logrotate 的工作原理,我们知道,这个 /var/log/messages 将会被更名成为 /var/log/messages.1 才是。但是由于加上这个 +a 的参数啊,所以,更名是不可能成功的! 那怎么办呢?呵呵!就利用 prerotate 与 postrotate 来进行登录档轮替前、后所需要作的动作啊! 果真如此时,那么你可以这样修改一下这个档案喔!
    [root@linux ~]# 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> /dev/null` 2> /dev/null || true
    	/usr/bin/chattr +a /var/log/messages
        endscript
    }
    
    看到否?就是先给他去掉 a 这个属性,让登录文件 /var/log/messages 可以进行轮替的动作, 然后执行了轮替之后,再给他加入这个属性!请特别留意的是,那个 /bin/kill -HUP ... 的意义,这一行的目的在于将系统的 syslogd 重新以其参数档( syslog.conf )的资料读入一次!也可以想成是 reload 的意思啦! 由于我们建立了一个新的空的纪录文件,如果不执行此一行来重新启动服务的话, 那么记录的时候将会发生错误呦!! (请回到资源管理的章节读一下 kill 后面的 signal 的内容说明)!


    小标题的图示实际测试 logrotate 的动作
    好了,设定完成之后,我们来测试看看这样的设定是否可行呢?给他执行底下的指令:
    [root@linux ~]# logrotate [-vf] logfile
    参数:
    -v  :启动显示模式,会显示 logrotate 运作的过程喔!
    -f  :不论是否符合配置文件的数据,强制每个登录档都进行 rotate 的动作!
    范例:
    
    范例一:执行一次 logrotate 看看整个流程为何?
    [root@linux ~]# logrotate -v /etc/logrotate.conf
    reading config file /etc/logrotate.conf
    including /etc/logrotate.d
    reading config file acpid
    reading config info for /var/log/acpid
    .....(中间省略).....
    rotating pattern: /var/log/btmp  monthly (1 rotations)
    empty log files are rotated, old logs are removed
    considering log /var/log/btmp
      log does not need rotating
    
    范例二:强制进行 logrotate 的动作
    [root@linux ~]# logrotate -vf /etc/logrotate.conf
    .....(前面省略).....
    rotating pattern: /var/log/wtmp  forced from command line (1 rotations)
    empty log files are rotated, old logs are removed
    considering log /var/log/wtmp
      log needs rotating
    rotating log /var/log/wtmp, log->rotateCount is 1
    renaming /var/log/wtmp.1 to /var/log/wtmp.2 (rotatecount 1, logstart 1, i 1),
    renaming /var/log/wtmp.0 to /var/log/wtmp.1 (rotatecount 1, logstart 1, i 0),
    old log /var/log/wtmp.0 does not exist
    renaming /var/log/wtmp to /var/log/wtmp.1
    creating new log mode = 0664 uid = 0 gid = 22
    removing old log /var/log/wtmp.2
    # 看到否?整个 rotate 的动作就是这样一步一步进行的~
    
    上面那个 -f 具有『强制执行』的意思,如果一切的设定都没有问题的话,那么理论上,您的 /var/log 这个目录就会起变化啰!而且应该不会出现错误讯息才对!嘿嘿!这样就 OK 了!很棒不是吗?!

    好了,那么预设的 logrotate 什么时候执行呢?呵呵!不用担心,系统已经帮我们设定好了!放在哪里呢? 刚刚不是提过吗?就是放在 /etc/cron.daily/logrotate 里面啊!如果您的版本不是 FC4 , 那么可以利用 rpm 的相关功能找到这个设定数据喔! ^_^

    由于 logrotate 的工作已经加入 crontab 里头了!所以现在每天系统都会自动的给他查看 logrotate 啰!不用担心的啦!!只是要注意一下那个 /var/log/messages 里头是否常常有类似底下的字眼:
      Oct 24 15:15:35 localhost syslogd 1.4.1: restart.
    这说明的是 syslogd 重新启动的时间啦 (就是因为 /etc/logrotate.d/syslog 的设定之缘故!) 底下我们来进行一些例题的练习,让您更详细的了解 logrotate 的功用啊!

    假设前提是这样的,前一小节当中,假设您已经建立了 /var/log/admin.log 这个档案, 现在,您想要将该档案加上 +a 这个隐藏标签,而且设定底下的相关信息:
    • 登录档轮替一个月进行一次;
    • 该登录档若大于 10MB 时,则主动进行轮替,不需要考虑一个月的期限;
    • 保存五个备份文件;
    • 备份文件不要压缩
    那你可以怎么样设定呢?呵呵~很简单啊!看看底下的动作吧!
    # 1. 先建立 +a 这个属性啊!
    [root@linux ~]# chattr +a /var/log/admin.log
    [root@linux ~]# lsattr /var/log/admin.log
    -----a------- /var/log/admin.log
    [root@linux ~]# mv /var/log/admin.log /var/log/admin.log.1
    mv: cannot move '/var/log/admin.log' to '/var/log/admin.log.1':permission deny
    
    # 2. 开始建立 logrotate 的配置文件,增加一个档案在 /etc/logrotate.d 内就对了!
    [root@linux ~]# vi /etc/logrotate.d/admin
    # This configuration is from VBird 2005/10/24
    /var/log/admin.log {
            monthly
            size=10M
            rotate 5
            nocompress
            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@linux ~]# 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 shared prerotate script, since no logs will be rotated
    .....(底下省略).....
    
    # 4. 测试一下强制 logrotate 与相关功能的信息显示:
    [root@linux ~]# 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
    running shared prerotate script
    rotating log /var/log/admin.log, log->rotateCount is 5
    ....(中间省略)....
    renaming /var/log/admin.log.0 to /var/log/admin.log.1 (rotatecount 5, logstart 1, i 0),
    old log /var/log/admin.log.0 does not exist
    log /var/log/admin.log.6 doesn't exist -- won't try to dispose of it
    renaming /var/log/admin.log to /var/log/admin.log.1
    running shared postrotate script
    
    [root@linux ~]# lsattr /var/log/admin.log*
    -----a------- /var/log/admin.log
    ------------- /var/log/admin.log.1
    
    看到了吗?透过这个方式,我们可以建立起属于自己的 logrotate 配置文件案, 很简便吧!尤其是要注意的, /etc/syslog.conf 与 /etc/logrotate.d/* 档案常常要搭配起来,例如刚刚我们提到的两个案例中所建立的 /var/log/admin.log 就是一个很好的例子~建立后,还要使用 logrotate 来轮替啊! ^_^

    大标题的图示分析登录档
    登录档的分析是很重要的!例如那个 last 可以让你知道到底谁登录进主机啦!但是并没有 pop3 这个收信协议的登录讯息!这个时候就需要考虑到 /var/log/secure 的纪录啦!无论如何,既然系统有给我们几个指令可以约略观察,那就来查一查吧! ^_^


    小标题的图示一些常见指令: last, lastlog, dmesg
    那就来谈一谈一些系统有的观察指令啊:

  • dmesg
  • [root@linux ~]# dmesg | more
    
    在指令列模式直接输入 dmesg 即可执行!由于系统在开机的过程当中尚未将硬盘 mount 上来,所以无法直接将数据直接给他读到 log file 当中去,但是为了除错上面的方便, 所以在开机的过程当中的讯息还是要记录下来,这个时候系统就将 ram 开了一个小区块来储存这个数据啰!这个启动记录的档案就是:『/proc/kmsg』啦!同时,预设的 RAM 的区块容量在不同的版本中并不相同,目前的预设版本是 16KB 的大小呦。

    基本上,几乎所有的核心信息都可以使用 dmesg 来查阅得到的,举例来说, 想要知道开机有没有捉到网络卡,用的就是『 dmesg | grep 'eth' 』之类的指令啊!

  • last
  • [root@linux ~]# last -n number 
    [root@linux ~]# last -f filename
    参数:
    -n  :我们知道 last 会读出这个月的数据,若数据量太大,可使用 -n 来严格要求
          所以显示的笔数即可。例如 20 笔数据: last -n 20 或 last -20 均可。
    -f  :last 预设读出 /var/log/wtmp 这个档案,但是我们可以透过 -f 读取不同的
          登录文件信息喔!
    范例:
    
    范例一:将上个月的资料读出,仅读出 5 笔资料时?
    [root@linux ~]# last -n 5 -f /var/log/wtmp.1
    dmtsai2  pts/2             Mon Oct 24 14:18 - 14:18  (00:00)
    dmtsai2  work:0 work       Mon Oct 24 14:18    gone - no logout
    dmtsai2  work:0 work       Mon Oct 24 14:18 - 14:18  (00:00)
    dmtsai2  pts/2             Mon Oct 24 14:18 - 14:18  (00:00)
    dmtsai2  work:0 work       Mon Oct 24 14:18 - 14:18  (00:00)
    
    够炫吧?!

  • lastlog
  • [root@linux ~]# lastlog
    Username  Port     From             Latest
    root      tty1                      Tue Aug 16 18:06:20 +0800 2005
    bin                                 **Never logged in**
    .....(中间省略).....
    dmtsai2   vbird-wo vbird-work       Mon Oct 24 14:18:49 +0800 2005
    
    说穿了, lastlog 只是读出 /var/log/lastlog 内的信息而已~ 他会显示目前系统上面的所有账号当中,每个账号最近一次登入的时间喔!

    小标题的图示鸟哥自己写的登录档分析工具:
    虽然有一些有用的系统指令,不过,要了解系统的状态,还是得要分析整个登录档才行~ 事实上,目前已经有相当多的登录档分析工具,例如 FC4 上面预设的 logwatch 这个套件所提供的分析工具, 他会每天分析一次登录档案,并且将数据以 email 的格式寄送给 root 呢! 你也可以直接到 logwatch 的官方网站上面看看: 如果是非 FC4 系列的其他 distributions ,可以查阅一下您自己的 distributions 所提供的分析工具, 如果没有,那么可以自行安装 logwatch 帮您分析啊~

    虽然已经有了这些工具,但是鸟哥自己想要分析的数据毕竟与对方不同~ 所以啰,鸟哥就自己写了一支小程序 (shell script 的语法) 用来分析自己的登录档, 这支程序分析的登录文件数据其实是固定的,包括有:
    • /var/log/secure
    • /var/log/messages
    • /var/log/maillog
    当然啦,还不只这些啦,包括各个主要常见的服务,如 pop3, mail, ftp, su 等会使用到 pam 的服务, 都可以透过鸟哥写的这个小程序来分析与处理呢~整个数据还会输出一些系统信息, 所以输出结果有点像底下这样:
    ##########################################################
    欢迎使用本程序来查验您的登录档
    本程序目前版本为: Version 0.1-1
    程序最后更新日期为: 2005-01-09
    若在您的系统中发现本程序有问题, 欢迎与我联络!
    鸟哥的首页 http://linux.vbird.org
    问题回报: http://phorum.vbird.org/viewtopic.php?t=3425
    ##########################################################
     
    =============== 系统汇整 =================================
    核心版本  : Linux version 2.6.12-1.1456_FC4 (bhcompile@tweety.build.redhat.com)
    CPU 信息  : Pentium III (Coppermine)
             : 997.519 MHz
    主机名  : localhost.localdomain
    统计日期  : 2005/October/24 00:10:02 ( Monday )
    分析的日期: Oct 23
    已开机期间: 26 days, 1:02,
    目前主机挂载的 partitions
          Filesystem            Size  Used Avail Use% Mounted on
          /dev/hda1             5.7G  3.3G  2.2G  61% /
          /dev/shm              189M     0  189M   0% /dev/shm
    
    
    ================= Ports 的相关分析信息 =======================
    主机启用的 port 与相关的 process owner:
    仅对本机界面开放的 ports (PID|owner|command)
          tcp 25|(root)|/usr/libexec/postfix/master
    对外部接口开放的 ports (PID|owner|command)
          tcp 22|(root)|/usr/sbin/sshd
          udp 68|(root)|/sbin/dhclient -1 -q -cf /etc/dhclient-eth1.conf -lf /var/l
    
    ================= SSH 的登录文件信息汇整 =======================
    一共成功登入的次数:         3
          账号       来源地址        次数
          dmtsai2    192.168.1.51      3
    
    以 su 转换成 root 的使用者及次数
          账号                       次数
          (uid=530)                   1
    
    
    ================= POP3 的登录文件信息汇整 ======================
    今日没有使用 POP3 的纪录
    
    
    ================= Postfix 的登录文件信息汇整 ===================
    使用者信箱受信次数:
    
    如果您有兴趣看看这支程序的话,欢迎下载: 安装的方法也很简单,只要将上述档按下载后,解压缩,就会得到一个名为 logfile 的目录, 将此目录移动到 /usr/local/virus 当中,修改一下: /usr/local/virus/logfile.sh 档案, 里面的 email 与相关的信息只要修改一下,您就可以使用啦~ 啊!还要记得,将这支程序的执行写入 /etc/crontab 当中喔! 可以在每天的 12:10am 执行这支小程序啦! ^_^

    2002/06/24:第一次完成
    2003/02/11:重新编排与加入 FAQ
    2005/10/12:旧的文章已经被移动到 此处
    2005/10/24:终于写完了~啊!怎么写这么久??
    2006/07/23:修改了 /etc/logrotate.d/syslog 的设定数据
     
         
    http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

    本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室