日志文件对于诊断和解决系统中的问题很有帮助,因为在Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”。此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹。
一、主要日志文件
在Linux系统中,日志数据主要包括以下三种类型:
【内核及系统日志】
【用户日志】
【程序日志】
Linux系统本身和大部分服务器程序的日志文件默认情况下都放置在目录“/var/log”中。一部分程序公用一个日志文件,一部分程序使用单个日志文件,而有些大型服务器程序由于日志文件不止一个,所以会在“/var/log”目录中建立相应的子目录来存放日志文件,这样既保证了日志文件目录的结构清晰,又可以快速地定位日志文件。有相当一部分日志文件只有root用户才有权限读取,这保证了相关日志信息的安全性。
例1:列表查看“/var/log”目录中的各种日志文件及子目录。
对于Linux系统中的一些常见日志文件,有必要熟悉其相应的用途,这样才能在需要的时候更快地找到问题所在,及时解决各种故障。常见的日志文件如下:
/var/log/messages:记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序错误等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
/var/log/cron:记录crond计划任务产生的事件信息。
/var/log/dmesg:记录Linux系统在引导过程中的各种事件信息。
/var/log/maillog:记录进入或发出系统的电子邮件活动。
/var/log/lastlog:最近几次成功登录事件和最后一次不成功登录事件。
/var/log/rpmpkgs:记录系统中安装的各rpm包列表信息。
/var/log/secure:记录用户登录认证过程中的事件信息。
/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。
/var/run/utmp:记录当前登录的每个用户的详细信息。
二、日志文件分析
分析日志文件的目的在于通过浏览日志查找关键信息,对系统服务进行调试,判断发生故障的原因等。
对于大多数文本格式的日志文件,只要使用tail、more、less、cat等文本处理工具就可以查看日志内容。而对于一些二进制格式的日志文件,则需要使用相应的查询命令。
1、内核及系统日志
内核及系统日志功能主要由默认安装的sysklogd-1.4.1-39.2软件包提供,该软件包安装了klogd、syslogd两个程序,并通过syslog服务进行控制,分别用于记录系统内核的消息和各种应用程序的消息。syslog服务所使用的配置文件为“/etc/syslog.conf”。
例2:查看日志配置文件“/etc/syslog.conf”中的内容。
从配置文件“/etc/syslog.conf”中可以看到,受syslogd服务管理的日志文件都是Linux系统中最主要的日志文件,他们记录了Linux系统中内核、用户认证、邮件、计划任务等最基本的系统消息。在Linux内核中,根据日志消息的重要程度不同,将其分为不同的优先级别(数字等级越小,优先级越高,消息越重要)。
0 EMERG(紧急):会导致主机系统不可用的情况。
1 ALERT(警告):必须马上采取措施解决的问题。
2 CRIT(严重):比较严重的情况。
3 ERR(错误):运行出现错误。
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。
5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
6 INFO(信息):一般信息。
对于syslog服务统一管理的大部分日志文件,使用的日志记录格式基本上都是相同的。以下以公共日志文件“/var/log/messages”为例来简单介绍内核及系统日志记录的基本格式。
例3:查看公共日志文件“/var/log/messages”的最后3行记录。
日志文件中的每一行表示一条消息,每个消息均由四个字段的固定格式组成。
【时间标签】:消息发出的日期和时间。
【主机名】:生成消息的计算机的名称。
【子系统名称】:发出消息的应用程序的名称。
【消息】:消息的具体内容。
在有些情况下,可以设置syslog,使其在把日志信息记录到文件的同时将日志信息发送到打印机进行打印,这样无论网络入侵者怎么修改日志都不能清除入侵的痕迹。syslog日志服务是一个常会被攻击的显著目标,破坏了它将会使管理员难以发现入侵以及入侵的痕迹,因此要特别注意监控其守护进程以及配置文件。
2、用户日志
在wtmp、utmp、lastlog等日志文件中,保存了系统用户登录、退出等相关事件的事件消息。但是这些文件都是二进制的数据文件,不能直接使用tail、less等文本查看工具进行浏览,需要使用who、w、users、last和ac等用户查询命令来获取日志信息。
【who命令】
who命令用于查询utmp文件并报告当前登录的每个用户信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who的默认输出包括用户名、终端类型、登录日期及远程主机。
例4:使用who命令查看当前登录的各用户的所在终端、登录日期/时间/地点等信息。
【w命令】
用于查询utmp文件并显示当前系统中的每个用户及其所运行的进程信息。
例5:使用w命令查看当前登录的各用户信息及所运行的进程。
【users命令】
users命令用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。
例6:使用users命令查看当前的用户登录会话情况。
【last命令】
last命令用于查询wtmp文件,显示出自从该文件被创建以来登录过的所有用户记录,最近登录的用户记录将显示在最前面。
例7:使用last命令查看系统中最近的五次用户登录记录。
【ac命令】
ac命令将查询wtmp文件中的用户登录和退出情况,报告用户连接的总时间(小时)。使用用户名作为参数,在结合“-d”选项可以按每天进行统计。未指定用户名时,可以使用“-p”选项进行分别统计。
例8:统计gzj用户在每天的连接时间。
例9:分别统计各用户的总连接时间。
3、程序日志
在Linux系统中,还有相当一部分应用程序并没有使用syslog服务来管理日志,而是由程序自己维护日志记录。例如,http网站服务程序使用两个日志文件access_log和error_log,一般存放在“/var/log/httpd/”目录中,分别记录客户访问事件、错误事件;而FTP服务程序可以将与文件上传、下载事件相关的消息记录在xferlog文件中。由于不同应用程序的日志记录格式 差别较大,并没有严格使用统一的格式,这里不再详细进行介绍。
总的来说,作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑状况,定期并随机的检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志以及用户登录日志记录等。在检查这些日志时,要注意是否有不合常理的时间或操作记录。例如以下一些不合理的现象。
a、用户在非常规的时间登录,或者用户登录系统的IP地址和以往的不一样。
b、用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录。
c、非法使用或不正当使用超级用户权限。
d、无故或者非法重新启动各项网络服务的记录。
e、不正常的日志记录,比如日志的残缺不全,或者是诸如wtmp这样的日志文件无故地缺少了中间的记录文件。
另外,尤其提醒管理人员注意的是:日志并不是完全可靠的,高明的黑客在入侵系统后,经常会打扫现场。所以需要综合运用以上的系统命令,全面、综合地进行审查和检测,切忌断章取义,否则将可能做出错误的判断。
三、日志管理策略
鉴于日志数据资料的重要性,对于系统运行过程中产生的各种日志文件,必须采取有针对性的管理策略,以确保日志数据的准确性、安全性和真实性。一般来说,可以从以下几个方面进行考虑。
1、日志备份和归档
2、延长日志保存期限
3、控制日志访问权限
4、集中管理日志