Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116906
  • 博文数量: 38
  • 博客积分: 2111
  • 博客等级: 大尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-06 13:04
文章分类

全部博文(38)

文章存档

2012年(4)

2010年(34)

我的朋友

分类: LINUX

2010-06-16 18:03:42

日志文件由系统日志和内核日志监控程序syslogd与klogd控制,在/etc/syslog.conf文件中配置这两个监控程序默认活动。 
日志文件按/etc/syslog.conf配置文件中的描述进行组织。下图是/etc/syslog.conf文件的内容:

[root@localhost ~]# cat /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

                              /etc/syslog.conf文件


syslog.conf行的基本语法是

[消息类型][处理方案]

注意:中间的分隔符必须是Tab字符!

消息类型是由"消息来源"和"紧急程度"构成,中间用点号连接。例如上图中,news.crit表示来自news的“关键”状况。在这里,news是消息来源,crit代表关键状况。通配符*可以代表一切消息来源。

说明

第一条语句*.info,将info级以上(notice,warning,err,crit,alert与emerg)的所有消息发送到相应日志文件。


日志文件类别(按重要程度分类)

日志文件可以分成八大类,下面按重要性从大到下列出

emerg       emergency,紧急
alert       警报
crit        critical,关键
err            error,错误
warning      警告
notice       通知
info       信息
debug       调试


    简单列一下消息来源

    auth    认证系统,如login或su,即询问用户名和口令
    cron    系统执行定时任务时发出的信息
    daemon    某些系统的守护程序的 syslog,如由in.ftpd产生的log
    kern    内核的信息
    lpr     打印机的信息
    mail    处理邮件的守护进程发出的信息
    mark    定时发送消息的时标程序
    news    新闻组的守护进程的信息
    user    本地用户的应用程序的信息
    uucp    uucp子系统的信息
     *     表示所有可能的信息来源



    处理方案

    "处理方案"选项可以对日志进行处理。可以把它存入硬盘,转发到另一台机器或显示在管理员的终端上。

    处理方案一览

    文件名  写入某个文件,要注意绝对路径。

    @主机名 转发给另外一台主机的syslogd程序。

    @IP地址 同上,只是用IP地址标识而已。

    /dev/console 发送到本地机器屏幕上。

    * 发送到所有用户的终端上。

    |程序 通过管道转发给某个程序。

    例如

    kern.emerg

    /dev/console(一旦发生内核的紧急状况,立刻把信息显示在控制台上)

    说明

    如果想修改syslogd的记录文件,首先你必须杀掉syslogd进程,在修改完毕后再启动syslogd。攻击者进入系统后通常立刻修改系统日志,因此作为网管你应该用一台机器专门处理日志信息,其他机器的日志自动转发到它上面,这样日志信息一旦产生就立刻被转移,这样就可以正确记录攻击者的行为。


    将日志文件记录到远程主机

    如果有另一个Linux或UNIX系统,那么可以配置日志文件,让其把消息发到另外一个系统并记录下来。这也是为什么上面的所有日志文件都记录了主机名的原因。要实现这个功能,在该配置文件中,指定一个记录动作,后面接一个由“@”开头的远程系统的主机名,如下例:*.warn; authpriv.notice;auth.notice @bright.hacker.com.cn

    同时,还要将接受消息的目的系统设置为允许这种操作。此例主机bright.hacker.com.cn的syslogd守护进程要用-r参数启动。如果不使用-r参数,则目标主机的syslogd将丢弃这个消息以避免DoS攻击使硬盘塞满虚假消息。并且确保目标主机的 /etc/service文件必须设置syslog服务所使用的UDP端口514。如果syslogd守护进程用了-r和-h参数,那么,参数-h将允许转发消息。也就是说,如果系统B的syslogd用了-h 参数,这样,当系统A把消息转发到系统B后,系统B就把来自系统A和它自己的消息转发到系统C。

    将警告信息发送到控制台

    syslogd可以将任何从内核发出的重要程度为emerg或alert的信息发送到控制台。控制台是指虚拟控制台或启动时加-C参数的xterm。要实现这一功能,在/etc/syslog.conf文件中加上下面一行:kern.emerg /dev/console 。

    这样,当系统内核发生错误而发出消息时,用户能够马上知道并且进行处理。如果用了“*”,就是一旦内核发生错误,就将消息发送给所有在线用户,但只有这个用户正在登录的时候才能看到。修改了/etc/syslog.conf文件后,必须重新启动syslogd守护进程以使配置更改生效,请执行下面的命令:#/etc/rc.d/init.d/syslog restart。


    系统日志

    大多数日志位于/var/log目录中。日志通过标准cron任务logrotate维护,每周轮换日志文件。这样,/var/log/boot.log.1文件是上周的文件。

    下图是我的fedora core3 /var/log目录中的内容:


    [root@localhost var]# ls /var/log
    acpid            cups     maillog.1    scrollkeeper.log  vbox
    anaconda.log     dmesg    messages     secure            welcome.msg
    anaconda.syslog  gdm      messages.1   secure.1          wtmp
    boot.log         iiim     ppp          spooler           Xorg.0.log
    boot.log.1       lastlog  prelink.log  spooler.1         Xorg.0.log.old
    cron             mail     rpmpkgs      up2date
    cron.1           maillog  rpmpkgs.1    up2date.1

                                    /var/log目录中的内容



    /var/log中的系统日志

    下面看看/var/log目录中的系统日志。dmesg文件包括与Linux启动相关的基本引导信息。message文件包括计算机上启动Linux之后的其他处理消息。boot.log文件列出与监控程序启动和停止相关的消息。wtmp可以帮助监视登录。


    dmesg内容

    这个文件末尾还有一个关键项目:Linux是否正确装载了文件系统与交换空间。如果装载成功,则我的Fedoar core3可以看到如下消息:

    EXT3 FS on hda10, internal journal
    Adding 626524k swap on /dev/hda3.  Priority:-1 extents:1
    kjournald starting.  Commit interval 5 seconds

    表示Linux分区上成功地装载了带内部杂志的ext3文件系统。kjournal监控程序(kjournald)实际更新文件系统杂志。


    /var/log/messages消息

    /var/log/messages中记录了与硬件和服务相关联的其它消息。这个文件中每一行包括一些基本特征,如每个消息相关的日期,时间,主机名与服务。如果可能,还会列出用户名与进程标识符。



    分析/var/log/boot.log

    启动与停止服务和监控程序时,会在/var/log/boot.log中列出。下图显示此文件的内容:


    May 22 12:15:39 localhost syslog: syslogd startup succeeded
    May 22 12:15:39 localhost syslog: klogd startup succeeded
    May 22 12:15:39 localhost irqbalance: irqbalance startup succeeded
    May 22 12:15:40 localhost portmap: portmap startup succeeded
    May 22 12:15:40 localhost nfslock: rpc.statd startup succeeded
    May 22 12:15:37 localhost sysctl: net.ipv4.conf.default.rp_filter = 1
    May 22 12:15:37 localhost sysctl: net.ipv4.conf.default.accept_source_route = 0
    May 22 12:15:37 localhost sysctl: kernel.sysrq = 0
    May 22 12:15:40 localhost rpcidmapd: rpc.idmapd startup succeeded
    May 22 12:15:37 localhost sysctl: kernel.core_uses_pid = 1
    May 22 12:15:37 localhost network: Setting network parameters:  succeeded
    May 22 12:15:37 localhost network: Bringing up loopback interface:  succeeded
    May 22 12:15:40 localhost netfs: Mounting other filesystems:  succeeded
    May 22 12:15:41 localhost autofs: automount startup succeeded
    May 22 12:15:41 localhost mDNSResponder:  startup succeeded
    May 22 12:15:42 localhost smartd: smartd startup succeeded
    May 22 12:15:42 localhost acpid: acpid startup succeeded
    May 22 12:15:44 localhost cups: cupsd startup succeeded
    May 22 12:15:44 localhost sshd:  succeeded
    May 22 12:15:44 localhost xinetd: xinetd startup succeeded
    May 22 12:15:45 localhost sendmail: sendmail startup succeeded
    May 22 12:15:45 localhost sendmail: sm-client startup succeeded
    May 22 12:15:45 localhost gpm: gpm startup succeeded
    May 22 12:15:45 localhost iiim: htt startup succeeded
    May 22 12:15:46 localhost crond: crond startup succeeded
    May 22 12:15:47 localhost xfs: xfs startup succeeded
    May 22 12:15:47 localhost anacron: anacron startup succeeded
    May 22 12:15:47 localhost atd: atd startup succeeded
    May 22 12:15:47 localhost readahead: Starting background readahead:
    May 22 12:15:48 localhost rc: Starting readahead:  succeeded
    May 22 12:15:48 localhost messagebus: messagebus startup succeeded
    May 22 12:15:48 localhost cups-config-daemon: cups-config-daemon startup succeeded
    May 22 12:15:49 localhost haldaemon: haldaemon startup succeeded
    May 22 13:20:59 localhost cups: cupsd shutdown succeeded
    May 22 13:21:03 localhost cups: cupsd startup succeeded

                                   /var/log/boot.log文件       
    这是5月22日的消息。


    探测远程登录

    登录记录放在一个数据库文件/var/log/wtmp中。可以用utmpdump命令使这个文件变成可读格式。以下图为例,这是运行utmpdump /var/log/wtmp的部分输出。

    [5] [02879] [4   ] [        ] [            ] [2.6.9-1.667         ] [0.0.0.0     ] [Mon May 22 12:15:49 2006 CST]
    [6] [02909] [5   ] [LOGIN   ] [tty5        ] [                    ] [0.0.0.0     ] [Mon May 22 12:15:49 2006 CST]
    [5] [02909] [5   ] [        ] [            ] [2.6.9-1.667         ] [0.0.0.0     ] [Mon May 22 12:15:49 2006 CST]
    [5] [02920] [6   ] [        ] [            ] [2.6.9-1.667         ] [0.0.0.0     ] [Mon May 22 12:15:49 2006 CST]
    [6] [02920] [6   ] [LOGIN   ] [tty6        ] [                    ] [0.0.0.0     ] [Mon May 22 12:15:50 2006 CST]
    [5] [02921] [x   ] [        ] [            ] [2.6.9-1.667         ] [0.0.0.0     ] [Mon May 22 12:15:50 2006 CST]
    [7] [03397] [:0  ] [root    ] [:0          ] [                    ] [0.0.0.0     ] [Mon May 22 12:16:08 2006 CST]
    [7] [03630] [/0  ] [root    ] [pts/0       ] [:0.0                ] [0.0.0.0     ] [Mon May 22 12:26:34 2006 CST]
    [7] [03700] [/0  ] [root    ] [pts/0       ] [:0.0                ] [0.0.0.0     ] [Mon May 22 12:47:56 2006 CST]
    [7] [04458] [/0  ] [root    ] [pts/0       ] [:0.0                ] [0.0.0.0     ] [Mon May 22 13:55:24 2006 CST]

                                        检查登录活动           
    说明

    应该知道局域网的IP地址。如果在上图中出现一些未知的IP地址,那么要当心了,或许已经有人入侵我们的系统了。



    监控程序日志

    大多数Linux监控程度都在/var/log目录中配制日志文件,如crond,httpd与smbd。每个日志文件可以显示特定服务成功活失败。下图显示的是/var/log/cron文件的内容。

    [root@localhost log]# cat /var/log/cron
    May 22 13:23:29 localhost anacron[2721]: Job `cron.daily' terminated
    May 22 13:23:29 localhost anacron[2721]: Normal exit (1 jobs run)
    May 22 14:01:01 localhost crond[4482]: (root) CMD (run-parts /etc/cron.hourly)
    May 22 15:01:01 localhost crond[4536]: (root) CMD (run-parts /etc/cron.hourly)

                              /var/log/cron文件

    从图中可以看出执行cron任务的日期和时间。这是标准cron任务。尽管这里的时间与/etc/crontab中指定的不同,但这只表明这台Linux计算机没有在指定的时间运行。

    说明

    在Linux系统中增加更多监控程序时,/var/log目录中会出现更多日志文件。但是,日志文件也不一定放在/var/log目录中,这是由每个监控程序的配制文件确定的。



    其他日志

    在/var/log目录中还有几个其它日志文件。增加更多服务时,会出现更多日志文件。

    Linux的系统停止与重启动命令详解

    按照正确的过程来关闭Linux系统是很重要的。如果你没有这样做,你的文件系统很可能会变得毫无价值并且文件也会变得混乱。这是因为Linux有一个磁盘缓冲,它不会将数据立刻写入磁盘的,而是在一定的间隔时间。这极大地改进了性能,但也意味着如果你随意地关闭电源,此时缓冲中可能保存着许多数据并且磁盘上的数据会不完全而不能成为一个完整运行的文件系统(因为只有一些数据被写入硬盘)。

     
    不能仅仅扳动电源开关的另一个理由是,在一个多任务系统中,后台可能正运行着许多程序,随意地关闭电源损失会非常惨重的。通过进行适当的关机过程,你可以确信所有的后台进程都能保存它们的数据。
     
     

     
    以下详细介绍停止与重启动命令,它们分别为init,runlevel,telinit,halt,shutdown,reboot


    init
    init[option][runlevel]
     
    系统管理命令。
     
    选项
    -t seconds
        当运行级别改变时,在SIGTERM之后经过seconds秒发送SIGKILL。默认值为20。
    文件
    init是任意一台Unix机器在启动时都要执行的第一个进程。它验证所有文件系统的完整性,然后用fork和exec创建和执行其他进程,就像由/etc/inittab指定的那样。哪一个进程可以运行由/runlevel控制。所有结束的进程都被记录在/var/run/utmp/和/var/log/wtmp中。当运行级改变时,init给所有不能在新的运行级别上执行的进程发送SIGTERM信号,20秒后,发送SIGKILL信号。
     
    运行级别
    当前运行级别可以由telinit改变,telinit通常仅仅是到init的一个链接。默认的运行级别随发布版的不同而不同,但以下是标准级别:
    0 停止系统。
    1, s, S 单用户模式。
    6 重新启动系统。
    q,Q 重读/etc/inittab。
    可以在/etc/inittab文件中查出自己系统的运行级别。

     
    runlevel
     
    系统管理命令。显示以前和当前系统的运行级别。

     
    telinit
     
    telinit[option][runlevel]
     
    系统管理命令。发信号通知init改变系统的运行级别。init是所有进程的祖先,telinit实际上是到init的一个链接。
     
    选项
    -t seconds
    在发送SIGTERM信号seconds秒之后发送SIGKILL。默认值为20。运行级别
    默认的运行级别随发布版的不同而不同,但是,也有一些标准:
    0 停止系统。
    1 , s, S 单个用户。
    6 重新启动系统。
    a, b , c 仅仅处理在/etc/inittab中运行级别被标记为a,b或c的条目。
    q, Q 重读/etc/inittab文件。
    在/etc/inittab文件中查阅系统的运行级别。
     
    halt
     
    halt[options]
     
    系统管理命令。在文件/var/log/wtmp中插入一条记录日志。如果系统处于运行级别0或6,则停止所有进程;否则调用shutdown -nf。
     
    选项
    -d 禁止在/var/log/wtmp中写。
    -f 即使在shutdown -nf被正常调用时也调用halt(也就是说,即使不是运行级别0或6,也强制调用halt)。
    -n 禁止对sync的正常调用。
    -w 禁止正常执行,只把记录日志写到/var/log/wtmp中。


    shutdown[options]when[message]
     
    系统管理命令。终止所有进程。when可以是指定的时间(以hh:mm格式)、要等待的分钟数(以+m格式),或者now。一条广播消息通知所有用户离开系统。给进程发送SIGTERM信号,以让它们体面地退出。调用/etc/init执行是的关机,其操作之一是把系统置于运行级别1。只有特权用户才能执行shutdown命令。在默认或者有定义的情况下,广播消息在宽限期期间以规则的间隔进行广播,越临近关闭时间,消息的广播越频繁。
     
    选项
    -c 取消正在进行中的关闭操作。
    -f 快速重新启动,在重新启动时禁止对fsck的常规调用。
    -h 当关闭完成时停止系统。
    -k 输出警告信息,但禁止实际的关闭。
    -n 不调用init就执行关闭。
    -r 当关闭完成时重新启动系统。
    -t sec 在杀死进程与改变运行级别之间确保延时sec秒。
     
    例:
     
    # shutdown -h +10 'We will install a new disk. System should
    > be back on-line in three hours.' 
     
    这将警告所有用户系统将在十分钟后关闭,并且他们最好马上退出以防止数据的丢失。警告信息将显示在所有登录的用户的终端上。

     
    reboot
     
    reboot[options]
    系统管理命令,停止文件系统,关闭系统,然后重新启动系统。因为这条命令立即停止所有的进程,所以它应该只在单用户模式下运行。如果系统不在0级或6级上运行,reboot就调用shutdown -nf。
     
    选项
    -d 禁止写/var/log/wtmp。
    -f 即使要正常调用shutdown,也调用reboot。
    -n 禁止对sync的常规调用。
    -w 禁止正常执行;只是写/var/log/wtmp。
     
    uptime
    输出当前时间,联机操作的时间量、当前登陆的用户数(可以包括同一用户的多次登陆)以及系统负载平均值。这种输出也可以由w命令的第一行产生。

    说明

    SIGTERM信号,SIGKILL信号,sync,fsck
     
    有两个信号可以停止进程:SIGTERMSIGKILLSIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。
     
    对于SIGKILL信号,进程是不能忽略的。这是一个 “我不管您在做什么,立刻停止”的信号。假如您发送SIGKILL信号给进程,Linux就将进程停止在那里。
     
    有些人喜欢使用三次sync来关闭系统,等待磁盘I/O停止,然后关闭电源。如果没有程序运行着,那么这和使用shutdown是等同的。然而,这样做没有卸载任何文件系统并且可能会导致ext3fs的“干净文件系统”标志。三次使用sync来关闭系统的方法不值得推荐。
     
    Linux下grub的配置文件
    介绍Linux下GRUB的基本配置文件,所用数据与图表是取自于我的Fedora core3。还有些东西需要添加,待以后逐步改善。
     
    GRUB(统一引导装入器)是基本的Linux引导装入器。
    其有四个作用,如下:
     
    1.选择操作系统(如果计算机上安装了多个操作系统)。
    2.表示相应引导文件所在的分区。
    3.找到内核。
    4.运行初始内存盘,设置内核与相关模块。
     
    GRUB的配置文件是/boot/grub/grub.conf
     
    /boot/grub/grub.conf中典型的GRUB配置文件,如下图
     
    [root@localhost ~]# cat /boot/grub/grub.conf
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You do not have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /, eg.
    #          root (hd0,9)
    #          kernel /boot/vmlinuz-version ro root=/dev/hda10
    #          initrd /boot/initrd-version.img
    #boot=/dev/hda
    default=1
    timeout=30
    splashimage=(hd0,9)/boot/grub/splash.xpm.gz
    hiddenmenu
    title Fedora Core (2.6.9-1.667)
            root (hd0,9)
            kernel /boot/vmlinuz-2.6.9-1.667 ro root=LABEL=/ rhgb quiet
            initrd /boot/initrd-2.6.9-1.667.img
    title Other
            rootnoverify (hd0,0)
            chainloader +1
     

     
    对上图中GRUB的变量进行说明如下
     
    变量               说明
    #:             对菜单配置文件进行注释。
    default:       指定默认操作系统。如果为0,则没有用户输入时,自动启动第一段中显示的操作系统。
    timeout:       设置GRUB启动默认之前的时间极限(秒数)。在上图中为30秒。
    splashimage:   指定默认GRUB引导时所使用的背景图像的位置。
    hiddenmenu:    这个命令被使用时,它不显示GRUB菜单接口,在超时时间过期后载入默认项。用户通过按[Esc]键,可以看到标准的GRUB菜单。可以在其前加#或者删除来达到显示菜单借口的目的。
    title:         设置GRUB菜单中显示的选项。一个是显示Fedora Core (2.6.9-1.667),一个  为Other,也即我使用的Windows XP。
    kernel:        指定Linux内核地址。
    initrd:        指定初始内存盘地址。
    rootnoverify:  对Windows XP之类的敏感操作系统指定引导文件所在分区。
    chainloader:   +1表示对指定分区中第一个扇区寻找引导文件。
     
    说明1:password变量未被列出,是因为我在安装系统时,未选择引导装载口令。这个变量被使用时,它可以防止不知道口令的用户编辑菜单的项目。
     
    在GRUB中增加口令的办法使用grub-md5-crypt命令,在提示下输入所要口令。可以看到一系列奇怪的字符,可以将其复制到配置文件中。很容易从命令行复制这个口令,只要用鼠标加亮选择口令,在文本编辑器中打开/etc/grub.conf,在所要位置右单击鼠标,然后Linux即会自动插入加亮的MD5口令。
     
    说明2为了方便起见,/etc/grub.conf链接实际引导装入器的配置文件/boot/grub/grub.conf。
     
    还有一些其它的GRUB变量未被列出,如果要查询更详细的信息,可以参考如下:
     
    可以在系统里使用man grub或者info grub命令。
     
    以下是一些关于grub的站点
     
    - GNU GRUB 项目的主页。这个站点包含了GRUB发展状态的信息以及一个FAQ。
     
    - 在这个项目被脱管到自由软件基金会进一步发展前的最初的GRUB文档。
     
    - 研究GRUB各种不同的用法,包括引导非Linux操作系统。
     
    - 一篇介绍性的文章,讨论在一个系统上GRUB配置,包括GRUB命令行选项的概述。
     
     

     

     

     

    阅读(2278) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~