Ict-innovation/LPI/108.2
考生应该能够配置 syslog 守护进程。此目标还包括配置日志守护进程以将日志输出发送到中央日志服务器或作为中央日志服务器接受日志输出。
关键知识领域
- syslog 配置文件
- syslog
- 标准设施、优先级和操作
/var/log/ 目录
许多服务通过将消息写入日志文件来报告其活动。一些服务,如 Apache、Samba 和 X 服务器直接写入自己的日志文件。许多其他服务通过名为 syslog 的日志服务进行日志记录。此服务由两个守护进程提供 - syslogd 处理应用程序日志,而 klogd 处理内核日志。使用 syslog 的优点是它提供了一个中央位置来控制记录的消息将去往何处。
大多数日志文件位于 /var/log 目录中。您在此处找到的实际文件集在 Linux 发行版之间会有所不同,但您通常会找到以下文件:
cron跟踪cron执行时生成的消息
mail与mail相关的消息
messages记录所有消息,除了私人身份验证 authpriv、cron、mail 和 news
secure记录所有失败的身份验证、添加/删除的用户等。
最重要的日志文件是 messages,其中记录了大多数活动。
/etc/syslog.conf 文件
当 syslogd 启动时,它会读取配置文件 /etc/syslog.conf。(可以使用 -f 选项启动 syslogd 以指定备用配置文件。)此文件包含规则列表。每个规则的第一部分标识规则适用的消息,每个规则的第二部分指定一个操作(对消息执行的操作)。
Syslog 可以将消息发送到
- 一个文件
- 一个已登录的用户
- 远程机器上运行的另一个 syslog
图 108.2-1:/etc/syslog.conf 中规则的格式
使用设施和优先级来标识消息。设施指示消息的大致来源,优先级指示消息的重要性。
可用设施和优先级如图所示。它们是预定义的,无法扩展;但请注意,为一般使用提供了 local0 到 local7 设施。
有效的优先级是:(从最高到最低)
- emerg
- alert
- crit
- err
- warning
- notice
- info
- debug
此外,通配符 '*' 可以用于表示“所有设施”或“所有优先级”。
考虑 syslog.conf 中以下四个示例行。(这些并非代表一个可工作的配置,只是为了提供语法示例。另外,行号仅供参考,它们不是文件的一部分)
1. cron.notice/var/log/cron
2. *.*;authpriv.none/var/log/messages
3. mail.*~/var/log/mail
4. *.crit*
5. *.crit@neptune
6. lpr.=info/var/log/lpr
第 1 行匹配来自 cron 设施的通知优先级或更高优先级的消息。这些消息将附加到 /var/log/cron
第 2 行匹配所有消息,除了来自 authpriv 设施的消息(注意此处使用了 'none')。
第 3 行匹配来自 mail 设施的所有消息。这些消息将附加到 /var/log/mail。文件名前面的 '~' 会抑制 syslog 的正常行为,即在写入每条消息后刷新输出文件。刷新会降低 I/O 性能,可能不适用于低优先级、高容量消息,例如邮件守护进程可能会生成的那些消息。
第 4 行匹配级别为 crit(或更高)的所有消息,并将它们写入所有已登录的用户。(在服务器上,这不太可能是引起任何人注意的有效方法!)
第 5 行显示如何将消息转发到另一台机器(示例中的“neptune”)。
第 6 行显示了使用 '=' 来匹配单个优先级。
请注意,一条消息可以匹配多条规则,在这种情况下,将执行多个操作。
/etc/syslog.conf 的清单
# 将所有内核消息记录到控制台。 # 记录其他任何内容都会使屏幕混乱。 # kern.* /dev/console # 记录所有内容(除了邮件)的 info 级或更高。 # 不要记录私人身份验证消息! *.info;mail.none;news.none;authpriv.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
# 机器。 *.emerg * *.emerg @10.1.1.254
local7.* /var/log/boot.log # news.=crit /var/log/news/news.crit news.=err /var/log/news/news.err news.notice /var/log/news/news.notice |
请注意,如果更改了 syslog.conf 文件,则应向 syslogd 守护进程发出信号,以重新读取它
# pkill -HUP syslogd |
使用中央日志服务器
在大型网络中,将消息转发到安全的中央服务器可能很有用。这样做有两个优点。首先,如果所有消息都在一个地方,则更易于进行日志文件分析。其次,它使入侵者更难通过篡改受损机器上的日志文件来“掩盖自己的行踪”。如果消息也已转发到另一台机器,则入侵者将无法删除它们,除非他也能破坏该机器。
为此,在“上游”机器上,在 syslog.conf 文件中,只需为要转发的消息指定“@10.1.1.254”或“@loghost”形式的操作。(“loghost”必须是中央日志服务器的可解析名称)。在“下游”机器上,您必须使用 '-r' 标志启动 syslogd,以告诉它监听(在 UDP 端口 514 上)转发消息。这不是默认设置,因此您可能需要修改启动脚本(可能是 /etc/init.d/syslog)以添加此标志。
logger 命令
命令行实用程序 logger 可用于将消息发送到 syslogd。它可以在交互式模式下使用(通常用于测试您的 syslog 配置),也可以在 shell 脚本中使用。
示例
# logger "来自客户端的无效请求" |
默认情况下,logger 会以 user.notice 的优先级发送消息,在典型的系统上,这些消息最终会出现在 /var/log/messages 中
# tail -1 /var/log/messages Sep 15 07:07:04 neptune chris: 来自客户端的无效请求 |
在此消息中,“neptune”是主机名,“chris”是用户名。
logger 实用程序默认以 user.notice 的优先级记录消息。可以使用 '-p' 选项指定不同的优先级。在下面的示例中,我们以 local4.notice 的优先级记录消息。local4 设施是为一般使用定义的八个设施(local0 到 local7)之一。这些可以用来创建您自己的日志文件。(但请注意,RedHat 使用 local7 在 /var/log/boot.log 中记录启动时信息)。
首先,将以下行添加到 /etc/syslog.conf
local4.* /dev/tty1
重新启动 syslogd 或强制它重新读取其配置文件,如下所示
#pkill -HUP syslogd |
现在,来自 local4 设施的消息将写入终端 /dev/tty1
#logger -p local4.notice "此脚本正在写入 /dev/tty1" |
以下是对所用文件、术语和实用程序的部分列表
- syslog.conf
- syslogd
- klogd
- logger