linux日志管理

Linux日志管理

Syslog是一种工业标准协议,可用于记录设备的日志。这些日志记录了系统中发生的大大小小的事情。因此,它对于系统的安全性非常重要。它会将一些系统信息记录到登陆文件中,常见的登陆文件有以下几种:

l  /var/log/secure:记录登陆系统访问的数据文件,例如pop3,ssh,telnet,ftp等。

l  /var/log/wtmp:记录登陆者的信息数据,这是个data类型的文件,需要使用last命令查看。

l  /var/log/messages:这个文件非常重要,只要是系统错误信息都会记录在这个文件中。

l  /var/log/boot.log:记录开机或一些服务启动时所显示的启动或关闭信息。

l  /var/log/maillog:记录邮件访问或往来的用户记录

l  /var/log/cron:记录crontab例行性服务的内容

l  /var/log/httpd,/var/log/news,/var/log/mysqld.log,/var/log/samba,/var/log/procmail.log:分别是几个网络服务的记录文件。

 

登陆文件的记录

在新版本的linux中,使用了rsyslog来取代原来的syslog。与rsyslog有关的两个重要文件为:/etc/init.d/rsyslog(守护进程)和/etc/rsyslog.conf(配置文件)

通过使用rsyslog.conf文件,可以对生成的日志的位置以及相关信息进行灵活的配置。该配置文件格式如下:

服务名称[.=!]信息等级   信息记录的文件名或设备或主机

 

1)服务名称

服务名称表示什么服务产生的信息。

Kern : 内核

User : 用户程序

Damon : 系统守护进程

Mail : 电子邮件系统

Auth : 与安全权限相关的命令

Lpr : 打印机

News : 新闻组信息

Uucp : Uucp程序

Cron : 与例行性命令cron/at有关的信息

Wtmp : 用户每次登陆进入和推出的永久记录

Authpriv : 授权信息

 

2)连接符号[.=!]

(.):表示“比后面还要高的等级(含该等级)都记录下来”。

(.=):表示所需要的等级就是等号后面的等级,其它的不要

(.!):表示不等于,即除了该等级之外的其它等级都需要记录下来

 

3)信息等级(从低到高)

None : 不记录任何日志信息

Debug : 调试级信息

Info : 一般性信息

Notice : 出现不寻常的事情

Warning : 警告信息

Err : 重大错误信息

Crit : 临界信息

Alert : 紧急信息

Emerg : 最高的紧急状态。

 

4)信息记录的文件名或设备或主机

文件的绝对路径:通常是放在/var/log里的文件

打印机或其它:例如/dev/lp0打印机准备

用户名称:显示给用户

远程主机:例如@192.168.1.100

(*) : 表示“当前在线的所有人”,类似wall命令的意义

 

例如:mail.info          /var/log/maillog

表示要将mail服务相关的,等级大于等于info之上的信息,都记录到/var/log/maillog文件中。

 

登陆文件的轮换

登陆文件在时间长了以后会变得过于庞大,这样一方面占用系统资源,另一方面也不利于我们查看。为了解决这个问题,linux中引入了登陆文件的轮换机制:logrotate。注意,rsyslog是使用守护进程的方式来启动,但是logrotate却是在规定的时间到来之后才进行登陆文件的替换,所以logrotate是挂在cron下面进行的。/etc/cron.daily/logrotate记录了每天要进行的登陆文件替换行为。

与logrotate有关的两个文件为:/etc/logrotate.conf(配置文件)h和logrotate.d(一个存放需要替换的服务的目录)

Logrotate的主要功能是将旧的登陆文件重命名,然后重新建立一个新的空文件来记录。

例如:

messages.log是原来的登陆文件,当达到替换条件时,系统会把它命名为messages.log.1,并创建一个新的messages.log空文件,当再次达到替换条件时,系统会将messages.log.1重命名为messages.log.2,messages.log重命名为messages.log.1,同时再创建一个空的messages.log文件,以此类推。

但是保留的登陆文件有一个数量限制,如果超过了这个限制,多余的文件就会删除。

 

/etc/logrotate.conf的格式如下:

 


其中weekly表示每周对登陆文件进行一次替换,rotate 4表示保留4个登陆文件,create表示是否建立新的登陆文件来记录,compress表示是否要压缩轮替之后的登陆文件,如果不需要压缩,就是用uncompress,include /etc/logrotate.d表示把该目录内的文件都读进来进行轮替工作。

注意:这几个都是默认值,表示如果logrotate.d目录下的文件如果没有设置自己的参数,就会以这几个参数为准。

 

下面的/var/log/wtmp和/var/log/btmp这两段的格式和/etc/logrotate.d目录下的文件格式是一致的,表示对这些登陆文件进行替换的设置。

如/var/log/wtmp这个登陆文件的设置是,每个月对其进行一次替换,将文件的权限设置为644,拥有者为root,群组为utmp,且仅保留一个轮替备份。

 

为了防止认为修改这些登陆文件(有些黑客为了销毁证据,所以删除或者认为修改这些登陆文件),可以使用隐藏属性+a,来使其只能增加,不能修改。但是这里又会遇到一个问题,那就是如果设置了+a属性,那么当发生轮替时,登陆文件是无法重命名的。没关系,还有别的方法。正确的logrotate的文件写法为:

l  将要处理的登陆文件名写在前面,可以使用空格符分隔多个登陆文件。

l  用{}包括所有的设置

在设置中,可以在轮替前和轮替后执行一些特殊的指令,这个需要与sharedscripts和endscript来配合使用:

pretotate : 在启动logrotate之前执行的指令

postrotate :做完logrotate只有启动的指令。

 

为了解决上面提到的问题,我们可以这样写一个logrotate文件,例如:

/var/log/admin.log{

   monthly

   size=10M #表示登陆文件若大于10MB,则主动轮替,不需要考虑一个月期限

   rotate 5

   nocompress

   sharedscripts

      prerotate

            /usr/bin/chattr –a /var/log/admin.log#在轮替前先取消隐藏属性,使起可以修改

   endscript

   sharedscripts

      postrotate

           /usr/bin/killall –HUP rsyslogd

           /usr/bin/chattr +a/var/log/admin.log#在轮替完成后重新加上+a隐藏属性

   endscript

}

注意:/etc/rsyslog.conf与/etc/logrotate.d/*文件常常搭配使用,/etc/logrotate.d目录中的文件在/etc/rsyslog.conf中都有定义

 

 

 

 

 

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值