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中都有定义