# 什么是登录文件

记录系统在什么时候由哪个程序做了什么样的行为,发生了何种的事件。按笔者的理解就是日志文件

看完下面章节的 Linux 常见的登录文件 ,这里笔者才理解这个登录文件其实就是各个服务的日志文件,不过系统上有大量的系统服务,一些常用的日志文件已经被公认所熟知而已

# CentOS7 登录文件简易说明

背景下又很多的 daemons 同时在工作,他们显示的一些信息最终会记录到登录文件中。记录这些重要的信息就是登录文件的工作

# 登录文件的重要性

很重要,重要到系统管理员需要随时注意它,可以这样说:

  • 解决系统方面的错误

    系统偶尔可能会出现一些错误,包括硬件检测不到或是某些系统服务无法运行的情况。很多信息都会记录到登录文件中,包括第 16 章中 SELinux 与登录文件的关系,查询登录文件可以克服一些系统问题

  • 解决网络服务的问题

    做完某些网络服务的设置后,却无法顺利启动该服务,此时也可以去查询登录文件。

    比如:无法启动邮件服务器 postfix,可以查询 /var/log/maillog 通常可以找到问题所在

  • 过往事件记录

    例如:发现 httpd 软件在某个时刻流量特别大,可以去登录文件找出该时间段哪些 IP 在联机与查询的网页数据,就能知道原因了。还有你的主机被黑客当做跳板攻击其他的主机,那么登录文件就会记录攻击者的 IP,那么人家找到你,你协助人家继续追查来源

所以在解决 Linux 的错误问题时,仔细观察屏幕上的错误信息 与 登录文件的错误信息,几乎上可以解决大部分的 Linux 问题

# Linux 常见的登录文件

登录文件记录了很多的详细信息,因此一般权限设置为仅 root 能读取。常见的登录文件有:

  • /var/log/boot.log

    开机时系统核心侦测与启动硬件,接下来开始各种核心支持的功能启动等。这些流程都会记录在该文件中。且只记录当次开机启动的信息,老的信息不回保留下来

  • /varlog/cron

    第 15 章的工作排程 crontab,有没有被实际执行过?执行过程中有没有发生错误? /etc/crontab 是否编写正确,都可以检查该文件

  • /varlog/dmesg

    记录系统再开机时核心侦测过程所产生的各项信息。CentOS 默认将开机时核心的硬件侦测过程取消显示,因此额外奖数据记录在该文件中

  • /varlog/lastog

    记录系统上所有的账户最近一次登陆系统的相关信息。第 13 章讲到的 lastlog 指令就是利用该数据显示的

  • /varlog/maillog/varlog/mail/*

    记录邮件的往来信息,其实主要记录 postfix(SMTP 协议提供者) 与 dovecot(POP3 协议提供者)所产生的信息。postfix 和 dovecot 分别实现了 SMTP(发信) 与 POP3(收信) 的通信协议

  • /varlog/secure

    基本上只要牵涉到需要输入账户密码的软件,当登陆时,不管登陆正确与错误,都会被记录在此文件中。

  • /varlog/wtmp /varlog/faillog

    可以记录正确登陆的账户信息(wtmp)与错误登录时所使用的账户信息(faillog)。第 10 章中谈到的 last 就是读取 wtmp 来显示的,这对追踪一般账户的使用行为很有帮助

  • /varlog/httpd/* /varlog/samba/*

    不同的网络服务会使用他们自己的登录文件来记载他们自己产生的各项信息。上述目录内则是个别服务的登录文件

常见日志文件就这么几个,但是不同的 Linux distribution ,通常只是文件名不同(除了 /etc/lgo/messages 外)。所以需要查询你 Linux 上的日志文件设置数据,才能知道文件名是什么

# 日志文件所需相关服务 daemon 与程序

日志文件的产生基本上有两种方式:

  • 由软件开发商自行定义写入的文件与相关格式

  • Linux distribution 提供的日志文件管理服务统一管理

    只需要将信息丢给该服务后,会自己分类将各种信息放到相关的文件中去。CentOS 提供 rsyslog.service 来管理

由于日志文件数据大,所以需要通过 logrotate(日志文件轮替)来自动化处理日志文件容量与更新的问题

logrotate 将旧文件更名,然后新建空白文件。完成备份的效果。如果旧的记录(大概几个月)保存了一段时间都没有问题,那么就可以让系统自动将旧文件删掉

总结:针对日志文件所需的功能,需要的服务于程序有:

  • systemd-journald.service:最主要的信息接收者,由 systemd 提供
  • rsyslog.service:主要登录系统与网络等服务的信息
  • logrotate:主要在进行日志文件的轮替功能

# systemd 提供的 journalctl 日志管理

CentOS 7 有 rsyslog.service,最上层还使用了 systemd 提供的 systemd-journald.service 的日志管理功能。

基本那个由 systemd 启动的服务,如果再启动或结束的过程中发生一些问题或则是正常的信息,就会将该信息由 systemd-journald.service 以二进制的方式记录下来,之后再将该信息发送给 rsyslog.service 做进一步的记载

systemd-journald.service 的记录主要都放在内存中,可以通过 journalctl 以及 systemctl status unit.service 来查看各个不同服务的日志文件。好处就是日志文件可以随着个别服务让你查阅,在单一服务处理上,比去查询 /var/log/message 去大海捞针要方便得多

因为 systemd-journald.service 里面很多观念沿用 rsyslog.service 相关信息,所以本章先从 rsyslog.service 将其,再讲解 journalctl 并进一步了解 systemd 是怎么去记录日志文件的功能的

# 日志内容的一般格式

每条信息均会记录以下几个重要数据:

  • 事件发生的日期与时间
  • 发生此事件的主机名
  • 启动此事件的服务名称(如 systemd)或指令函数名称(如 su)
  • 该信息的实际数据内容

还有就是信息的 详细度 是可以设置的,下面拿登录时一定会记录账户信息的 /var/log/secure 为例讲解

[root@study system]# cat /var/log/secure
Mar 20 16:35:21 study sshd[10579]: pam_unix(sshd:session): session closed for user root
Mar 20 16:35:22 study sshd[23472]: Accepted password for root from 192.168.4.170 port 49517 ssh2
Mar 20 16:35:22 study sshd[23472]: pam_unix(sshd:session): session opened for user root by (uid=0)
# 日期时间	HOST	服务于相关函数		信息说明
1
2
3
4
5

拿上面第三行数据来说明,在 3月20日 16:35:22 在名为 study 的主机上,由 sshd 登录了,相关权限是通过 pam_unix 模块处理的

有很多信息可以查询,尤其是 /var/log/messages 的内容。 一个号的系统管理员,要常常检查日志文件内容,尤其是发生以下几种情况时:

  • 当你觉得系统不太正常时
  • 某个 daemon 老是无法正常启动时
  • 某个使用者老是无法登陆时
  • 某个 daemon 执行过程中老是不顺畅时

等等情况,记得要去查询日志文件

下面是作者的一个处理方式:当无法启动某个服务时,会再最后一次启动该服务后,立即检查日志文件,

  1. 找到现在时间的日志信息(看第 1 字段)
  2. 找到想要查询哪个服务(看第 3 字段)
  3. 检查第 4 字段,来找到具体的错误信息
  4. 第 2 字段是主机名:可以把一台服务器做成一个日志文件服务器,可以收集来自其他服务器的日志文件数据