## 18.1 什么是登录文件
“详细而确实的分析以及备份系统的登录文件”是一个系统管理员应该要进行的任务之一。 那么什么是登录文件呢?简单的说,就是记录系统活动信息的几个文件, 例如:何时、何地 (来源 IP)、何人 (什么服务名称)、做了什么动作 (讯息登录啰)。 换句话说就是:记录系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等等。
### 18.1.1 CentOS 7 登录文件简易说明
要知道的是,我们的 Linux 主机在背景之下有相当多的 daemons 同时在工作着,这些工作中的程序总是会显示一些讯息, 这些显示的讯息最终会被记载到登录文件当中啦。也就是说,记录这些系统的重要讯息就是登录文件的工作啦!
* 登录文件的重要性
为什么说登录文件很重要,重要到系统管理员需要随时注意他呢?我们可以这么说:
* 解决系统方面的错误:
用 Linux 这么久了,你应该偶而会发现系统可能会出现一些错误,包括硬件捉不到或者是某些系统服务无法顺利运行的情况。 此时你该如何是好?由于系统会将硬件侦测过程记录在登录文件内,你只要通过查询登录文件就能够了解系统作了啥事! 并且由[第十六章我们也知道 SELinux](../Text/index.html) 与登录文件的关系更加的强烈!所以啰,查询登录文件可以克服一些系统问题啦!
* 解决网络服务的问题:
你可能在做完了某些网络服务的设置后,却一直无法顺利启动该服务,此时该怎办?去庙里面拜拜抽签吗? 三太子大大可能无法告诉你要怎么处理呢!由于网络服务的各种问题通常都会被写入特别的登录文件, 其实你只要查询登录文件就会知道出了什么差错,还不需要请示三太子大大啦!举例来说,如果你无法启动邮件服务器 (postfix), 那么查询一下 /var/log/maillog 通常可以得到不错的解答!
* 过往事件记录簿:
这个东西相当的重要!例如:你发现 WWW 服务 (httpd 软件) 在某个时刻流量特别大,你想要了解为什么时, 可以通过登录文件去找出该时段是哪些 IP 在连线与查询的网页数据为何,就能够知道原因。 此外,万一哪天你的系统被入侵,并且被利用来攻击他人的主机,由于被攻击主机会记录攻击者,因此你的 IP 就会被对方记录。这个时候你要如何告知对方你的主机是由于被入侵所导致的问题, 并且协助对方继续往恶意来源追查呢?呵呵!此时登录文件可是相当重要的呢!
![鸟哥的图示](https://box.kancloud.cn/2016-05-13_5735736501917.gif "鸟哥的图示")
**Tips** 所以我们常说“天助自助者”是真的啦!你可以通过 (1)察看屏幕上面的错误讯息与 (2)登录文件的错误信息,几乎可以解决大部分的 Linux 问题!
* Linux 常见的登录文件文件名
登录文件可以帮助我们了解很多系统重要的事件,包括登陆者的部分信息,因此登录文件的权限通常是设置为仅有 root 能够读取而已。 而由于登录文件可以记载系统这么多的详细信息,所以啦,一个有经验的主机管理员会随时随地查阅一下自己的登录文件, 以随时掌握系统的最新脉动!那么常见的几个登录文件有哪些呢?一般而言,有下面几个:
* /var/log/boot.log:
开机的时候系统核心会去侦测与启动硬件,接下来开始各种核心支持的功能启动等。这些流程都会记录在 /var/log/boot.log 里面哩! 不过这个文件只会存在这次开机启动的信息,前次开机的信息并不会被保留下来!
* /var/log/cron:
还记得[第十五章例行性工作调度](../Text/index.html)吧?你的 crontab 调度有没有实际被进行? 进行过程有没有发生错误?你的 /etc/crontab 是否撰写正确?在这个登录文件内查询看看。
* /var/log/dmesg:
记录系统在开机的时候核心侦测过程所产生的各项信息。由于 CentOS 默认将开机时核心的硬件侦测过程取消显示, 因此额外将数据记录一份在这个文件中;
* /var/log/lastlog:
可以记录系统上面所有的帐号最近一次登陆系统时的相关信息。[第十三章讲到的 lastlog](../Text/index.html#uselinux_find) 指令就是利用这个文件的记录信息来显示的。
* /var/log/maillog 或 /var/log/mail/*:
记录邮件的往来信息,其实主要是记录 postfix (SMTP 协定提供者) 与 dovecot (POP3 协定提供者) 所产生的讯息啦。 SMTP 是发信所使用的通讯协定, POP3 则是收信使用的通讯协定。 postfix 与 dovecot 则分别是两套达成通讯协定的软件。
* /var/log/messages:
这个文件相当的重要,几乎系统发生的错误讯息 (或者是重要的信息) 都会记录在这个文件中; 如果系统发生莫名的错误时,这个文件是一定要查阅的登录文件之一。
* /var/log/secure:
基本上,只要牵涉到“需要输入帐号密码”的软件,那么当登陆时 (不管登陆正确或错误) 都会被记录在此文件中。 包括系统的 login 程序、图形接口登陆所使用的 gdm 程序、 su, sudo 等程序、还有网络连线的 ssh, telnet 等程序, 登陆信息都会被记载在这里;
* /var/log/wtmp, /var/log/faillog:
这两个文件可以记录正确登陆系统者的帐号信息 (wtmp) 与错误登陆时所使用的帐号信息 (faillog) ! 我们在[第十章谈到的 last](../Text/index.html#last) 就是读取 wtmp 来显示的, 这对于追踪一般帐号者的使用行为很有帮助!
* /var/log/httpd/*, /var/log/samba/*:
不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项讯息!上述的目录内则是个别服务所制订的登录文件。
常见的登录文件就是这几个,但是不同的 Linux distributions ,通常登录文件的文件名不会相同 (除了 /var/log/messages 之外 )。所以说,你还是得要查阅你 Linux 主机上面的登录文件设置数据, 才能知道你的登录文件主要文件名喔!
* 登录文件所需相关服务 (daemon) 与程序
那么这些登录文件是怎么产生的呢?基本上有两种方式,一种是由软件开发商自行定义写入的登录文件与相关格式, 例如 WWW 软件 apache 就是这样处理的。另一种则是由 Linux distribution 提供的登录文件管理服务来统一管理。 你只要将讯息丢给这个服务后,他就会自己分门别类的将各种讯息放置到相关的登录文件去!CentOS 提供 rsyslog.service 这个服务来统一管理登录文件喔!
不过要注意的是,如果你任凭登录文件持续记录的话,由于系统产生的信息天天都有,那么你的登录文件的容量将会长大到无法无天~ 如果你的登录文件容量太大时,可能会导致大文件读写效率不佳的问题 (因为要从磁盘读入内存,越大的文件消耗内存量越多)。 所以啰,你需要对登录文件备份与更新。那...需要手动处理喔?当然不需要,我们可以通过 logrotate (登录文件轮替) 这玩意儿来自动化处理登录文件容量与更新的问题喔!
所谓的 logrotate 基本上,就是将旧的登录文件更改名称,然后创建一个空的登录文件,如此一来, 新的登录文件将重新开始记录,然后只要将旧的登录文件留下一阵子,嗯!那就可以达到将登录文件“轮转”的目的啦! 此外,如果旧的记录 (大概要保存几个月吧!) 保存了一段时间没有问题,那么就可以让系统自动的将他砍掉, 免得占掉很多宝贵的硬盘空间说!
总结一下,针对登录文件所需的功能,我们需要的服务与程序有:
* systemd-journald.service:最主要的讯息收受者,由 systemd 提供的;
* rsyslog.service:主要登录系统与网络等服务的讯息;
* logrotate:主要在进行登录文件的轮替功能。
由于我们着眼点在于想要了解系统上面软件所产生的各项信息,因此本章主要针对 rsyslog.service 与 logrotate 来介绍。 接着下来我们来谈一谈怎么样规划这两个玩意儿。就由 rsyslog.service 这支程序先谈起吧!毕竟得先有登录文件,才可以进行 logrotate 呀!您说是吧!
* CentOS 7.x 使用 systemd 提供的 journalctl 日志管理
CentOS 7 除了保有既有的 rsyslog.service 之外,其实最上游还使用了 systemd 自己的登录文件日志管理功能喔!他使用的是 systemd-journald.service 这个服务来支持的。基本上,系统由 systemd 所管理,那所有经由 systemd 启动的服务,如果再启动或结束的过程中发生一些问题或者是正常的讯息, 就会将该讯息由 systemd-journald.service 以二进制的方式记录下来,之后再将这个讯息发送给 rsyslog.service 作进一步的记载。
systemd-journald.service 的记录主要都放置于内存中,因此在存取方面性能比较好~我们也能够通过 journalctl 以及 systemctl status unit.service 来查看各个不同服务的登录文件! 这有个好处,就是登录文件可以随着个别服务让你查阅,在单一服务的处理上面,要比跑到 /var/log/messages 去大海捞针来的简易很多! 不过,因为 system-journald.service 里面的很多观念还是沿用 rsyslog.service 相关的信息,所以,本章还是先从 rsyslog.service 先谈起, 谈完之后再以 journalctl 进一步了解 systemd 是怎么去记录登录文件日志功能的呦!
### 18.1.2 登录文件内容的一般格式
一般来说,系统产生的讯息经过记录下来的数据中,每条讯息均会记录下面的几个重要数据:
* 事件发生的日期与时间;
* 发生此事件的主机名称;
* 启动此事件的服务名称 (如 systemd, CROND 等) 或指令与函数名称 (如 su, login..);
* 该讯息的实际数据内容。
当然,这些信息的“详细度”是可以修改的,而且,这些信息可以作为系统除错之用呢! 我们拿登录时一定会记载帐号信息的 /var/log/secure 为例好了:
```
[root@study ~]# cat /var/log/secure
Aug 17 18:38:06 study login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
Aug 17 18:38:06 study login: ROOT LOGIN ON tty1
Aug 17 18:38:19 study login: pam_unix(login:session): session closed for user root
Aug 18 23:45:17 study sshd[18913]: Accepted password for dmtsai from 192.168.1.200 port 41524 ssh2
Aug 18 23:45:17 study sshd[18913]: pam_unix(sshd:session): session opened for user dmtsai by (uid=0)
Aug 18 23:50:25 study sudo: dmtsai : TTY=pts/0 ; PWD=/home/dmtsai ; USER=root ; COMMAND=/bin/su -
Aug 18 23:50:25 study su: pam_unix(su-l:session): session opened for user root by dmtsai(uid=0)
|--日期/时间---|--H--|-服务与相关函数-|-----------讯息说明------>
```
我们拿第一笔数据 (共两行) 来说明好了,该数据是说:“在 08/17 的 18:38 左右,在名为 study 的这部主机系统上,由 login 这个程序产生的讯息,内容显示 root 在 tty1 登陆了,而相关的权限给予是通过 pam_unix 模块处理的 (共两行数据)。”有够清楚吧!那请您自行翻译一下后面的几条讯息内容是什么喔!
其实还有很多的信息值得查阅的呢!尤其是 /var/log/messages 的内容。记得一个好的系统管理员, 要常常去“巡视”登录文件的内容喔!尤其是发生下面几种情况时:
* 当你觉得系统似乎不太正常时;
* 某个 daemon 老是无法正常启动时;
* 某个使用者老是无法登陆时;
* 某个 daemon 执行过程老是不顺畅时;
还有很多啦!反正觉得系统不太正常,就得要查询查询登录文件就是了。
![鸟哥的图示](https://box.kancloud.cn/2016-05-13_5735736501917.gif "鸟哥的图示")
**Tips** 提供一个鸟哥常做的检查方式。当我老是无法成功的启动某个服务时,我会在最后一次启动该服务后,立即检查登录文件, 先 (1)找到现在时间所登录的信息“第一字段”; (2)找到我想要查询的那个服务“第三字段”, (3)最后再仔细的查阅第四字段的信息,来借以找到错误点。
另外,不知道你会不会觉得很奇怪?为什么登录文件就是登录本机的数据啊~那怎么登录文件格式中,第二个字段项目是“主机名称”啊? 这是因为登录文件可以做成登录文件服务器,可以收集来自其他服务器的登录文件数据喔!所以啰,为了了解到该讯息主要是来自于哪一部主机, 当然得要有第二个字段项目说明该信息来自哪一部主机名称啰!
- 鸟哥的Linux私房菜:基础学习篇 第四版
- 目录及概述
- 第零章、计算机概论
- 0.1 电脑:辅助人脑的好工具
- 0.2 个人电脑架构与相关设备元件
- 0.3 数据表示方式
- 0.4 软件程序运行
- 0.5 重点回顾
- 0.6 本章习题
- 0.7 参考资料与延伸阅读
- 第一章、Linux是什么与如何学习
- 1.1 Linux是什么
- 1.2 Torvalds的Linux发展
- 1.3 Linux当前应用的角色
- 1.4 Linux 该如何学习
- 1.5 重点回顾
- 1.6 本章习题
- 1.7 参考资料与延伸阅读
- 第二章、主机规划与磁盘分区
- 2.1 Linux与硬件的搭配
- 2.2 磁盘分区
- 2.3 安装Linux前的规划
- 2.4 重点回顾
- 2.5 本章习题
- 2.6 参考资料与延伸阅读
- 第三章、安装 CentOS7.x
- 3.1 本练习机的规划--尤其是分区参数
- 3.2 开始安装CentOS 7
- 3.3 多重开机安装流程与管理(Option)
- 3.4 重点回顾
- 3.5 本章习题
- 3.6 参考资料与延伸阅读
- 第四章、首次登陆与线上求助
- 4.1 首次登陆系统
- 4.2 文字模式下指令的下达
- 4.3 Linux系统的线上求助man page与info page
- 4.4 超简单文书编辑器: nano
- 4.5 正确的关机方法
- 4.6 重点回顾
- 4.7 本章习题
- 4.8 参考资料与延伸阅读
- 第五章、Linux 的文件权限与目录配置
- 5.1 使用者与群组
- 5.2 Linux 文件权限概念
- 5.3 Linux目录配置
- 5.4 重点回顾
- 5.5 本章练习
- 5.6 参考资料与延伸阅读
- 第六章、Linux 文件与目录管理
- 6.1 目录与路径
- 6.2 文件与目录管理
- 6.3 文件内容查阅
- 6.4 文件与目录的默认权限与隐藏权限
- 6.5 指令与文件的搜寻
- 6.6 极重要的复习!权限与指令间的关系
- 6.7 重点回顾
- 6.8 本章习题:
- 6.9 参考资料与延伸阅读
- 第七章、Linux 磁盘与文件系统管理
- 7.1 认识 Linux 文件系统
- 7.2 文件系统的简单操作
- 7.3 磁盘的分区、格式化、检验与挂载
- 7.4 设置开机挂载
- 7.5 内存交换空间(swap)之创建
- 7.6 文件系统的特殊观察与操作
- 7.7 重点回顾
- 7.8 本章习题 - 第一题一定要做
- 7.9 参考资料与延伸阅读
- 第八章、文件与文件系统的压缩,打包与备份
- 8.1 压缩文件的用途与技术
- 8.2 Linux 系统常见的压缩指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系统的备份与还原
- 8.5 光盘写入工具
- 8.6 其他常见的压缩与备份工具
- 8.7 重点回顾
- 8.8 本章习题
- 8.9 参考资料与延伸阅读
- 第九章、vim 程序编辑器
- 9.1 vi 与 vim
- 9.2 vi 的使用
- 9.3 vim 的额外功能
- 9.4 其他 vim 使用注意事项
- 9.5 重点回顾
- 9.6 本章练习
- 9.7 参考资料与延伸阅读
- 第十章、认识与学习BASH
- 10.1 认识 BASH 这个 Shell
- 10.2 Shell 的变量功能
- 10.3 命令别名与历史命令
- 10.4 Bash Shell 的操作环境:
- 10.5 数据流重导向
- 10.6 管线命令 (pipe)
- 10.7 重点回顾
- 10.8 本章习题
- 10.9 参考资料与延伸阅读
- 第十一章、正则表达式与文件格式化处理
- 11.1 开始之前:什么是正则表达式
- 11.2 基础正则表达式
- 11.3 延伸正则表达式
- 11.4 文件的格式化与相关处理
- 11.5 重点回顾
- 11.6 本章习题
- 11.7 参考资料与延伸阅读
- 第十二章、学习 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 简单的 shell script 练习
- 12.3 善用判断式
- 12.4 条件判断式
- 12.5 循环 (loop)
- 12.6 shell script 的追踪与 debug
- 12.7 重点回顾
- 12.8 本章习题
- 第十三章、Linux 帐号管理与 ACL 权限设置
- 13.1 Linux 的帐号与群组
- 13.2 帐号管理
- 13.3 主机的细部权限规划:ACL 的使用
- 13.4 使用者身份切换
- 13.5 使用者的特殊 shell 与 PAM 模块
- 13.6 Linux 主机上的使用者讯息传递
- 13.7 CentOS 7 环境下大量创建帐号的方法
- 13.8 重点回顾
- 13.9 本章习题
- 13.10 参考资料与延伸阅读
- 第十四章、磁盘配额(Quota)与进阶文件系统管理
- 14.1 磁盘配额 (Quota) 的应用与实作
- 14.2 软件磁盘阵列 (Software RAID)
- 14.3 逻辑卷轴管理员 (Logical Volume Manager)
- 14.4 重点回顾
- 14.5 本章习题
- 14.6 参考资料与延伸阅读
- 第十五章、例行性工作调度(crontab)
- 15.1 什么是例行性工作调度
- 15.2 仅执行一次的工作调度
- 15.3 循环执行的例行性工作调度
- 15.4 可唤醒停机期间的工作任务
- 15.5 重点回顾
- 15.6 本章习题
- 第十六章、程序管理与 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件与程序
- 16.5 SELinux 初探
- 16.6 重点回顾
- 16.7 本章习题
- 16.8 参考资料与延伸阅读
- 第十七章、认识系统服务 (daemons)
- 17.1 什么是 daemon 与服务 (service)
- 17.2 通过 systemctl 管理服务
- 17.3 systemctl 针对 service 类型的配置文件
- 17.4 systemctl 针对 timer 的配置文件
- 17.5 CentOS 7.x 默认启动的服务简易说明
- 17.6 重点回顾
- 17.7 本章习题
- 17.8 参考资料与延伸阅读
- 第十八章、认识与分析登录文件
- 18.1 什么是登录文件
- 18.2 rsyslog.service :记录登录文件的服务
- 18.3 登录文件的轮替(logrotate)
- 18.4 systemd-journald.service 简介
- 18.5 分析登录文件
- 18.6 重点回顾
- 18.7 本章习题
- 18.8 参考资料与延伸阅读
- 第十九章、开机流程、模块管理与 Loader
- 19.1 Linux 的开机流程分析
- 19.2 核心与核心模块
- 19.3 Boot Loader: Grub2
- 19.4 开机过程的问题解决
- 19.5 重点回顾
- 19.6 本章习题
- 19.7 参考资料与延伸阅读
- 第二十章、基础系统设置与备份策略
- 20.1 系统基本设置
- 20.2 服务器硬件数据的收集
- 20.3 备份要点
- 20.4 备份的种类、频率与工具的选择
- 20.5 鸟哥的备份策略
- 20.6 灾难复原的考虑
- 20.7 重点回顾
- 20.8 本章习题
- 20.9 参考资料与延伸阅读
- 第二十一章、软件安装:源代码与 Tarball
- 20.1 开放源码的软件安装与升级简介
- 21.2 使用传统程序语言进行编译的简单范例
- 21.3 用 make 进行宏编译
- 21.4 Tarball 的管理与建议
- 21.5 函数库管理
- 21.6 检验软件正确性
- 21.7 重点回顾
- 21.8 本章习题
- 21.9 参考资料与延伸阅读
- 第二十二章、软件安装 RPM, SRPM 与 YUM
- 22.1 软件管理员简介
- 22.2 RPM 软件管理程序: rpm
- 22.3 YUM 线上升级机制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重点回顾
- 22.6 本章习题
- 22.7 参考资料与延伸阅读
- 第二十三章、X Window 设置介绍
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析与设置
- 23.3 显卡驱动程序安装范例
- 23.4 重点回顾
- 23.5 本章习题
- 23.6 参考资料与延伸阅读
- 第二十四章、Linux 核心编译与管理
- 24.1 编译前的任务:认识核心与取得核心源代码
- 24.2 核心编译的前处理与核心功能选择
- 24.3 核心的编译与安装
- 24.4 额外(单一)核心模块编译
- 24.5 以最新核心版本编译 CentOS 7.x 的核心
- 24.6 重点回顾
- 24.7 本章习题
- 24.8 参考资料与延伸阅读