Linux服务器的日志管理
1.简介
从安全角度来说,Linux服务器的日志非常重要,它记录了系统每天所发生的各种各样的事情,如果服务器受到攻击,就可以通过它来进行分析。同时,它更是很重要的排障依据,可以通过它来检查错误发生的原因,所以我们必须了解和熟悉的运行机制。
2.日志服务升级
Linux在前面采用的是syslog作为日志收集服务器,由于syslog收集日志性能较低,目前大多数Linux版本都采用rsyslog来代替syslog收集日志。
3.系统日志配置详解
rsyslog与syslog配置文件有相类似的地方,rsyslog服务的配置文件默认在/etc/rsyslog.conf,配置rsyslog时有必要先了解rsyslog.conf的格式。
3.1. 配置文件规范
理解并完善一个rsyslog的配置,对系统管理员来说尤为重要。/etc/rsyslog.conf根据如下的格式定义规则:
语法格式 | 语法解释 |
facility.level action | 设备.优先级 处理方案 |
facility-1,facility-2.level action | 设备-1,设备-2.优先级 处理方案 |
facility.level 字段也称为seletor(选择条件),选择条件和处理方案之间用空格或者tab分隔,多个facility选择条件使用“,”分开表示。facility定义了日志消息的范围,其可以使用的key如下所示。
KEY |
Explain |
auth |
由pam_pwdb报告的认证活动。 |
authpriv |
包括特权信息,如用户名在内的认证活动 |
cron |
与cron和at有关的计划任务信息 |
daemon |
与inetd守护进程有关的后台进程信息。 |
kern |
内核信息,首先通过klogd传递 |
lpr |
与打印服务器有关的信息 |
mail |
与电子邮件有关的信息 |
mark |
syslog的内部功能,用于生成时间戳 |
nems |
来自新闻服务器的信息 |
syslog |
由syslog生成的信息 |
user |
由用户程序生成的信息 |
uucp |
有uucp生成的信息 |
local0~local7 |
与自定义程序一起使用 |
level定义了消息的紧急程度。按严重程度由高到低顺序排列如下:
level |
Explain |
emerg |
该系统不可用,等同于panic |
alert |
需要被立即修改的条件 |
crit |
危险情况 |
err |
错误消息,等同于error |
warning |
预警信息,等同于warn |
notice |
具有重要性的普通文件 |
info |
提供信息的消息 |
debug |
不包含函数条件或问题的其他信息 |
none |
没有重要级,通常用于排错 |
通过小数点“.”把facility和level连接在一起称为selector(选择条件)可以使用分号“,”同时定义多个选择条件。也支持如下三个修饰符:
:标识所有日志信息
=:等于,即仅包含本优先级别的日志信息
!:不等于,本优先级日志信息除外
有前面的选择条件定义的日志信息,可执行下面的动作:
file:指定日志文件的绝对路径。
terminal或者print:发送到串行或并行设备的标识符,例如/dev/ttyS2 @host表示远程的日志服务器。
username:发送信息到本机的指定用户信息窗口中,但该用于必须已经登录系统。
named pipe:发送到预先使用mkfifo命令创建的FIFO文件的绝对路径中。
4.日志归档
日志滚动服务:所有的日志文件都会随着时间的推移和访问次数的增加而迅速增长,因此必须对日志文件进行定期清理,以免造成磁盘空间的不必要的浪费,同时也加快了管理员查看日志所用的时间。因而logrotate就非常有存在的必要了,Redhat系统默然安装logrotate,利用 logrotate设置了相关对rsyslog日志迅速增长的设置。logrotate的执行由crond服务实现。在/etc/cron.daily目录中,有个logrotate,是个shellscript,用来启动logrotate。
logrotate程序每天由cron在指定的时间(/etc/crontab)启动。
参考关系图
4.1. Logrotate配置文件
#cat/etc/logroate.conf
weekly #每周清理一次日志文件
rotate 4 #保存四个轮换日志
create #清除旧日志的同时,创建新的空日志文件
dateext #使用日期为后缀的回滚文件 #可以去/var/log目录下看看
include/etc/logrotate.d #包含/etc/logrotate.d目录下的所有配置文件
/var/log/wtmp{ #对/var/log/wtmp这个日志文件按照下面的设定日志回滚
monthly #每月轮转一次
create 0664 rootutmp #设置wtmp这个日志文件的权限,属主,属组
minsize 1M #日志文件必须大于1M才会去轮换(回滚)
rotate 1 #保存一个轮换日志
}
/var/log/btmp {
missingok #如果文件丢失不报错
monthly
create 0600 rootutmp
rotate 1
}
#cat /etc/logrotate.d/syslog
/var/log/cron #这些文件是rsyslog.conf文件中全局配置定义中指定的Target的路径
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate # 轮换之后重启rsyslog服务
/bin/kill -HUP`cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
修改配置文件之后,重启服务生效。