一、rsyslog简介
Rsyslog的全称是 rocket-fast system for log ,可用于接受来自各种来源的输入,转换 它们,并将结果输出到不同的目的地。
它提供了高性能、强大的安全功能和模块化设计。虽然rsyslog最初是一个常规的系统日志,但它已经发展成为一种瑞士军刀式的日志记录,当应用有限处理时, RSYSLOG每秒可以向本地目的地发送超过一百万条消息。即使使用远程目的地和更 精细的处理,性能通常被认为是“惊人的”。
rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器, rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发 送到另外的远程服务器。rsyslog的另外一个用法,就是可以配置为客户端,用来过 滤和发送内部日志消息到本地文件夹(如/var/log)或一台可以路由到的远程rsyslog 服务器上。
在 CentOS 6.x 中,日志服务已经由 rsyslogd 取代了原先的 syslogd。Red Hat 公司 认为 syslogd 已经不能满足工作中的需求,rsyslogd 相比 syslogd 具有一些新的特点:
- 基于TCP网络协议传输日志信息。
- 更安全的网络传输方式。
- 有日志信息的即时分析框架。
- 后台数据库。
- 在配置文件中可以写简单的逻辑判断。
- 与syslog配置文件相兼容。
在centos7中,默认的日志系统是rsyslog,rsyslogd 日志服务更加先进,功能更多。但是,不论是该服务的使用,还是日志文件的格式,其实都是和 syslogd 服务相兼容的,所以学习起来基本和 syslogd 服务一 致。
默认安装的 ryslog 软件包提供的守护进程是 rsyslog,它是一项系统的基础服务。应该设置为开机运行,由systemd启动的。
# systemctl enable rsyslog
# systemctl start rsyslog
# ps aux | grep "rsyslog" | grep -v "grep"
root 18351 0.0 0.0 723116 23716 ? Ssl Jan06 7:35 /usr/sbin/rsyslogd -n
二、rsyslog 配置
守护进程rsyslog在启动时会读取其配置文件。管理隐患可以通过编辑/etc/rsyslog.conf、/etc/rsyslog.d/*.conf和/etc/sysconfig/rsyslog来配置rsyslog的行为。/etc/sysconfig/rsyslog文件用于配置守护进程的运行参数,/etc/rsyslog.conf是rsyslog的主配置文件。
rsyslog的配置文件/etc/rsyslog.conf的结构如下:
- 全局命令(Global dirctives):设置全局参数、如主消息尺寸、加载扩展模块等
- 模版(Templates):指定记录的消息格式,也用于动态文件名称生成
- 输出通道(Output chananels):对用户期望的消息输出进行预定义。
- 规则(Rules)【selector +action】:指定消息规则。在规则中可以引用之前的定义模版和输出通道
规则配置每一行的格式如下:
facility.priority action
设备.级别 动作
设备字段说明
字段 | 说明 |
---|---|
auth | pam产生的日志 |
authpriv | ssh,ftp等登录信息的验证信息 |
cron | 时间任务相关 |
ftp | FTP守护进程的信息 |
kern | 内核 |
lpr | 打印 |
邮件 | |
mark(syslog) | rsyslog服务内部的信息,时间标识 |
news | 新闻组 |
user | 用户程序产生的相关信息 |
uucp | unix to unix copy, unix主机之间相关的通讯 |
local 1~7 | 自定义的日志设备 |
级别字段说明
字段 | 说明 |
---|---|
ebug | 有调式信息的,日志信息最多 |
info | 一般信息的日志,最常用 |
notice | 最具有重要性的普通条件的信息 |
warning | 警告级别 |
err | 错误级别,阻止某个功能或者模块不能正常工作的信息 |
crit | 严重级别,阻止整个系统或者整个软件不能正常工作的信息 |
alert | 需要立刻修改的信息 |
emerg | 内核崩溃等严重信息 |
none | 什么都不记录 |
动作字段说明
字段 | 说明 |
---|---|
filename | 指定绝对路径的日志文件名来记录日志信息 |
:omusrmsg:users | 发送信息到指定的用户,users可以是用逗号分隔符的用户类别,* 表示所有用户 |
device | 将信息发送到指定设备中,如/dev/console |
named-pipe | 将日志记录到命令管道,用于日志调试非常方便 |
@hostname | 将信息发送可解析远程主机hostname或IP,该主机必须正在运行rsyslogd,并可以识别rsyslog的配置文件,使用upd:514端口传送日志信息 |
@@hostname | 将信息发送可解析远程主机hostname或IP,该主机必须正在运行rsyslogd,并可以识别rsyslog的配置文件,使用tcp:514端口传送日志信息 |
rsyslog.conf的说明如下所示:(关键配置)
# cat /etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # 提供本地系统日志支持(如通过logger命令)
$ModLoad imjournal # 提供对systemd journal的访问
#$ModLoad imklog # 提供内核日志支持(相当于systemed的systemd-journald.service)
#$ModLoad immark # 提供-MARK-消息功能
# 加载UPD模块,允许使用UDP的514端口接收采用UDP协议转发的日志
#$ModLoad imudp
#$UDPServerRun 514
# 加栽TCP摸块,允许使用TCP的514编口接收采用TCP协议转发的日志
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
# Use default timestamp format # 使用默认日志的时间戳格式
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# 文件同步功能。默认没有开启,是注释的
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/ # 包含/etc/rsyslog.d/目录下的配置文件
$IncludeConfig /etc/rsyslog.d/*.conf
# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on
# File to store the position in the journal
$IMJournalStateFile imjournal.state
#### RULES ####
# 将所有的内核消息记录到控制台
# Logging much else clutters up the screen.
#kern.* /dev/console
# 将info或更高级别的消息送到/var/log/messages,除了/mail/news/authpriv/cron之外
# 其中*是通配符,代表任何设备:none表示不对任何级别的消息进行记录
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 将authpirv设备的任何级别的信息记录到/var/log/secure中
authpriv.* /var/log/secure
# 将mail设备中的任何级别信息记录到/var/log/mailog文件中
mail.* -/var/log/maillog
# 将cron设备的任何级别的信息记录到/var/log/cron文件中
cron.* /var/log/cron
# 将任何设备的emerg级别或者更高的消息发送给所有正在系统上用户
*.emerg :omusrmsg:*
# 将uucp和news设备的crint级别或者更高级别消息记录到/var/log/spooler文件中
uucp,news.crit /var/log/spooler
# 将和本地系统启动相关的信息记录到/var/log/boot.log文件中
local7.* /var/log/boot.log
# ### begin forwarding rule ###
# 定义转发规到
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList # run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
其实系统已经非常完善地定义了这个配置文件的内容,系统中重要的日志也已经记录 得非常完备。如果是外来的服务,如 apache、Samba 等服务,那么这些服务的配 置文件中也详细定义了日志的记录格式和记录方法。所以,日志的配置文件基本上不 需要我们修改,我们要做的仅仅是查看和分析系统记录好的日志而已。
三、常见日志格式及文件
日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录 信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。这 些信息有些非常敏感,所以在 Linux 中这些日志文件只有 root 用户可以读取。 那么,系统日志文件保存在什么地方呢?还记得 /var/ 目录吗?它是用来保存系统动 态数据的目录,那么 /var/log/ 目录就是系统日志文件的保存位置。
日志文件 | 说明 |
---|---|
/var/log/cron | 记录与系统定时任务相关的日志 |
/var/log/cups/ | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信总。也可以使用dmesg命令直接查看内核自检信息 |
/var/log/btmp | 记录错误登陆的日志。这个文件是二进制文件,不能直接用vi查看,而要使用lastb命令查看。命令如下:lastb root |
/var/log/lastlog | 记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件不能直接用Vi查看。而要使用lastlog命令查看 |
/var/log/mailog | 记录邮件信息的日志 |
/var/log/messages | 它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为root,以及用户自定义安装软件的日志,也会在这里列出。 |
/var/log/secure | 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登陆、注销信息,同时记录系统的后动、重启、关机事件。同样,这个文件也是二进制文件不能直接用vi查看,而要使用w,who,users命令查看 |
除系统默认的日志之外,采用 RPM 包方式安装的系统服务也会默认把日志记录在 /var/log/ 目录中(源码包安装的服务日志存放在源码包指定的目录中)。不过这些 日志不是由 rsyslogd 服务来记录和管理的,而是各个服务使用自己的日志管理文档 来记录自身的日志。以下介绍的日志目录在你的 Linux 上不一定存在,只有安装了相应的服务,日志才会出现
日志文件 | 说明 |
---|---|
/var/log/httpd/ | RPM包安装的apache取务的默认日志目录 |
/var/log/mail/ | RPM包安装的邮件服务的额外日志因录 |
/var/log/samba/ | RPM包安装的Samba服务的日志目录 |
/var/log/sssd/ | 守护进程安全服务目录 |
四、Linux日志文件的格式分析
只要是由日志服务 rsyslogd 记录的日志文件,它们的格式就都是一样的。所以我们只要了解了日志文件的格式,就可以很轻松地看懂日志文件。
日志文件的格式包含以下 4 列:
-
事件产生的时间。
-
产生事件的服务器的主机名。
-
产生事件的服务名或程序名。
-
事件的具体信息。
我们查看一下 /var/log/secure 日志,这个日志中主要记录的是用户验证和授权方面的信息,更加容易理解。命令如下:
# vi /var/log/secure
# 3月9日 15:55:46 本地主机 sshd服务产生消息:接收从111.21.99.227主机的34352端口发起的ssh连接
Mar 9 15:55:46 localhost sshd[30834]: Invalid user vshnu from 111.21.99.227 port 34352
# 3月9日 15:55:46 本地主机 sshd服务产生消息:无效用户
Mar 9 15:55:46 localhost sshd[30834]: input_userauth_request: invalid user vshnu [preauth]
Mar 9 15:55:46 localhost sshd[30834]: pam_unix(sshd:auth): check pass; user unknown
Mar 9 15:55:46 localhost sshd[30834]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=111.21.99.227
# 3月9日 15:55:48 本地主机 sshd服务产生消息:来自111.2199.227端口34352 ssh2的无效用户vshnu的密码失败
Mar 9 15:55:48 localhost sshd[30834]: Failed password for invalid user vshnu from 111.21.99.227 port 34352 ssh2
Mar 9 15:55:48 localhost sshd[30834]: Received disconnect from 111.21.99.227 port 34352:11: Bye Bye [preauth]
Mar 9 15:55:48 localhost sshd[30834]: Disconnected from 111.21.99.227 port 34352 [preauth]
我截取了一段日志的内容,注释了其中的三句日志,剩余的日志大家可以看懂了吗?这就是典型的ssh密码暴力破解的日志,其实分析日志既是重要的系统维护工作,也是一项非常枯燥和烦琐的工作。如果我们的服务器出现了一些问题,比如系统不正常重启或关机、用户非正常登录、服务无法正常使用等,则都应该先查询日志。实际上,只要感觉到服务器不是很正常就应该查看日志,甚至在服务器没有什么问题时也要养成定时查看系统日志的习惯
评论区