精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● Linux>>Linux之安全篇>>Linux服务器日志管理详解

主题:Linux服务器日志管理详解
发信人: r_hayes(Hayes)
整理人: skybird(2002-02-24 22:32:31), 站内信件
日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。  

  在Linux系统中,有三个主要的日志子系统:  

  连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。  

  进程统计--由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。  

  错误日志--由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。  

  常用的日志文件如下:  

    access-log   纪录HTTP/web的传输  
    acct/pacct   纪录用户命令  
    aculog     纪录MODEM的活动  
    btmp      纪录失败的纪录  
    lastlog     纪录最近几次成功登录的事件和最后一次不成功的登录  
    messages    从syslog中记录信息(有的链接到syslog文件)  
    sudolog     纪录使用sudo发出的命令  
    sulog      纪录使用su命令的使用  
    syslog     从syslog中记录信息(通常链接到messages文件)  
    utmp      纪录当前登录的每个用户  
    wtmp      一个用户每次登录进入和退出时间的永久纪录  
    xferlog     纪录FTP会话  

  utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键--保持用户登录进入和退出的纪录。有关当前登录用户的信息记录在文件utmp中;登录进入和退出纪录在文件wtmp中;最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在wtmp文件中。所有的纪录都包含时间戳。这些文件(lastlog通常不大)在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长,除非定期截取。许多系统以一天或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重新命名并循环使用wtmp文件。通常,wtmp在第一天结束后命名为wtmp.1;第二天后wtmp.1变为wtmp.2等等,直到wtmp.7。  

  每次有一个用户登录时,login程序在文件lastlog中察看用户的UID。如果找到了,则把用户上次登录、退出时间和主机名写到标准输出中,然后login程序在lastlog中纪录新的登录时间。在新的lastlog纪录写入后,utmp文件打开并插入用户的utmp纪录。该纪录一直用到用户登录退出时删除。utmp文件被各种命令文件使用,包括who、w、users和finger。  

  下一步,login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时,具有更新时间戳的同一utmp纪录附加到文件中。wtmp文件被程序last和ac使用。 
  
  具体命令  

  wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。  

  who:who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。例如:who(回车)显示  

  chyang    pts/0 Aug     18 15:06  
  ynguo     pts/2 Aug     18 15:32  
  ynguo     pts/3 Aug     18 13:55  
  lewis     pts/4 Aug     18 13:35  
  ynguo     pts/7 Aug     18 14:12  
  ylou     pts/8 Aug     18 14:15  

  如果指明了wtmp文件名,则who命令查询所有以前的纪录。命令who /var/log/wtmp将报告自从wtmp文件创建或删改以来的每一次登录。 
  
  w:w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如:w(回车)显示:3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27。  

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT 
chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash 
ynguo  pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05  w 
lewis  pts/3 202.38.64.233 1:55pm 30:39 0.27s 0.22s -bash 
lewis pts/4 202.38.64.233 1:35pm 6.00s 4.03s 0.01s sh /home/users/ 
ynguo pts/7 simba.nic.ustc.e 2:12pm 0.00s 0.47s 0.24s telnet mail 
ylou pts/8 202.38.64.235 2:15pm 1:09m 0.10s 0.04s -bash  

  users:users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数。例如:users(回车)显示:chyang lewis lewis ylou ynguo ynguo  

  last:last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。例如:  

  chyang pts/9  202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)  
  cfan  pts/6  202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)  
  chyang pts/4  202.38.68.242 Tue Aug 1 08:32 - 12:13 (03:40)  
  lewis pts/3   202.38.64.233 Tue Aug 1 08:06 - 11:09 (03:03)  
  lewis pts/2   202.38.64.233 Tue Aug 1 07:56 - 11:09 (03:12)  

  如果指明了用户,那么last只报告该用户的近期活动,例如:last ynguo(回车)显示: 
  
  ynguo  pts/4 simba.nic.ustc.e Fri Aug 4 16:50 - 08:20 (15:30)  
  ynguo  pts/4 simba.nic.ustc.e Thu Aug 3 23:55 - 04:40 (04:44)  
  ynguo  pts/11 simba.nic.ustc.e Thu Aug 3 20:45 - 22:02 (01:16)  
  ynguo  pts/0 simba.nic.ustc.e Thu Aug 3 03:17 - 05:42 (02:25)  
  ynguo  pts/0 simba.nic.ustc.e Wed Aug 2 01:04 - 03:16 1+02:12)  
  ynguo  pts/0 simba.nic.ustc.e Wed Aug 2 00:43 - 00:54 (00:11)  
  ynguo  pts/9 simba.nic.ustc.e Thu Aug 1 20:30 - 21:26 (00:55)  

  ac:ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连结的时间(小时),如果不使用标志,则报告总的时间。例如:ac(回车)显示:total 5177.47  

    ac -d(回车)显示每天的总的连结时间  
    Aug 12 total 261.87  
    Aug 13 total 351.39  
    Aug 14 total 396.09  
    Aug 15 total 462.63  
    Aug 16 total 270.45  
    Aug 17 total 104.29  
    Today total 179.02  
    ac -p (回车)显示每个用户的总的连接时间  
    ynguo 193.23  
    yucao 3.35  
    rong 133.40  
    hdai 10.52  
    zjzhu 52.87  
    zqzhou 13.14  
    liangliu 24.34  
    total 5178.24  

  lastlog:lastlog文件在每次有用户登录时被查询。可以使用lastlog命令来检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示\"**Never logged**。注意需要以root运行该命令,例如: 
  
  rong    5   202.38.64.187   Fri Aug 18 15:57:01 +0800 2000  
  dbb  **Never logged in**  
  xinchen **Never logged in**  
  pb9511   **Never logged in**  
  xchen   0  202.38.64.190 Sun Aug 13 10:01:22 +0800 2000  

  另外,可一加一些参数,例如,last -u 102将报告UID为102的用户;last -t 7表示限制上一周的报告。 

  进程统计  

  UNIX可以跟踪每个用户运行的每条命令,如果想知道昨晚弄乱了哪些重要的文件,进程统计子系统可以告诉你。它对还跟踪一个侵入者有帮助。与连接时间日志不同,进程统计子系统缺省不激活,它必须启动。在Linux系统中启动进程统计使用accton命令,必须用root身份来运行。Accton命令的形式accton file,file必须先存在。先使用touch命令来创建pacct文件:touch /var/log/pacct,然后运行accton: accton /var/log/pacct。一旦accton被激活,就可以使用lastcomm命令监测系统中任何时候执行的命令。若要关闭统计,可以使用不带任何参数的accton命令。  

  lastcomm命令报告以前执行的文件。不带参数时,lastcomm命令显示当前统计文件生命周期内纪录的所有命令的有关信息。包括命令名、用户、tty、命令花费的CPU时间和一个时间戳。如果系统有许多用户,输入则可能很长。下面的例子:  

  crond      F  root   ??   0.00 secs Sun Aug 20 00:16  
  promisc_check.s S  root   ??   0.04 secs Sun Aug 20 00:16  
  promisc_check    root   ??   0.01 secs Sun Aug 20 00:16  
  grep        root   ??   0.02 secs Sun Aug 20 00:16  
  tail        root   ??   0.01 secs Sun Aug 20 00:16  
  sh         root   ??   0.01 secs Sun Aug 20 00:15  
  ping      S  root   ??   0.01 secs Sun Aug 20 00:15  
  ping6.pl    F root   ??   0.01 secs Sun Aug 20 00:15  
  sh      root   ??   0.01 secs Sun Aug 20 00:15  
  ping      S  root   ??   0.02 secs Sun Aug 20 00:15  
  ping6.pl    F  root   ??   0.02 secs Sun Aug 20 00:15  
  sh         root   ??   0.02 secs Sun Aug 20 00:15  
  ping S  root   ??  0.00 secs Sun Aug 20 00:15  
  ping6.pl F  root   ??  0.01 secs Sun Aug 20 00:15  
  sh root   ??  0.01 secs Sun Aug 20 00:15  
  ping S  root   ??  0.01 secs Sun Aug 20 00:15  
  sh  root   ??  0.02 secs Sun Aug 20 00:15  
  ping S  root   ??  1.34 secs Sun Aug 20 00:15  
  locate  root   ttyp0  1.34 secs Sun Aug 20 00:15  
  accton S  root   ttyp0  0.00 secs Sun Aug 20 00:15  

  进程统计的一个问题是pacct文件可能增长的十分迅速。这时需要交互式的或经过cron机制运行sa命令来保持日志数据在系统控制内。sa命令报告、清理并维护进程统计文件。它能把/var/log/pacct中的信息压缩到摘要文件/var/log/savacct和/var/log/usracct中。这些摘要包含按命令名和用户名分类的系统统计数据。sa缺省情况下先读它们,然后读pacct文件,使报告能包含所有的可用信息。sa的输出有下面一些标记项: 

    avio--每次执行的平均I/O操作次数  
    cp--用户和系统时间总和,以分钟计  
    cpu--和cp一样  
    k--内核使用的平均CPU时间,以1k为单位  
    k*sec--CPU存储完整性,以1k-core秒  
    re--实时时间,以分钟计  
    s--系统时间,以分钟计  
    tio--I/O操作的总数  
    u--用户时间,以分钟计  
    例如:  
    842   173.26re    4.30cp 0avio 358k  
    2    10.98re     4.06cp 0avio 299k find  
    9    24.80re     0.05cp 0avio 291k ***other  
    105   30.44re     0.03cp 0avio 302k ping  
    104   30.55re     0.03cp 0avio 394k sh  
    162   0.11re      0.03cp 0avio 413k security.sh*  
    154   0.03re      0.02cp 0avio 273k ls  
    56    31.61re     0.02cp 0avio 823k ping6.pl*  
    2    3.23re      0.02cp 0avio 822k ping6.pl  
    35    0.02re      0.01cp 0avio 257k md5sum  
    97    0.02re      0.01cp 0avio 263k initlog  
    12 0.19re  0.01cp 0avio 399k promisc_check.s  
    15 0.09re  0.00cp 0avio 288k grep  
    11 0.08re  0.00cp 0avio 332k awk  

  用户还可以根据用户而不是命令来提供一个摘要报告。例如sa -m显示如下:  



----

                    灌灌 
                    灌灌 
                    灌灌 
                    灌灌          灌灌 
                    灌灌      灌灌灌 
    灌灌灌灌灌灌灌  灌灌  灌灌灌 
      灌灌灌灌灌灌灌灌灌灌灌灌 
                灌灌灌灌灌灌 
               灌灌灌灌灌灌灌  
              灌灌  灌灌  灌灌 
             灌灌   灌灌    灌灌 
            灌灌    灌灌      灌灌 
          灌灌      灌灌      灌灌灌 
          灌灌      灌灌        灌灌灌灌 
        灌灌        灌灌        灌灌灌灌灌 
      灌灌          灌灌          灌灌灌灌灌  
    灌灌            灌灌            灌灌 
                灌灌灌灌 
                  灌灌灌 
                    灌    

[关闭][返回]