12.2 syslog日志
syslog是一个被UNIX和Linux广泛使用的日志系统,Linux系统中大部分的日志文件都是通过它进行管理的。本节将对syslog的功能及配置、日志文件的查看和管理,以及syslog中默认配置的日志文件进行介绍。
12.2.1 syslog简介
syslog是一个历史悠久的日志系统,几乎所有的UNIX和Linux操作系统都是采用syslog进行系统日志的管理和配置。Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息。这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。而执行这个过程的程序就是syslog。syslog可以根据信息的来源以及信息的重要程度将信息保存到不同的日志文件中,例如,为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。在默认的syslog配置下,日志文件通常都保存在“/var/log”目录下。syslog的守护进程为syslogd,系统启动时,默认会自动运行syslogd守护进程,如图12.5所示。
如果要手工启动,可以使用如下命令:
/sbin/syslogd
在修改syslog配置后,需要重新启动syslogd守护进程才能使新的配置生效。其命令如下所示。
# killall -HUP syslogd
Red Hat Enterprise Linux 5.2安装后默认就已经在syslog中定义了一些日志文件,这些日志的位置以及它们的说明如表12.2所示。
表12.2
日 志 文 件 | 说 |
/var/log/message | 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 |
/var/log/secure | 与安全相关的日志信息 |
/var/log/maillog | 与邮件相关的日志信息 |
/var/log/cron | 与定时任务相关的日志信息 |
/var/log/spooler | 与UUCP和news设备相关的日志信息 |
/var/log/boot.log | 守护进程启动和停止相关的日志消息 |
12.2.2 syslog配置
syslog的配置文件为/etc/syslog.conf,在该文件中指定了syslog记录日志的信息来源、信息类型以及保存位置。下面是该文件内容的一个实例。
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
# kern.*
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
# 把除邮件、授权和定时任务以外的其他info级别的信息记录到/var/log/messages日志文件中
* .info;mail.none;authpriv.none;cron.none
# The authpriv file has restricted access.
# 把所有授权信息记录到/var/log/secure日志文件中
authpriv.*
# Log all the mail messages in one place.
# 把所有级别的邮件信息记录到/var/log/maillog日志文件中
mail.*
# Log cron stuff
# 把所有级别的定时任务信息记录到/var/log/cron日志文件中
cron.*
# Everybody gets emergency messages
# 把emerg级别的信息发送给所有登录用户
* .emerg
# Save news errors of level crit and higher in a special file.
uucp,news.crit
# Save boot messages also to boot.log
# 把所有的系统启动信息记录到/var/log/boot.log日志文件中
local7.*
该文件以井号“#”为注释符,其中每一行的语法格式为:
[消息来源.消息级别]
其中,[消息来源.消息级别]和[动作]之间以Tab键进行分隔,同一行syslog配置中允许出现多个[消息来源.消息级别],但必须要使用分号“;”进行分隔,例如:
mail.*; cron.*
其中消息来源表示发出消息的子系统,如表12.3列出了syslog中的所有消息来源。
表12.3
消 息 来 源 | 说 | 消 息 来 源 | 说 |
authpriv | 安全/授权信息 | | 邮件子系统 |
cron | 定时任务 | news | 网络新闻子系统 |
daemon | 守护进程 | syslog | syslogd内部产生的信息 |
ftp | ftp守护进程 | user | 一般用户级别信息 |
kern | 内核信息 | uucp | UUCP子系统 |
lpr | 打印机子系统 | local0-local7 | 本地用户 |
优先级代表消息的紧急程度,如表12.4所示按级别由高到低列出了syslog的所有消息级别及说明。
表12.4
消 息 级 别 | 说 | 消 息 级 别 | 说 |
emerg | 最紧急的消息 | warning | 警告消息 |
alert | 紧急消息 | notice | 普通但重要的消息 |
crit | 重要消息 | info | 通知性消息 |
err | 出错消息 | debug | 调试级的消息——消息量最多 |
Syslog消息级别是向上匹配的,也就是说如果指定了一个消息级别,那么指定级别及比该指定级别更高级的消息都会被包括进去。例如,warning表示所有大于或者等于warning级别的消息都会被处理,包括emerg、alert、crit、err和warning。如果指定的是debug级别,那么所有级别的消息都会被处理。消息级别越低,消息的数量就越多。如果只想匹配某个确定级别的消息,而不希望包括更高级别的消息,可以使用等号“=”进行指定。例如希望处理cron的notice级别的消息:
cron.=notice
除此之外,syslog还支持两个特殊的消息级别关键字:“*”和none。其中“*”表示匹配所有来源或级别的消息;none表示忽略所有消息。
[动作]是用于指定消息的处理方式。Syslog支持把消息保存到日志文件中、发送给指定的用户、显示在终端上或者通过网络发送到另外一台syslog服务器上进行处理。如表12.5中列出了Syslog中所有可用的动作及其说明。
表12.5
动 | 说 |
文件名 | 将消息保存到指定的文件中 |
@主机名或IP地址 | 转发消息到另外一台syslog服务器上进行处理 |
* | 把消息发送到所有用户的终端上 |
/dev/console | 把消息发送到本地主机的终端上 |
| 程序 | 通过管道把消息重定向到指定的程序 |
用户名列表 | 把消息发送给指定的用户,用户名以逗号“,”进行分隔 |
12.2.3 配置实例
下面将以一个配置实例演示对syslog进行配置的步骤。但是在进行配置前需要先介绍一下logger命令。该命令可以模拟产生各类的syslog消息,从而测试syslog配置是否正确。logger命令的格式如下所示。
logger [-isd] [-f file] [-p pri] [-t tag] [-u socket] [message ...]
例如,要模拟daemon emerg的消息,可以使用如下命令:
logger -p daemon.emerg “test info”
现在,假设要在syslog中添加对kern.emerg消息的处理,把该消息保存到/var/log/ kern_test.log日志文件中,步骤如下所述。
(1)修改配置文件。打开/etc/syslog.conf,在文件中添加如下内容并保存。
#syslog测试
kern.info
(2)使修改生效。执行如下命令使修改后的配置生效。
# killall -HUP syslogd
(3)测试修改的效果。执行如下命令模拟kern.info消息。
logger kern.info "test info"
# cat /var/log/kern_test.log
Sep
12.2.4 清空日志文件内容
随着系统运行时间越来越长,日志文件的大小也会随之变得越来越大。如果长期让这些历史日志保存在系统中,将会占用大量的磁盘空间。用户可以直接把这些日志文件删除,但删除日志文件可能会造成一些意想不到的后果。为了能释放磁盘空间的同时又不影响系统的运行,可以使用echo命令清空日志文件的内容,命令格式如下所示。
echo > 日志文件
例如要清空/var/log/message日志文件的内容,可以使用如下命令:
# echo > /var/log/message
12.2.5 图形化日志工具——系统日志查看器
Red Hat Linux中提供了一个图形化的日志查看工具——系统日志查看器。在该工具中默认可以查看syslog中所配置的日志文件,用户也可以通过该工具打开其他日志文件,如图12.6所示。
除了查看日志外,系统日志查看器还可以利用查看菜单中的过滤器选项对日志进行过滤显示,如图12.7所示。
12.3 其 他 日 志
除syslog以外,Linux系统中还提供了大量的其他日志文件,在这些日志文件中也记录了非常重要的日志信息。在本节中将会对其中常用的dmesg、wtmp、btmp、.bash_history等系统日志文件以及应用程序日志进行介绍。
12.3.1 dmesg日志:记录内核日志信息
日志文件/var/log/dmesg中记录了系统启动过程中的内核日志信息,包括系统的设备信息,以及在启动和操作过程中系统记录的任何错误和问题的信息。下面是该文件内容的一个截取。
Linux version 2.6.18-92.el5 (brewbuilder@hs20-bc2-3.build.redhat.com) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-41)) #1 SMP Tue Apr
BIOS-provided physical RAM map:
0MB HIGHMEM available.
511MB LOWMEM available.
found SMP MP-table at 000f5470
Memory for crash kernel (0x0 to 0x0) notwithin permissible range
disabling kdump
Using x86 segment limits to approximate NX protection
On node 0 totalpages: 131056
DMI 2.3 present.
Using APIC driver default
ACPI: RSDP (v000 IntelR
ACPI: RSDT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x1fff3000
ACPI: FADT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x1fff3040
ACPI: MADT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x1fff7180
ACPI: DSDT (v001 INTELR AWRDACPI 0x00001000 MSFT 0x0100000d) @ 0x00000000
可以通过该日志文件来判断某些硬件设备在系统启动过程中是否被正确识别。例如,用户新添加了一个磁盘,如果该磁盘设备能被Linux系统正确识别,那么在dmesg日志文件中应该能够看到它的信息,如下所示。
Probing IDE interface ide0...
hda: Maxtor 6Y080L0, ATA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
Probing IDE interface ide1...
ide1 at 0x170-0x177,0x376 on irq 15
hda: max request size: 128KiB
hda: Host Protected Area detected.
hda: Host Protected Area disabled.
hda: 160086528 sectors (81964 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)
hda: cache flushes supported
hdc: max request size: 512KiB
hdc: cache flushes supported
ide-floppy driver 0.99.newide
可以看到,新添加磁盘型号为MAXTOR STM3160212A,对应的设备文件名为/dev/hdc,大小为160041MB。
12.3.2 用户登录日志
/var/log/wtmp和/var/log/btmp是Linux系统上用于保存用户登录信息的日志文件。其中wtmp用于保存用户成功登录的记录,而btmp则用于保存用户登录失败的日志记录,它们为系统安全审计提供了重要的信息依据。这两个文件都是二进制的,无法直接使用文本编辑工具打开,必须通过last和lastb命令进行查看。如果查看成功的用户登录记录,可以使用如下命令:
# last
//用户sam于9月9日10点10分从客户端192.168.7.174登录服务器,且尚未退出登录
sam
// 用户kelvin于9月8日20点01分从客户端192.168.6.217登录服务器,现已经退出,
kelvin
ken
sam
sam
ken
//用户sam于9月8日10点45分从本地登录服务器,且尚未退出登录
sam
sam
sam
sam
sam
sam
//系统上一次重启的时间为9月8日10点35分
reboot
wtmp begins Mon Sep
每行输出结果中都包括登录用户名、机器名或IP、尝试登录时间、运行时间等信息,其中still logged in表示该登录会话依然存在,用户并未退出登录。如果要查看不成功的用户登录记录,可使用如下命令:
# lastb
//用户ken于9月8日23点08分试图登录系统失败
ken
sam
Kelvin
sam
//btmp文件自9月8日10点47分开始记录日志
btmp begins Mon Sep
系统管理员应该定期查看上述两个日志文件,检查是否有某些非法用户登录系统或者尝试登录系统,以确保系统安全。
12.3.3 用户操作记录
默认情况下,在每个用户的主目录下都会有一个.bash_history的文件,在该文件中保存了该用户输入的所有命令的记录,管理员可以通过该文件查看某个用户到底做过什么操作。例如要查看sam用户的操作记录,如下所示。
# cat /home/sam/.bash_history
su – root
iostat -t -d -k -p
man iostat
iostat -d -k -x 1 100
sar -s
...省略部分输出内容...
man sar
sar -n DEV 2 100
man sar
telnet localhost
cd /media/RHEL_5.2\ i386\ DVD/
ls
cd Server/
su – root
由文件内容可以看到,用户输入的每一条命令都会被作为一行日志在文件中被记录下来。系统管理员应该定期查看该文件,检查用户是否进行了一些非法操作。
12.3.4 应用日志
除了系统日志以外,Linux系统中的应用软件也有自己的日志文件。由于不同的应用软件都会有特殊的日志格式,限于篇幅原因,在这里不能逐一进行介绍,一般情况下这些日志都会存放于软件安装目录下的logs目录下。作为系统管理员,应该清楚如何使用这些日志文件,以便在软件出现故障时能快速找到有效的信息支持。例如,下面是Apache软件错误日志的一个内容截取。
//警告信息,进程id文件/usr/local/apache2/logs/httpd.pid被覆盖,上一次关闭可能是非正常的
[Mon Aug 11 22:27:34 2008] [warn] pid file /usr/local/apache2/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Mon Aug 11 22:27:34 2008] [notice] Apache/2.2.9 (Unix) configured -- resuming normal operations
//尝试执行目录/usr/local/apache2/cgi-bin/中的脚本
[Mon Aug 11 22:27:40 2008] [error] [client 127.0.0.1] attempt to invoke directory as script: /usr/local/apache2/cgi-bin/
[Mon Aug 11 22:27:40 2008] [error] [client 127.0.0.1] attempt to invoke directory as script: /usr/local/apache2/cgi-bin/
[Mon Aug 11 22:27:41 2008] [error] [client 127.0.0.1] attempt to invoke directory as script: /usr/local/apache2/cgi-bin/
[Mon Aug 11 22:27:41 2008] [error] [client 127.0.0.1] attempt to invoke directory as script: /usr/local/apache2/cgi-bin/
//接收到SIGHUP信号,准备重启Apache
[Mon Aug 11 22:29:12 2008] [notice] SIGHUP received.
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[Mon Aug 11 22:29:12 2008] [notice] Apache/2.2.9 (Unix) configured -- resuming normal operations
[Mon Aug 11 22:29:14 2008] [error] [client 127.0.0.1] attempt to invoke directory as script: /usr/local/apache2/cgi-bin/
// 找不到文件/usr/local/apache2/htdocs/cgi-bin
[Mon Aug 11 22:29:40 2008] [error] [client 127.0.0.1] File does not exist: /usr/local/apache2/htdocs/cgi-bin
[Mon Aug 11 22:29:43 2008] [error] [client 127.0.0.1] File does not exist: /usr/local/apache2/htdocs/favicon.ico
[Mon Aug 11 22:30:01 2008] [error] [client 127.0.0.1] attempt to invoke directory as script: /usr/local/apache2/cgi-bin/
关于Apache日志更多的说明,请参考16.3.6节的内容。