如何在 RHEL 7 中管理系统日志(配置、轮换和导入数据库) - 第 5 部分
为了保证RHEL 7系统的安全,您需要知道如何通过检查日志文件来监控此类系统上发生的所有活动。这样,您将能够检测到任何异常或潜在的恶意活动并执行系统故障排除或采取其他适当的措施。
在RHEL 7中,rsyslogd 守护程序负责系统日志记录并从/etc/rsyslog.conf(此文件指定所有系统日志的默认位置)和/etc/rsyslog.d内的文件(如果有)读取其配置。
Rsyslogd 配置
快速检查一下 rsyslog.conf 会很有帮助。此文件分为 3 个主要部分:模块(因为 rsyslog 遵循模块化设计)、全局指令(用于设置 rsyslogd 守护进程的全局属性)和规则。您可能已经猜到了,最后一部分指示记录或显示的内容(也称为选择器)以及位置,这将是我们在本文中关注的重点。
rsyslog.conf中的典型行如下:
在上图中,我们可以看到选择器由一对或多对用分号分隔的Facility:Priority组成,其中 Facility 描述消息的类型(请参阅RFC 3164 中的第 4.1.1 节以查看 rsyslog 可用的设施的完整列表)和 Priority 表示其严重性,可以是以下不言自明的词之一:
- 调试
- 信息
- 注意
- 警告
- 犯错
- 暴击
- 警报
- 新兴
虽然关键字none本身并不是优先级,但它意味着给定设施根本没有优先级。
注意:给定优先级表示应记录该优先级及以上的所有消息。因此,上例中的行指示rsyslogd守护进程将优先级为 info 或更高的所有消息(无论设施如何)记录到/var/log/messages中,但属于mail、authpriv和cron服务的消息除外(不会考虑来自这些设施的消息)。
您还可以使用冒号对多个设施进行分组,以便对所有设施应用相同的优先级。因此,以下行:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
可以改写为
*.info;mail,authpriv,cron.none /var/log/messages
换句话说,将mail、authpriv和cron设施分组,并将关键字none应用于这三个设施。
创建自定义日志文件
要将所有守护进程消息记录到/var/log/example.log ,我们需要在rsyslog.conf或/etc/rsyslog.d内的单独文件(更易于管理)中添加以下行:
daemon.* /var/log/example.log
让我们重新启动守护进程(请注意,服务名称不以d结尾):
# systemctl restart rsyslog
并检查重新启动两个随机守护进程之前和之后我们的自定义日志的内容:
作为一项自学练习,我建议您尝试各种设施和优先级,并将其他消息记录到现有日志文件中,或者像前面的示例一样创建新的日志文件。
使用 Logrotate 旋转日志
为了防止日志文件无休止地增长,可以使用logrotate实用程序来轮换、压缩、删除和交替邮寄日志,从而简化生成大量日志文件的系统的管理。
建议阅读: 如何在 Linux 中使用 Logrotate 设置和管理日志轮换
Logrotate每天作为cron作业 ( /etc/cron.daily/logrotate )运行,并从/etc/logrotate.conf和位于/etc/logrotate.d的文件(如果有)中读取其配置。
与rsyslog的情况一样,即使您可以在主文件中包含特定服务的设置,为每个服务创建单独的配置文件也将有助于更好地组织您的设置。
让我们看一个典型的logrotate.conf:
在上面的例子中,logrotate将对/var/loh/wtmp执行以下操作:尝试每月仅轮换一次,但前提是文件大小至少为1 MB,然后创建一个全新的日志文件,权限设置为0664,所有权授予用户 root 和组utmp。接下来,仅保留一个存档日志,如 rotate 指令所指定:
现在让我们考虑/etc/logrotate.d/httpd中的另一个示例:
您可以在logrotate的手册页(man logrotate 和 man logrotate.conf)中阅读有关其设置的更多信息。本文随附了这两个文件的 PDF 格式,以方便您阅读。
作为系统工程师,日志的存储时间和存储格式完全取决于您是否将/var放在单独的分区/逻辑卷中。否则,您确实需要考虑删除旧日志以节省存储空间。另一方面,根据公司或客户的内部政策,您可能被迫保留多个日志以供将来的安全审计。
保存日志到数据库
当然,检查日志(即使借助grep和正则表达式等工具)也可能成为一项相当繁琐的任务。因此,rsyslog允许我们将它们导出到数据库(OTB支持的 RDBMS 包括 MySQL、MariaDB、PostgreSQL 和 Oracle)。
本教程的此部分假设您已经在管理日志的同一个 RHEL 7 框中安装了MariaDB服务器和客户端:
# yum update && yum install mariadb mariadb-server mariadb-client rsyslog-mysql # systemctl enable mariadb && systemctl start mariadb
然后使用该mysql_secure_installation
实用程序设置 root 用户的密码及其他安全注意事项:
注意:如果您不想使用MariaDB根用户将日志消息插入数据库,您可以配置另一个用户帐户来执行此操作。解释如何执行此操作超出了本教程的范围,但在MariaDB 知识库中有详细说明。在本教程中,我们将使用根帐户以简化操作。
接下来,从GitHub下载createDB.sql脚本并将其导入到您的数据库服务器中:
# mysql -u root -p < createDB.sql
最后,将以下行添加到/etc/rsyslog.conf:
$ModLoad ommysql $ActionOmmysqlServerPort 3306 *.* :ommysql:localhost,Syslog,root,YourPasswordHere
重新启动rsyslog和数据库服务器:
# systemctl restart rsyslog # systemctl restart mariadb
使用 SQL 语法查询日志
现在执行一些将修改日志的任务(例如,停止和启动服务),然后登录到您的数据库服务器并使用标准 SQL 命令在日志中显示和搜索:
USE Syslog; SELECT ReceivedAt, Message FROM SystemEvents;
概括
在本文中,我们解释了如何设置系统日志记录、如何轮换日志以及如何将消息重定向到数据库以便于搜索。我们希望这些技能在您准备 RHCE 考试和日常工作中有所帮助。
一如既往,我们非常欢迎您提供反馈。请随意使用下面的表格与我们联系。