《2022年Linux系统日志与日志文件 .pdf》由会员分享,可在线阅读,更多相关《2022年Linux系统日志与日志文件 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 10 章 系统日志与日志文件系统守护进程、内核和各种工具都会产生一些数据,这些数据被记录下来,最终保存在容量有限的硬盘上。其中大部分数据有用的寿命都是有限的,因此需要对它们进行汇总、压缩、存档并且最终扔掉。10.1 日志记录的策略日志记录的策略随站点不同而不同。常见的方案包括以下几种:立刻扔掉所有数据;定期重新设置日志文件;轮换日志文件,把数据保留一定的时间;将日志压缩并保存到磁带或其他永久性介质上。对于您的站点来说,正确的选择取决于磁盘空间有多大,您的安全意识有多强。即使具有充足的磁盘空间,还是不要让日志文件过快增长。无论选择何种方案,都必须用cron 自动维护日志文件。有关该守护进程的
2、详细内容,请参考第8 章。10.1.1 扔掉日志文件我们并不建议扔掉所有的日志信息。遭受到安全问题的站点常常会发现,日志文件提供了非法入侵的重要证据。日志文件还有助于提醒您有关硬件和软件方面的问题。总而言之,如果磁盘空间足够的话,建议至少保存数据一个月,然后才可以丢弃。在实际生活中,您可能需要很长一段时间才会意识到站点已经被黑客攻破,这时就需要查看以前的日志。如果有必要回顾更远的过去所发生的事件,那么可以从备份磁带上恢复较早的日志文件。有些管理员听任日志文件任意增长,直到它们变成麻烦后才将其清除并从零开始。这种方案比一点儿数据都不保存要好,但这样做无法保证日志记录项能够存留任何特定的时间长度。
3、磁盘的平均利用率也要比使用其他管理方案的利用率高。在很个别的情况下,一个站点决定保留某些日志文件,可能不是为了任何有益的目的,而更多是为了应付传票。处于这种境地的一个站点可能会留着几周的日志数据,但是它或许要保证这些文件一定不能被存到永久性的介质上。有一个这样的案例:微软已经不止一次受到指控,其管理日志文件和电子邮件的政策破坏性过强。原告称,微软的数据保留政策无异于毁掉证据,尽管删除行动(或者至少是删除策略)是在法律诉讼之前就已经有了。遗憾的是,目前断定 法 庭 将 最 终 如 何 回 应 这 些 诉 讼 还 为 时 过 早1。 在 美 国 ,Sarbanes-Oxley法案最近规定了保留记录
4、的新要求,参考 30.12.8 节。10.1.2 轮换日志文件把每周或者每月的日志信息保存在一个单独的文件里,这是一种通常(但不是通行)的做法。这些周期性的文件都会保留特定一段时间,然后被删除。我们专门在一台中央日志主机上划了一个硬盘分区( /var/log)给日志文件。在每个轮换周期结束的时候,有一个脚本或者工具程序更改每个文件的名字,然后把较早的数据向文件链的结尾推。例如,假设某个日志文件的名字叫做logfile ,则它的备份文件可能叫做logfile.1 、logfile.2 ,依此类推。如果每周轮换一次,并且保存8 周的数据,那么就会有一个logfile.8 文件但没有logfile.
5、9 文件。每周随着logfile.7文件覆盖 logfile.8 文件, logfile.8 中原来的数据就没了。稍微麻烦一点,压缩一下数据就能延长保存的时间。您可以运行zgrep,不必解压压缩文件,就能搜索压缩文件。下面的脚本就可以实现一个适当的轮换策略:呃对于某些日志文件来说,权属信息很重要。您可能需要以日志文件属主的身份,而不是以root 的身份从cron 运行自己的轮换脚本,或者要在这些命令中加上chown 命令。大多数Linux发行版本(包括我们全部的示例版本)都支持一种叫做 logrotate 的很不错的日志轮换工具,我们将从 10.3 节开始介绍它。比起编写您自己的脚本来说,它要
6、容易得多(也可靠得多),如果您的发行版本没有包含它,那么还是值得找到并安装它的。某些站点用日期而不是序列号来标识日志文件,例如logfile.tues 或logfile.2005.04.01 。这种系统实现起来稍微困难一点儿,但如果需要频繁用到旧的日志文件,那么还是值得这么做的。在Perl 里设置用日期给文件起名字要比在sh中容易得多。一种不需要任何编程技巧的习惯用法是:mv logfile logfile.date +%Y.%m.%d 这种方法也有能让ls 命令对日志文件按时间顺序进行排序这一优点。 (ls 的-t 选项让它把任何目录下的文件按修改时间排序,但是如果这些文件没有要求就这样自行
7、安排也挺不错。)有些守护进程的日志文件自始至终都处于打开状态。由于文件系统工作方式的缘故,我们举例的脚本不能用于这样的守护进程。日志记录数据不会保存到再次创建的logfile 中,而是继续保存到logfile.1里;即使在将文件重新命名之后,对原来文件的活动引用仍然存在。若想安装一个新的日志文件,则必须向守护进程发信号或者杀死并重启它。参考本书的相关章节(或者您的手册)确定在每种情况必须采取什么样的步骤。下面的例子在上述例子的基础上进行了修改,它同时使用了压缩和信号:其中的 signal 代表向程序发出的写日志文件的适当信号,pid 是它的名师资料总结 - - -精品资料欢迎下载 - - -
8、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 进程ID。该信号可以直接写入脚本,但必须动态判断守护进程的PID , 这 可 以 通 过 读 取 该 守 护 进 程 留 下 的 文 件 ( 比 如 /var/ run/syslogd.pid,这将在下面给予介绍)或是使用kill的变体killall来实现, killall 能够在进程表中查找PID。例如,下面的命令killall -e -HUP syslogd 等价于kill - HUP ,cat /var/run/syslogd
9、.pid, 10.1.3 存档日志文件除非您就是希望避免留下书面记录,否则应该在常规的系列备份中包含有日志文件。因为它们包含的信息对于调查安全事故来说至关重要,所以在您的转储频度允许的情况下,要以最高频度备份它们。日志文件变化很频繁,所以它们能够代表要保存在增量备份上的系统信息的重要部分。在设计您的日志政策和您的备份策略时要记得它们两者之间的相互作用关系。有关备份的更多信息,可参见第9章。除了作为例行备份的一部分之外,日志也可以存档到另一套单独的磁带上。相比之下,单独的一套磁带使用起来不方便,但它们带来的建档负担要轻,同时又不影响您循环使用转储磁带的能力。在使用单独的磁带时,我们建议您采用ta
10、r 格式,并编写一个脚本来自动执行备份方案。10.2 Linux 的日志文件传统的 UNIX系统往往因为它们做日志的方法不一致,甚至还有点儿怪异而受到批评。幸运的是,虽然Linux 系统的每一种发行版本都有自己的一套给日志文件命名和分类的方法,但是一般而言Linux要好一点儿。 Linux 的软件包大多将它们的日志信息记录到/var/log目录下的文件里。 在有些发行版本上, 个别日志也保存在/var/adm 里。现如今,大多数程序都把它们的日志项发到一个称为syslog 的中央清理系统, syslog 将在本章后面予以介绍。默认的syslog 配置一般将这些信息的大部分转储到/var/log
11、 中的某个地方。请检查系统日志的配置文件 /etc/syslog.conf,找出这些信息究竟存在什么地方。有关syslog.conf 文件的格式,请参考10.4 节。表 10.1 总结了一些在我们举例的系统中较为常见的日志文件的有关信息。具体有如下几项:存档、汇总或截断的日志文件;创建各个日志文件的程序;有关如何指定每个文件名的指示;我们认为留意或者清理的合理频率;使用日志文件的发行版本(在我们的例子中出现过);文件内容的说明。除非特别说明,否则文件名都是相对于var/log 而言的。“ 出处 ” 一列中的字符说明了日志文件的指定方法:S 代表使用 syslog的程序, F 代表使用一个配置文
12、件的程序,而H 则代表文件名是否直接包含在代码中。“ 频率 ” 一列表明了我们建议的清理频率。“ 发行版本 ” 一列给出了该项适用的发行版本。虽然各个发行版本上日志文件的所属关系和模式都有不同,但日志文件一般由root 所有。就我们看来, 大多数日志的模式都应该是600(只有属主有读写权限),因为它们的内容对于黑客来说可能有帮助。如果用户的水平相当高,那么能够查看日志对用户会有好处。在这种情况下,放开日志文件的部分权限也是合理的。专为日志建立一个用户组,把日志文件的属组设为这个用户组,让这个用户组的成员都能读取日志文件,这是另一种合理的做法。您可以把本地的系统管理员加入到这个用户组里,让他们不
13、必使用sudo 命令就能看到日志文件的内容。如果站点有一个初级系统管理员,他没有完全的sudo 特权,这样的安排就特有用。至少,应该限制用户对secure 、auth.log 和 sudo.log 文件不经意地查看。绝对不要把任何日志文件的写权限交给属主之外的任何人。值得说明的一点是,表10.1 中给出的日志文件大多数都是由syslog维护的,但是syslog 的默认配置则随系统的不同而变化很大。采用了比较一致的 /etc/syslog.conf 文件后,各 Linux 发行版本上的日志文件看上去就相当相似了。表 10.1 日志文件列表文件程序出处a频率a发行版本a内容auth.log su等
14、bS M DU 授权apache2/* httpd第 2 版F D SDU Apache HTTP服务器的日志(第 2 版)boot.log rc 脚本FcM RF 系统启动脚本的输出boot.msg 内核H - S 内核消息缓冲的转储cron cron S W RF cron 的执行情况和出错信息cups/* CUPS F W 所有与打印有关的消息( CUPS)daemon.log 许多S W DU 所有守护进程功能的消息debug 许多S D DU 调试输出dmesg 内核H - RFDU 内核消息缓冲的转储dpkg.log dkpg F M DU 软件包管理日志faillog login
15、 H W SDU 不成功的登录企图httpd/logs/* httpd F D RF Apache HTTP服务器的日志(在 /etc 下)续表文件程序出频发内容名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - 处a率a行版本akern.log 内核S W DU 所有 kern 功能的消息lastlog login H - 所有每个用户上次登录的时间(二进制)mail* 与 mail 有关的S W 所有所有 mail 功能的消息
16、messages 许多S W 所有经常是主要的系统日志文件rpmpkgs cron.daily/rpm H D RF 已安装的 RPM 软件包清单samba/* smbd 等F W - Samba(Windows/CIFS文件共享)secure sshd、sudo等S M RF 保密的授权消息syslog 许多S W DU 经常是主要的系统日志文件warn 许多S W S 所有的警告 /出错级的消息wtmp login H M 所有登录记录(二进制)Xrog.n.log Xorg F W RFS X 窗口服务器的出错信息yum.log yum F W RF 软件包管理日志a出处: S=sysl
17、og, H= 硬连接, F=配置文件。频率: D每天, W 每周, M 每月。发行版本: RRed Hat Enterprise Linux,F = Fedora ,DDebian, SSUSE ,U = Ubuntu 。bpasswd、 login和 shutdown 也可以写入授权日志。在 Red Hat和 Fedora 系统上,它在 /var/adm里。c实际是通过syslog 做日志,但是在 /etc/initlog.conf中配置功能和级别。10.2.1 特殊的日志文件大多数日志是文本文件,当发生“ 感兴趣的 ” 事件时,就会向这些文件中写入日志记录行。但是表10.1 中列出的几个日
18、志的来龙去脉却非常不同。/var/log/wtmp中包含用户登录系统和退出系统的记录,也包含了表明系统何时重启或者关机的记录项。因为新的记录项只是简单地追加到文件的末尾,所以它是一种相当普通的日志文件。不过,wtmp文件是以二进制形式保存的。使用last 命令可以解读这些信息。尽管 wtmp 的格式不一般, 但是应该像其他任何日志文件那样,轮换或者截断这个文件,因为它的自然特性是无限制的增长。/var/log/lastlog 包含的信息类似于/var/log/wtmp 中的信息,但是它只记录每个用户上次登录的时间。它是一个稀疏的二进制文件,以 UID作为索引。如果您的UID 是以某种数字序列来
19、指定的,那么虽然这肯定对现实世界没什么影响,但这个文件会变得小一些。lastlog 文件不需要轮换,因为除非有新用户加入,否则它的大小保持不变。参见 9.3.1 节的脚注了解有关“ 稀疏 ” 文件的更多知识。10.2.2 内核和启动日志内核和系统启动脚本反映出了在日志领域内的一些特殊的挑战。对于内核来说,问题在于既要创建有关引导进程和内核操作的永久记录,又不能增加对任何特殊的文件系统或者文件系统组成的依赖性。对于启动脚本而言,挑战在于既要捕捉启动过程的连贯描述,又不能总是试图把任何系统守护进程都和启动日志文件扯到一块,干扰任何程序自己的日志机制,或是让启动脚本做两份日志项或者把日志输出重定向。
20、内核的日志机制是通过让内核把它的日志项保存在一个大小有限的内部缓冲区来做到的。缓冲区要足够大,以便能放得下内核在引导时的活动所产生的全部消息。一旦系统全部启动以后,用户进程就可以访问内核的日志缓冲,最终处理它的内容。各发行版本一般是运行 dmesg 命令,并把它的输出重定向到/var/log/dmesg(RHEL 、Fedora、Debian 和 Ubuntu)或者 /var/log/boot.msg (SUSE) 。这是查看最近启动过程信息的最好的地方。内核当前运行的日志机制是由一个叫做klogd 的守护进程处理的。klogd 的功能实际上是dmesg功能的超集, 除了转储内核的日志并退出之
21、外,它还可以在内核缓冲区内的消息产生的时候读取它们,并将其发送到一个文件或者syslog。在正常的运行方式下,klogd 采取后一种模式。 syslog 根据对 “kern”的指令来处理这些消息(一般把它们发送到 /var/log/messages) 。我们举例用的发行版本的启动脚本在一开始转储日志消息的时候,都不用 dmesg 的-c 标志,所以虽然读取了内核的消息缓冲区,但并不清除它。当klogd 启动的时候,它在缓冲区里发现了和dmesg 见到的一样的一组消息,于是把它们发送给syslog。出于这个原因, 有些日志项既会出现在dmesg 或者 boot.msg 文件里,又会出现在如/va
22、r/log/messages这样由 syslog 管理的文件里。内核日志机制的另一个问题是要在系统控制台做适当的管理。伴随系统的引导,在控制台上输出信息是很重要的。不过,一旦系统已经启动了,控制台的消息可能与其说是帮助,不如说是烦人,如果用控制台登录的话就更是这样了。dmesg和 klogd 都可以让您用一个命令行标志设置内核的控制台日志级别。例如:$ sudo dmesg-n 2 7 级提供的信息最多, 还包括调试信息。 1 级只包含内核的“panic(恐慌) ” 消息(编号小的级别最严重)。所有的内核消息继续进入中央缓冲区(也进入syslog) ,而不管它们是否被转发到控制台。名师资料总结
23、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - 内核在 /proc/sys 目录下提供了一些控制文件,让大量重复发生的日志消息在来源处就被阻塞。参见28.4 节,了解通过设置哪些内核参数 来 实 现 一 般 控 制 机 制 的 更 多 信 息 。 这 些 专 门 的 控 制 文 件 是/proc/sys/kernel/printk_ratelimit和/proc/sys/kernel/printk_ratelimit_burst ,前者指
24、定在启动阻塞之后内核消息之间必须间隔最少多少秒(默认为 5s) ,后者规定在启动阻塞之前允许多少组消息通过(默认为 10) 。这两个参数都是建议性的,所以它们不会绝对保证能制止大量消息。遗憾的是, 系统启动脚本的日志机制没有内核的日志机制管理得好。 Red Hat Enterprise Linux采用一条叫做initlog的命令来捕获启动命令的输出,并把它发送给syslog。遗憾的是,无论什么时候运行命令,都必须明确调用 initlog ,所以确实要以某种复杂性为代价才能捕获到信息。这些日志项最终还是会进入/var/log/boot.log 。我们举例用的其他系统都没有连续捕获启动脚本的历史输
25、出。个别命令和守护进程能记录下来一些信息,但是大多数信息都不作日志记录。Fedora 以前使用和Red Hat 一样的 initlog 系统,但是现在这条提交日志记录的命令已经从启动脚本中注释掉了。 幸好还有一个工具函数的中央库/etc/init.d/functions ,您可以在那里去掉initlog 的注释行重新启用它们。10.3 logrotate: 管理日志文件Erik Troan 提供了一种优秀的工具logrotate,它实现了多种多样的日志管理策略,而且在我们举例的所有发行版本上都是标准应用。logrotate 的配置文件由一系列规范组成,它们说明了要管理的日志文件组。出现在日志文
26、件规范之外的选项(诸如下面例子中的errors、rotate 和 weekly)适用于后面所有的规范,它们可以在特定日志文件的规范内被覆盖,也可以在文件的后面重新指定,修改默认值。下面是一个有点儿故意人为的例子,它设定了几种不同的日志文件:这一配置每周轮换一次/var/log/messages文件。它保持了这个文件的5 个版本,并且在每次重置文件的时候通知syslogd。Samba 的日志文件(这样的文件可能有好几个)也每周轮换一次,但不是移到一边后开始一个新的,而是复制以后截短。只有在轮换了所有的日志文件之后,才向守护进程Samba发 HUP 信号。表 10.2 列出了 logrotate.
27、conf 最有用的选项。表 10.2 logrotate 的选项选项含义compress 压缩日志文件的所有非当前版本daily, weekly, monthly 以指定的时间安排来轮换日志文件delaycompress 压缩除了当前和最近之外的所有其他版本endscript 标记 prerotate 或者 postrotate 脚本结束errors emailaddr向指定的 emailaddr 发送出错通知邮件missingok 如果日志不存在,不会发出抱怨notifempty 如果日志为空,则不轮换它olddir dir指定要放入dir 里的日志文件老版本postrotate 引入在轮换
28、过日志之后要运行的脚本prerotate 引入在进行任何改动之前运行的脚本rotate n在轮换方案中包括n 个版本的日志sharedscripts 只为整个日志组运行一次的脚本size=logsize如果日志文件大于logsize(例如, 100K,4M)才轮换logrotate一 般 每 天 由cron 运 行 一 次 。 它 的 标 准 配 置 文 件 是/etc/logrotate.conf ,但是在 logrotate 的命令行上一次可以出现多个配置文件(或者包含配置文件的目录)。这一特性被我们所举的发行版本充分利用,它们规定/etc/logrotate.d 目录是保存logrota
29、te 配置文件的标准位置。懂得logrotate 的软件包(这种软件有很多)能把执行日志管理指令作为它们安装过程的一部分,这大大地简化了管理工作。除了 logrotate 之外, Debian 和 Ubuntu 还提供了一种更简单的程序,它叫做 savelog,能够管理单个文件的轮转工作。它比logrotate 更直接,不用(或者不需要用)配置文件。有些软件包更愿意使用它们自己的 savelog配置,而不用logrotate。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共
30、 12 页 - - - - - - - - - 10.4 syslog :系统事件的日志程序syslog 最初是由 Eric Allman 编写的,它是一个综合的日志记录系统。syslog 有两项重要的功能: 使程序员从繁重、 机械的编写日志文件代码的工作中解脱来,使管理员更好地控制日志的记录过程。在出现syslog 之前,每个程序都有自己的日志记录策略。系统管理员对保存什么信息或是信息保存在哪儿没有控制权。syslog 相当灵活,它能让消息按照其来源和重要性(“ 严重性级别 ” )来排序,也能把消息送到各种目的地:日志文件、用户的终端、或者甚至是别的计算机。 syslog 集中管理网络日志的
31、功能是它最有价值的特性之一。10.4.1 syslog的其他替代方案虽然 syslog 已经长期主导UNIX 和 Linux 的日志系统,但是人们已经开发出了替代它的几种方案,试图解决它的一些缺点。 syslog-ng(下一代 syslog)就是这其中之一, 它现在成为SUSE 系统上默认采用的日志工具。从配置的观点来看, 它和标准的syslog 有很大的不同,我们在本书里就不详细介绍它了。如果想在非SUSE的系统上试试,可以从 获得它。syslog-ng 增加了更多的配置功能、能基于消息内容进行过滤,确保了消息一致性,以及在消息通过网络转发时针对防火墙的限制提供了更好的支持。(圣地亚哥超级计
32、算中心的)SDSC Secure Syslog 也叫做高性能syslog。它通过实现RFC 3195 的规范,提供了一种“ 达到举证水平 ”的审计系统。它的设计考虑到了大流量站点的需要,包含了大量性能优化措施。 您可以从 获得它的源代码。10.4.2 syslog的体系结构syslog 包括 3 个部分:syslogd,日志守护进程(及其配置文件/etc/syslog.conf);openlog 等,将消息提交给syslogd 的库例程;logger,一条从 shell 提交日志记录项的用户级命令。在下面的讨论中,我们先介绍syslogd 的配置,然后简要说明如何从Perl 脚本中使用sysl
33、og。syslogd 在系统引导时启动并连续运行,它不能用inetd 来管理。懂得syslog 的程序把日志项 (使用 syslog 库例程)写到专门的文件/dev/log中,这是一个UNIX 的域套接口。 syslogd 从这个文件中读取消息,参考其配置文件,并将各条信息分发到合适的目的地。挂起信号( HUP,信号 1)可以让 syslogd 关闭它的日志文件,重新读 取 它 的 配 置 文 件 , 并 再 度 开 始 日 志 记 录 。 如 果 用 户 修 改 了/etc/syslog.conf,那么必须向syslogd 发送一个挂起信号来使修改生效。 TERM 信号将使 syslogd
34、退出。syslogd 将它的进程ID 写入到文件 /var/run/syslogd.pid 里。这一约定使得从一个脚本向syslogd 发送信号变得比较容易。例如,下面的命令将发送一个挂起信号:# kill- HUP ,/bin/cat /var/run/syslogd.pid, 试图压缩或者修改一个已经由syslogd 打开以供写入信息的日志文件是不太安全的,可能会导致不可知的结果。恰当的步骤是把老的日志移到别处,重新创建日志,权属关系和权限都保持不变,然后向syslogd 发送一个 HUP 信号。这个过程用logrotate 很容易就能实现,参考 10.3 节的例子。10.4.3 配置 s
35、yslogd 配置文件 /etc/syslog.conf 控制着 syslogd 的行为。这是一个格式相当简单的文本文件。空白行和以字符“#”开始的行都被忽略。基本格式为:selector action例如,下面的一行:mail.info /var/log/maillog 将把来自电子邮件系统的信息保存在文件/var/log/maillog 中。selector 用语法 facility.level 指明正在发送日志消息的程序(即“ 设备facility”)和消息的严重性级别。设备的名称和严重性级别必须从已定义值的一个简短列表中选择,程序不能使用自己定义的值。设备分别为内核、常用应用程序组、以
36、及本地编写的程序进行定义。任何其他程序则归为普通设备“ 用户( user)” 一类。selector 可以包含特殊的关键字*和 none,其含义分别为 “ 所有的 ” 或“ 什么都没有” 。 selector 可以包括多个用逗号分开的设备。多个selector 可以用分号组合起来。一般而言, selector 相互之间为 “ 或( OR)” 的关系,和某个selector匹配的消息将由同一行的action 处理。但是,不管同一行中其他的selector 是如何定义的, 只要有一个带有none 级别的 selector 就会排除列出的设备。这里有几个格式化和组合selector 的例子:表 10
37、.3 列出了有效的设备名。目前的设备有21 种。syslogd 本身可以产生时间戳消息,如果syslog.conf 中出现了 “mark”设备(facility )为其指定的一个目的地,那么会记录这些消息。时间戳可以帮助用户确定机器是在早上3:00 和 3:20 之间崩溃的, 而不仅仅是 “ 昨天晚上的某个时间” 。这个信息在调试有规律发生的问题时有很大用处。例如,许多站点都经历过当清洁工在深夜插上吸尘器电源时发生跳闸而导致神秘崩溃的事。表 10.3 syslog 的设备名设备( facility )使用该设备的程序名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
38、- - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - - - - - - - * 除了 “mark”之外的所有设备auth 与安全和授权有关的命令authpriv 敏感 /保密的授权消息acron 守护进程 cron 续表设备( facility )使用该设备的程序daemon 系统守护进程ftp FTP 守护进程, ftpd kern 内核local0-7 本地消息的8 种类型lpr 行式打印机的假脱机系统mail sendmail 以及其他与电子邮件相关的软件mark 定期产生的时间戳news Usenet 新闻系统syslog
39、 syslogd 内部消息user 用户进程(如果没有指定,这将是默认值)uucp 为 UUCP 保留,并未使用a所有与授权有关的消息都敏感。authpriv 消息和 auth消息不应该让任何人都能读取。如果系统十分繁忙, 其他日志消息通常可以提供充分的时间戳信息。但在凌晨的几个小时并不总是这种情况。syslog 的严重性级别按照重要性递减的顺序在表10.4 中列出。消息的严重性级别指明了它的重要性。各个级别间的区别有时候显得比较模糊。 在 notice 和 warning 之间(以及在 warning 和 err 之间)有一条清晰的界限,但是alert 和 crit 相比,在所表达的含义上准
40、确的细微差别则有点要靠猜测。表10.7 列出了各种常用软件程序采用的特定级别。表 10.4 syslog的严重性级别(降序)级别大 致 含 义级别大 致 含 义emerg 恐慌状态warning 警告消息alert 紧急状态notice 需要调查的事项crit 临界状态info 提供信息的消息err 其他错误情况debug 仅供调试在 syslog.conf 文件中,这些级别指定了最低程度的重要性,只有重要性大于(包括)它的消息才会被记录下来。例如,来自电子邮件系统的一条警告级消息和mail.warning 匹配,也同样和mail.notice 、mail.info 、mail.debug、*
41、.warning 、*.notice 、*.info 和*.debug 匹配。如果 syslog.conf 文件指定了mail.info 消息应该被记录到某个日志文件中,那么mail.warning 消息也将被记录到该文件中。Linux 版的 syslog 对基本语法做了改进, 它也允许在优先级前面加上字符 =和!, 分别表示 “ 仅此优先级 ” 和“ 除此优先级及其以上级别” 的意思。表 10.5 给出了一些例子。表 10.5 在 syslog.conf 中限定优先级的例子选择符含义mail.info 选择与邮件相关的、 优先级为 info或者更高的消息mail.=info 只选择优先级为i
42、nfo 的消息mail.info;mail.!err 只选择优先级为info、notice 和warning 的消息mail.debug;mail.!=warning 选择除 warning 之外的所有优先级action 字段说明如何处理一则消息。表10.6 列出了可以选择的处理方法。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - 表 10.6 syslog 的动作动作( Action )含义filename把消息写入本地机器
43、上的一个文件里hostname把消息转发给主机hostname上的syslogd ipaddress把消息转发给IP 地址为 ipaddress的主机| fifoname把消息写入有名管道fifonameauser1,user2, 如果用户登录到了系统上,那么就把消息写在用户的屏幕上* 把消息写给目前已经登录的所有用户a. 参考 info mkfifo了解更多的信息。如果采取了filename(或者 fifoname)这样的动作,那么文件名应该用绝对路径。如果您指定了一个不存在的文件名,那么在首次有消息送到这个文件的时候,syslod 会创建它2。您可以在 filename 动作之前加一个短划
44、线“ -” ,表示在写完每条日志记录项后,不应该对文件系统执行sync。执行 sync 有助于在发生崩溃的时候尽可能多地保留日志信息,但是从磁盘吞吐上来看,代价又太大。如果用的是hostname 而不是 IP 地址,那么主机名必须能通过DNS或者 NIS 这样的转换机制解析出来。虽然一个 selector 可以包含多个设备(facility )和级别,但是却不能提供多个动作。为了把一则消息发送到两个地方(比如,到本地文件和到中央日志主机) ,您可以在配置文件中包含具有相同Selector的两行。因为 syslog 消息能够用来实施拒绝服务攻击,所以除非syslogd 以-r标志启动,否则它不会
45、接受来自其他机器的日志消息。默认情况下,syslogd 也会拒绝充当第三方消息转发器,从一台网络主机来的消息不会再被发给另一台网络主机。使用 -h 标志能够取消这一功能。 (如果您想让这些选项始终都被启用,那么对于RHEL 和 Fedora,可以在脚本 /etc/rc.d/init.d/syslog 中加上这些标志, 对于 Debian 和 Ubuntu,可以在脚本 /etc/init.d/sysklogd 里加上这些标志。 )10.4.4 设计站点日志方案配置日志记录以便把重要的系统错误和警告保存在每台计算机上的一个文件中,在一个小型站点中这样做足够了,就像前面我们用syslog 做的那样。
46、 syslog.conf 文件可以针对每台主机进行定制。在一个大型网络中,必须有中央日志记录。它使得大量信息保持在可管理的状态,而且运气好的话,破坏网络计算机安全的人可能无法访问到审计数据。黑客常常通过修改系统日志来擦去他们留下的痕迹。如果日志消息刚一产生就被转移到别的位置,那么想要破坏它就更难了。站点级的防火墙不应该让外部站点向syslogd 提交消息。但要清楚一点, 任何人都可以调用syslog,并且可以伪造从任何守护进程或者应用程序来的日志项。syslog 也使用 UDP 协议,而这个协议并不保证是可靠的,消息可能会丢失。选择一台稳定的计算机作为日志记录服务器,最好是有很好的安全措施而且
47、登录用户不多的一台机器。其他计算机可以使用保存在中央主机上的一个通用配置文件。因此,只需要维护两个版本的syslog.conf 文件。这样可以保持日志记录的完整性,但同时对于管理员来说又不再是个恶梦。有关在网络上分布文件的更多信息,请参见第 17 章。为了达到最好的安全性, syslog 服务器应该通过防火墙与网络的其余部分隔离开,只能让连到syslog 端口的网络连接通过,另外只能让得到允许可以向syslog 记录日志的主机访问syslog 服务器。根据周边的风险程度不同,可以从系统管理员的工作站用SSH 连接,让管理员更方便地检查日志。某些非常大的站点可能还需要给日志记录体系添加几个级别。
48、遗憾的是, syslog 的当前版本只能为最后一跳(hop)保留原来的主机名称。如果主机 “client”将某些日志项发送到主机“server ”,“server ”又将它们发送到 “master”,“master”只能知道消息来自“server ”,而不知道是来自 “client”。10.4.5 配置文件举例在 syslog 的配置上,不同的Linux 发行版本变化非常大。因为读懂syslog.conf 文件并不困难, 所以就不详细看我们举例的发行版本中使用的配置文件了,它们都很直观易懂。我们转而要看一些常见的方法,如果您做出了不同于系统默认的选择,那么可能想要以这些方法来设置日志功能。下面
49、有 3 个 syslog.conf 文件的实例,分别对应于小型网络上的一台单机、较大网络中的一台客户机和一台中央日志记录主机。中央日志记录主机称为 “netloghost ”3。一、单机下面是单机的基本配置:第 1 个非注释行把紧急(emergency)消息写到所有当前在线用户的屏幕上。在系统即将关闭时,shutdown 所产生的消息就是一个紧急级别消息的例子。第 2 行把重要( important)消息写入 /var/log/messages文件。 info 级别比warning级别低,因此daemon,auth.info 子句又包含了来自passwd、su 和守护进程的日志记录消息。第三行
50、把打印机错误信息写入到 /var/log/lpd-errs 。二、网络客户机网络客户机通常把重要的消息转发给中央日志记录主机:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - 这样的配置并没有在本地保存太多日志消息。值得一提的是,如果netloghost 已经关闭或者不可达,日志消息将会不可避免地丢失。用户可以在本地机器上保存某些重要消息的额外副本来应付这种可能发生的情况。在安装了许多本地软件的站点中,许多消息可能会被不恰当地记