6.1 Linux中常见的日志文件 |
|
在日常的使用过程中,日志系统可以记录当前系统中发生的各种时间,比如登录日志记录每次登录的来源和时间、系统每次启动和关闭的情况、系统错误等。用户可以根据其他类型的各种日志排查系统问题,如果遇到网络攻击,可以从日志中追踪蛛丝马迹。
日志的主要用途如下:
● 系统审计:每天登录系统的用户都是哪些用户,这些用户做了什么。
● 监测追踪:系统受到攻击时如何查找攻击者的蛛丝马迹。
● 分析统计:Apache Web服务器请求量如何、错误码分布如何、性能如何,是否需要扩容,有多少用户访问了该Web服务。
为了保证Linux系统正常运行,准确解决各种各样的问题,系统管理员需要了解如何读取对应类型的日志文件。Linux系统日志文件一般存放在/var/log下,且必须有root权限才能查看。对应的日志类型主要有3种。
● 系统连接日志。这类日志主要记录系统的登录记录和用户名,然后把记录写入到/var/log/wtmp和/var/run/utmp中,login等程序更新wtmp和utmp文件,可以使系统管理员及时掌握系统的登录记录。
● 进程统计。由系统内核执行,当一个进程终止时,为每个进程往进程统计文件中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计。
● 错误日志。各种系统守护进程、用户程序和内核,通过syslog向文件/var/log/messages报告值得注意的事件。另外还有许多Linux程序创建日志,像HTTP和FTP等应用有专门的日志配置。
常用的日志文件如表6.1所示。
表6.1 Linux常见日志文件说明
对于文本类型的日志,每一行表示一个消息,一般由4个域的固定格式组成,如示例6-1所示。
【示例6-1】
● 记录时间:表示消息发出的日期和时间。
● 主机名:表示生成消息的服务器的名字。
● 生成消息的子系统的名字:来自内核则标识为kernel,来自进程则标识为进程名。在方括号里的是进程的PID。
● 消息:剩下的部分就是消息的内容。
/var/log/messages为服务器的系统日志,该日志并不专门记录特定服务相关的日志,一般,后台守护进程(如crond)会把执行日志打印到此文件,查看此文件可以使用文本编辑器或文本查看命令,如cat、head或tail等。
/var/log/secure记录了系统的登录行为,通过此日志可以分析异常的登录请求,可以使用文本查看相关的命令。
/var/log/utmp、/var/log/wtmp、/var/log/lastlog这3个日志文件记录了关于系统登录和退出信息。utmp记录当前登录用户的信息。用户登录和退出的记录则保存在wtmp文件中,各个用户最后一次登录的日志可以使用lastlog查看。所有的记录都包含时间戳。随着系统的使用,这些文件有些可能会变得很大,可以使用日志轮转将文件以一天或一周截取,方法是使用开发者自己的脚本或使用系统提供的日志轮转功能。查看方法如示例6-2所示。
【示例6-2】
用户每次登录时,login程序在文件lastlog中查找用户的UID。若找到则把用户上次登录、退出时间和主机名写到标准输出中,然后在lastlog中记录新的登录时间。在新的lastlog记录写入后,utmp文件打开并插入用户的utmp记录。该记录一直用到用户登录退出时删除。
wtmp和utmp为二进制文件,不能用文本查看命令直接查看,可以通过who、w、users、last和ac查看这两个文件包含的信息。
who命令查询utmp文件并报告当前登录的每个用户。who命令的输出包含用户名、终端类型、登录日期及登录的来源主机,如示例6-3所示。
【示例6-3】
who命令后面如果跟wtmp文件名,则可以查看所有的登录记录信息。
w命令查询utmp文件并显示当前系统中每个用户和用户所运行的进程信息,如示例6-4所示。
【示例6-4】
显示的信息依次为登录名、tty名称、远程主机、登录时间、空闲时间、JCPU、PCPU和其当前进程的命令行。
users命令用单独的一行打印出当前登录的所有用户,每个显示的用户名对应一个登录会话。若一个用户有不止一个登录会话,则用户名显示与会话相同的次数,如示例6-5所示。
【示例6-5】
last命令往回搜索wtmp显示自从文件第一次创建以来所有用户的登录记录。注意此命令不同于lastlog命令,如示例6-6所示。
【示例6-6】
如果要查看系统的启动信息,可以通过dmsg查看。当Linux启动的时候,内核的信息被存入内核ring缓存当中,dmesg可以显示缓存中的内容。通过此文件可以查看系统中的异常情况,比如硬盘损坏或其他故障,可用以下命令来查看“dmesg | grep-i error”。
系统的其他服务,如Apache或MySQL等,都有自己特定的日志文件,其日志可以用专业的软件来(Awstats)分析。