您的位置:首页 > 运维架构

运维日记017 -- RHEL6之系统日志的管理

2016-10-29 11:04 330 查看

运维日记017 – RHEL6之系统日志的管理

Linux下的日志记录了系统每天发生的各种各样的事情,可以通过它来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。RHEL6下的日志文件存放在/var/log目录下,下面举几个常见日志的例子:

/var/log/dmesg

核心启动日志。这个日志文件记录了内核启动时候输出的信息。

/var/log/messages

系统报错日志。

/var/log/maillog

邮件系统日志。

/var/log/secure

安全信息、认证登录和与xinetd有关的日志。

/var/log/cron

计划任务执行成功与否的日志。

/var/log/wtmp

记录所有的登录和登出。可以用
last
命令查看所有登录过系统的用户和IP。

/var/log/btmp

记录错误的登录尝试。可以用
lastb
命令查看。注意,这个文件如何突然快速增大,可能有人试图暴力破解用户密码。

/var/log/lastlog

记录每个用户的最后登录信息。

动态跟踪日志文件:tailf命令

RHEL6下有一个tailf命令非常适合用于监控日志文件的变化(follow the growth of a log file)。这条命令类似于
tail -f
,严格说来应该与`tail –follow=name`更相似些。与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件(It is similar to tail -f but does not access the file when it is not growing. This has the side effect of not updating the access time for the file, so a filesystem flush does not occur periodically when no log activity is happening.)。所以tailf特别适合那些便携机上跟踪日志文件,因为它能省电,因为减少了磁盘访问(tailf is extremely useful for monitoring log files on a laptop when logging is infrequent and the user desires that the hard disk spin down to conserve battery life.)。

下面举一个tailf监控日志的例子。

# tailf /var/log/secure
... ...
Oct 29 08:31:05 wjm sshd[1160]: Accepted password for wjm from 192.168.1.105 port 43841 ssh2
Oct 29 08:31:05 wjm sshd[1160]: pam_unix(sshd:session): session opened for user wjm by (uid=0)
... ...


这时,屏幕显示的末尾就是系统输出的最新的日志信息。此时你可以通过ssh远程登录一下该主机,可以看到屏幕上又会输出一条类似下面这样的日志信息:

Oct 29 08:31:05 wjm sshd[1160]: Accepted password for wjm from 192.168.1.105 port 43841 ssh2
Oct 29 08:31:05 wjm sshd[1160]: pam_unix(sshd:session): session opened for user wjm by (uid=0)


RHEL6下有一个logger命令,可以直接向系统日志中写入信息。例如:

# logger 'hello, this is a piece of faked log message.'

# tailf /var/log/messge
... ...
Oct 29 08:48:07 root root: hello, this is a piece of faked log message.


日志的分类和分级

Linux下的日志采用先分类,然后在每个类别下分级的管理模式。

主要的七种日志分类:

名称含义
authpriv安全认证相关
cronat和cron定时任务相关
deamon定时任务相关
kern内核产生
lpr打印系统产生
mail邮件系统产生
syslog日志服务本身
除上面列出的七类常见日志以外,还有news(新闻系统相关)、uucp(unix to unix copy)等日志类型(目前已经不太常用)。

另外,还有local0~lobal7这八个日志类型,是系统保留的,可以供其他程序使用或者用户自定义使用。

八种日志级别(按照由低到高顺序排列):

级别含义
debug排错信息
info正常信息
notice稍微要注意的
warn警告
err(error)错误
crit(critical)关键的错误
alert警报警惕
emerg(emergence)紧急突发事件

日志的总管家:rsyslog

在RHEL6中日志由系统服务rsyslog进行管理和控制。最小化安装RHEL6后,rsyslog服务默认是开启的。

# chkconfig --list | grep rsyslog
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off


该服务的配置文件位于/etc/rsyslog.conf,下面对该配置文件进行简单描述。

# vi /etc/rsyslog.conf
... ...
#### MODULES ####

$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
... ...


这一节设置rsyslog服务加载的模块。其中#号表示注释。其中比较重要的是
#$ModLoad imudp
#$UDPServerRun 514
两行,取消掉该行注释后,表示允许514端口接收使用UDP协议转发过来的日志。这样可以把本主机配置为集中式的日志服务器,它接收并存储其它主机的日志,提高了整个系统的安全性。
#$ModLoad imtcp
#$InputTCPServerRun 514
功能相同,只不过采用的是TCP协议。

... ...
#### RULES ####

*.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
... ...


这一节定义了不同类型和级别的日志应存放在哪里。例如,
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
表示除了mail日志、authpriv日志和cron日志之外,其它的所有类型info级别及以上的日志都存放在/var/log/messages下。下面简要给出rsyslog.conf的日志记录规则:

. 代表该类型比后面还要高的等级(包括该等级)的日志都要被记录下来,其中.前面为日志类型,.后面为日志等级。例如:mail.info表示凡是mail类型的且等级大于或等于info级别的日志都记录下来。

.= 代表等于该等级的日志都要被记录下来。

.! 代表不等于该等级的日志都要被记录下来。

.none 该类型的日志都不做记录。

* 表示任意类型或者级别

而日志记录的位置有三种类型:

本地日志文件。通常就是/var/log目录下。

远程日志服务器。

直接弹出在屏幕上。类似与wall命令。

mail.*                                                  -/var/log/maillog


rsyslog.conf配置文件中上面这行/var/log/maillog前面的-是什么意思呢?

这里的-代表每当有新日志产生时,rsyslog会先写入缓存,而不是立即更新日志文件,只有当缓存写满时才会批量更新日志文件。这样可以减少写文件的次数。通常日志信息较多而且不是特别重要时,可以采用这种策略。

实战一:自定义sshd日志类型及日志文件

系统将sshd产生的日志定义为authpriv类型的,保存在/var/log/secure下。请自定义sshd的日志类型为local0,并保存在/var/log/sshdlog文件。

修改sshd配置文件

# vi /etc/ssh/sshd_config

... ...
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#SyslogFacility AUTHPRIV
SyslogFacility local0
... ...


重启sshd服务

# service sshd restart


修改rsyslog配置文件

# vi /etc/rsyslog.conf

... ...
local0.*                                                /var/log/sshd.log
... ...


重启rsyslog服务

# service sshd restart


测试

# ssh root@192.168.1.111
# tailf /var/log/sshd.log


实战二:配置一个简单的远程日志服务器

1、启动两台RHEL6虚拟机,其中一台主机ip地址为192.168.1.111,将其设置为日志服务器。另一台ip地址192.168.1.112,设置为客户端用于测试日志服务器是否正确配置。

2、配置日志服务器主机的/etc/rsyslog.conf文件,并重启rsyslog服务。

# vi /etc/rsyslog.conf
... ...
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
... ...

# service rsyslog restart


3、配置客户端主机的/etc/rsyslog.conf文件,定义其日志向日志服务器发送,然后重启rsyslog服务。

# vi /etc/rsyslog.conf
... ...
#### RULES ####
... ...
*.info          @192.168.1.111
... ...

# service rsyslog restart


4、配置日志服务器主机的防火墙,使其可以接收客户端发来的日志信息。简单起见,这里直接关闭了日志服务器主机的防火墙。

# iptalbes -F


5、客户端主机用logger命令产生一条日志,用tailf观察一下日志服务器的日志变化。

# tailf /var/log/messages

# logger "this message is from 192.168.1.112"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  运维 rhel linux