Linux运维之认识与分析登录档

2019-04-02  本文已影响0人  慕长风啊

什么是登录档:

简单的说,就是记录系统活动记录的几个档案, 例如:何时、何地 (来源 IP)、何人( login name )、做了什么动作, 另外就是系统在什么时候做了什么样的行为时,发生了什么样的事件等等
—— 《鸟哥的Linux私房菜》

登录档的重要性:

为什么要把登录档作为一个专题拿出来讲呢,因为它真的很重要,也非常有用!
就我自己而言,之前经常会碰到某些服务启动失败或者运作过程中出问题的状况,这时候系统就会提示我去看登录档
可惜我当时完全不知道怎么分析登录档,只能去百度
简单的问题百度还好,稍微复杂一点的,百度谷歌一般都很难找到症结所在
最了解系统问题的还是系统自己,所以这个时候登录档可是无比重要的
学会分析登录档,几乎可以解决大部分的系统问题!
另外在攻击溯源的过程中,登录档也是无比重要的线索之一!

常见的几个登录档文件:

不同的Linux distributions, 通常登录档的档名都是不同的(除了messages和网络服务)
下面介绍几个常用的登录档(/var/log/):

关于登录档的产生:

一般有两种方式,一种是由软件开发商自定义写入的登录档与相关格式,比如上面提到的apache2这个文件夹里的内容。
另外一种就是由该版本的Linux提供的登录档管理服务进行统一管理。例如CentOS就是通过rsyslog.service这个服务来统一管理的。
上一个专题提到过系统是由systemd所管理,所有经由它启动的服务在运作过程中发生的一些问题和正常的讯息,实际上都会先由systemd-journald.service以二进制的方式记录下来,之后再发送给rsyslog.service作进一步的记载。
另外,systemd-journald.service的记录主要放在内存中,比如我们透过journaltctlsystemctl status unit.service来查看某个服务的登录档时,就是在内存中进行读取,这样做效能方面比较好,而且在单一服务的处理上也比跑到messages文件中去大海捞针高效的多!

关于rsyslog.service

首先看看它的配置文件:/etc/rsyslog.conf
上面已经提到,rsyslog可以负责主机产生的各个信息的登录,而这些信息本身是有“严重等级“之分的,而且,这些资料最终被送到哪个文件也都是可以修改的。所以就造成了不同版本的Linux放置的登录档档名有所区别,这些都被配置在了rsyslog.conf这个文件里
这个文件主要规定了三点:
(1)什么服务 (2)的什么等级讯息 (3)需要被记录在哪里(装置或文件)
语法如图:


rules

关于讯息等级,也用书中的图来说明:


levels
特别留意一下在讯息等级之前还有 [.=!] 的链接符号,他代表的意思是这样的:

然后就是讯息放置到哪里的设定了,通常使用的是记录的文件,但也可以输出到装置,例如打印机之类,或者记录到不同的主机上,之前有篇报告里提到的logserver就是内网中专门记录其他主机登录档的服务器,这样便于集中例常排查各主机是否存在问题。

之后我查看了一下自己主机的配置文件的情况,发现:

mine1
难怪之前查看登录档的时候没有找打cron.log这个文件呢
再去看了下cron.service的status,也是开机自启的,于是改成:
mine2
虽然不是服务器,但我自己还是经常要用到例行性工作排程的
另外,
mine3
这里就不用再记录cron的讯息了,加一句cron.none
mine4
PS:在记录的文件 /var/log/maillog 前面还有个减号『 - 』是干嘛用的?
由于邮件所产生的讯息比较多
因此我们希望邮件产生的讯息先储存在速度较快的内存中(buffer)
等到数据量够大了才一次性的将所有数据都填入磁盘内
这样将有助于登录文件的存取性能
只不过由于讯息是暂存在内存内
因此若不正常关机导致登录信息未回填到登录档中
可能会造成部分数据的遗失

关于登录档的安全性:

从上面足见登录档的重要性了,如果服务器被黑客入侵了,这些都是很好的证据。
但如果聪明的黑客直接 rm -rf /var/log 呢?那就没得分析了
所以我们得做一些措施来保护登录档,使得只可以增加数据,而不能被删除。
当然,如果root账户被拿到了,那做什么都是徒劳咯
始终要记得:root可以在系统上进行任何操作!
现在来处理一下登录档的隐藏属性,直接上命令:

safety
如果有疑问可以自行查询chattr和lsattr这两条命令的用法
另外,登录档要防止被root权限不小心修改,因为rsyslogd 的登录档只要被编辑过,就无法继续记录,必须重启rsyslog.service服务才行。

谈谈登录档的轮替工作(logrotate):

所谓的 logrotate , 基本上就是将旧的登录档更改名称,然后建立一个空的登录档。
如此一来,新的登录文件将重新开始记录,旧的登录档只需要留下一阵子
这样就可以达到将登录档轮转的目的!
此外,如果旧的记录 (大概要保存几个月) 保存了一段时间没有问题
那么就可以让系统自动的将他砍掉, 免得占掉很多宝贵的硬盘空间
同时,旧记录文件的数目也可以按需设定
比如我在自己的私人电脑上,数目就设置的比较小
因为我的固态硬盘空间实在太宝贵了,而日志一般还比较占地方
它的参数配置文件主要是下面两个:

最后来看看systemd-journald:

前面已经提到过,开机过程中的所有信息,包括启动服务与服务若启动失败的情况等等,都可以直接被记录到 systemd-journald 里头
但是,由于是使用于内存的登录文件记录方式,因此重新启动过后,开机前的登录文件信息当然就不会被记载了
也就是说,systemd-journald 用来管理与查询这次开机后的登录信息,而 rsyslogd 可以用来记录以前及现在的所以数据到磁盘文件中,方便未来进行查询
PS:虽然 systemd-journald 所记录的数据其实是在内存中,但是系统还是利用文件的型态将它记录到 /run/log/ 底下,当然,重启后会刷新掉的

下面就来看看如何通过journalctl观察登录信息
比起直接找男人(man),鸟哥的图做的真心不错:


figure2

最后补充一句,如果想将自己的数据存储到登录文件中又该怎么做呢?
用logger就好了!举个栗子:logger -p user.info "I will check logger command"
其他用法自己找男人吧

关于登录档的分析,原文中提到了CentOS预设提供的logwatch,欲知详情自行百度啦
(因为我现在还没有需求-。-)

上一篇下一篇

猜你喜欢

热点阅读