Syslogd Linux和Unix命令

Sysklogd提供了两个系统实用程序,它们为系统日志记录和内核消息捕获提供支持。 支持internet和unix域套接字使此实用程序包可以同时支持本地和远程日志记录。

系统日志记录由源自库存BSD源的syslogd (8)版本提供。 内核日志记录的支持由klogd (8)实用程序提供,该实用程序允许以独立方式或作为syslogd的客户端进行内核日志记录。

Syslogd提供了许多现代程序使用的日志记录。 每个记录的消息至少包含一个时间和一个主机名字段,通常也是一个程序名称字段,但这取决于日志程序的可靠性。

尽管syslogd的源码已经被大量修改,但仍然需要一些注释。 首先,系统地尝试确保syslogd遵循默认的标准BSD行为。 第二个重要的概念是,这个版本的syslogd透明地与标准库中的syslog版本进行交互。 如果链接到标准共享库的二进制文件无法正常工作,我们需要一个反常行为的例子。

在启动时读取主配置文件/etc/syslog.conf或使用-f选项给出的替代文件。 任何以散列标记(``#'')开始的行和空行都将被忽略。 如果在分析过程中发生错误,则忽略整行。

概要

syslogd [ -a socket ] [ -d ] [ -f config file ] [ -h ] [ -l hostlist ] [ -m interval ] [ -n ] [ -p socket ] [ -r ] [ -s domainlist ] [ - v ] [ -x ]

选项

- 一个 插座

使用这个参数你可以指定syslogd必须监听的额外套接字。 如果你打算让一些守护进程在chroot()环境中运行,那么这是需要的。 您最多可以使用19个附加插座。 如果您的环境需要更多,则必须在syslogd.c源文件中增加符号MAXFUNIX 。 来自OpenBSD的人员在http://www.psionic.com/papers/dns.html描述了一个chroot()守护进程的例子。

-d

打开调试模式。 使用这个守护进程不会进行fork (2)在后台进行自我设置,但与保留在前台的相反,并在当前tty上写入很多调试信息。 有关更多信息,请参阅调试部分。

-f 配置文件

指定替代配置文件而不是/etc/syslog.conf ,这是默认配置文件。

-H

默认情况下,syslogd不会转发它从远程主机收到的消息。 在命令行中指定此开关将导致日志守护程序将收到的任何远程消息转发给已定义的转发主机。

-l 主机列表

指定一个主机名,该主机名只能用简单的主机名记录,而不能用fqdn记录。 可以使用冒号(``:'')分隔符指定多个主机。

-m 间隔

syslogd定期记录标记时间戳。 两条MARK线之间的默认间隔为20分钟。 这可以通过此选项进行更改。 将间隔设置为零将完全关闭。

-n

避免自动背景。 如果syslogdinit (8)启动和控制,那么这是特别需要的。

-p 插座

您可以指定替代的unix域套接字而不是/ dev / log

-r

此选项将使设施能够使用具有syslog服务的Internet域套接字从网络接收消息(请参阅(5))。 默认是不接收来自网络的任何消息。

该选项在sysklogd软件包的1.3版中引入。 请注意,默认行为与旧版本的行为方式相反,因此您可能必须将其打开。

-s 域名列表

指定一个应在记录之前剥离的域名。 可以使用冒号(``:'')分隔符指定多个域。 请注意,不可以指定子域名,但只能指定整个域名。 例如,如果指定-s north.de并且主机日志记录解析为satu.infodrom.north.de,则不会切断域,则必须指定两个域,如: -s north.de:infodrom.north.de

-v

打印版本并退出。

-X

接收远程消息时禁用名称查找。 当名称服务器运行在运行syslog守护进程的同一台机器上时,这可以避免死锁。

信号

Syslogd对一组信号作出反应。 您可以使用以下方法轻松发送信号到syslogd

kill -SIGNAL`cat / var / run / syslogd.pid`

SIGHUP

这让syslogd执行重新初始化。 所有打开的文件都关闭,配置文件(默认是/etc/syslog.conf )将被重新读取, 系统日志 (3)设备将再次启动。

SIGTERM

syslogd将会死亡。

SIGINTSIGQUIT

如果启用调试,则忽略它们,否则syslogd将会死亡。

SIGUSR1

打开/关闭调试。 只有在使用-d调试选项启动syslogd时才能使用此选项。

SIGCHLD

如果有些孩子出生,等待孩子们,因为墙上的信息。

配置文件语法差异

Syslogd的配置文件使用的语法稍微不同于原始的BSD源文件。 最初,具有特定优先级和以上的所有消息都被转发到日志文件。

例如,以下行使用守护程序工具(调试是最低优先级,因此每个更高级别也匹配)导致守护进程的所有输出进入/ usr / adm /守护进程

#示例syslog.conf daemon.debug / usr / adm / daemons

在新计划下,这种行为保持不变。 区别在于添加了四个新的说明符,星号( * )通配符,方程符号( = ),感叹号( )和减号( - )。

*指定将指定设施的所有消息定向到目的地。 请注意,此行为在指定优先级调试时退化。 用户表示星号符号更直观。

=通配符用于限制记录到指定的优先级。 例如,这允许将调试消息仅路由到特定的日志记录源。

例如, syslog.conf中的以下行会将来自所有源的调试消息指向/ usr / adm / debug文件。

#示例syslog.conf *。= debug / usr / adm / debug

!! 用于排除指定优先级的记录。 这会影响指定优先级的所有(!)可能性。

例如,以下行会将设施邮件的所有消息(具有优先级信息的邮件除外)记录到/ usr / adm / mail文件。 并且从news.info(包括)到news.crit(不包括)的所有消息都将记录到/ usr / adm / news文件中。

#示例syslog.conf mail。*; mail。!= info / usr / adm / mail news.info; news。!crit / usr / adm / news

您可以直观地将其用作异常说明符。 上述解释只是倒过来。 这样做可以使用

mail.none

要么

邮件。!*

要么

邮件!调试

跳过邮件设备附带的每封邮件。 有很多空间可以玩。 :-)

如果您想在每次写入文件后忽略同步文件,那么只能用 - 前缀。

这对于那些习惯于纯BSD行为的人来说可能需要一些适应性,但是测试人员已经表明这种语法比BSD行为更灵活。 请注意,这些更改不应影响标准syslog.conf (5)文件。 您必须特别修改配置文件以获得增强的行为。

支持远程记录

这些修改为syslogd工具提供了网络支持。 网络支持意味着消息可以从一个运行syslogd的节点转发到另一个运行syslogd的节点,在那里它们将被实际记录到一个磁盘文件中。

要启用此功能,您必须在命令行中指定-r选项。 默认行为是syslogd不会监听网络。

策略是让syslogd监听本地生成的日志消息的unix域套接字。 这种行为将允许syslogd与标准C库中的syslog进行交互操作。 同时,syslogd在标准syslog端口上侦听从其他主机转发的消息。 要正确执行此项工作, services (5)文件(通常位于/ etc中 )必须具有以下条目:

syslog 514 / udp

如果缺少此项, syslogd既不能接收远程消息也不能发送它们,因为UDP端口不能被打开。 相反, syslogd会立即死亡,并发出错误消息。

要使消息转发到其他主机,请将syslog.conf文件中的普通文件行替换为消息要发送到的主机的名称,后面加上@前缀。

例如,要使用以下syslog.conf条目将所有消息转发到远程主机:

#将syslogd配置文件示例为#消息转发给远程主机全部转发。 *。* @主机名

要将所有内核消息转发到远程主机,配置文件如下所示:

#示例配置文件将所有内核#消息转发到远程主机。 kern。* @hostname

如果远程主机名在启动时无法解析,因为名称服务器可能无法访问(可能会在syslogd之后启动),因此您不必担心。 Syslogd将重试十次解析名称,然后发出抱怨。 避免这种情况的另一种可能性是将主机名放置在/ etc / hosts中

如果您将从远程主机接收到的消息发送到同一主机(或者将第三个主机发送回第一个主机等更复杂),那么使用普通的syslogd时,您将获得syslog循环。 在我的域名(Infodrom Oldenburg),我们意外地收到了一个,我们的磁盘上填充了同一条消息。 :-(

为了避免这种情况,远程主机收到的消息不再发送给另一台(或同一台)远程主机。 如果出现这种情况没有意义,请给我(乔伊)一条线。

如果远程主机与主机位于同一个域中,则syslogd正在运行,只会记录简单的主机名而不是整个fqdn。

在本地网络中,您可以提供一个中央日志服务器,将所有重要信息保存在一台机器上。 如果网络包含不同的域,则不必抱怨记录完全限定的名称而不是简单的主机名。 您可能想要使用此服务器的strip-domain功能。 您可以告诉syslogd去除服务器所在的域以外的几个域,并且只记录简单的主机名。

使用-l选项还可以将单个主机定义为本地机器。 这也会导致只记录他们的简单主机名而不是fqdns。

用于将消息转发到远程主机或从中接收消息的UDP套接字仅在需要时才打开。 在1.3-23之前的版本中,它每次都打开,但不能打开阅读或转发。

输出到命名管道(FIFO)

此版本的syslogd支持将输出记录到命名管道(fifos)。 通过将一个pipy符号(``|'')添加到文件的名称中,可以将fifo或命名管道用作日志消息的目的地。 这对调试很方便。 请注意,必须在syslogd启动之前使用mkfifo命令创建fifo。

以下配置文件将调试消息从内核路由到fifo:

#示例配置将内核调试#消息路由到/ usr / adm / debug,这是#命名管道。 kern。= debug | / usr / adm / debug

安装问题

安装此版本的syslogd时可能需要考虑一个重要因素。 此版本的syslogd依赖于syslog函数对消息的正确格式。 共享库中syslog函数的功能在libc.so.4区域中的某处发生了变化[2-4] .n。 具体更改是在将消息传输到/ dev / log套接字之前将其终止。 此版本的syslogd的正常运行取决于消息的空终止。

如果系统上正在使用旧的静态链接二进制文件,则通常会出现此问题。 使用旧版syslog功能的二进制文件将导致记录空行,然后删除消息中的第一个字符。 将这些二进制文件重新链接到较新版本的共享库将纠正此问题。

syslogd (8)和klogd (8)都可以从init(8)运行,或者作为rc。*序列的一部分启动。 如果它是从init启动的,则必须设置-n选项,否则,将会启动大量的syslog守护进程。 这是因为init (8)取决于进程ID。

安全威胁

syslogd守护进程有可能被用作拒绝服务攻击的管道。 感谢John Morrison(jmorriso@rflab.ee.ubc.ca)提醒我这个潜力。 流氓程序(mer)可以非常容易地用syslog消息来洪泛syslogd守护进程,从而导致日志文件占用文件系统上的所有剩余空间。 激活对inet域套接字的日志记录当然会使系统暴露在本地机器上的程序或个人之外。

有许多保护机器的方法:

  1. 实施内核防火墙以限制哪些主机或网络可以访问514 / UDP套接字。
  2. 记录可以被定向到一个孤立的或者非根文件系统,如果被填充的话,它不会损害机器。
  3. 可以使用ext2文件系统,该文件系统可以配置为仅将文件系统的某个百分比限制为仅由root用户使用。 请注意 ,这将要求syslogd作为非根进程运行。 此外请注意 ,这将阻止使用远程日志记录,因为syslogd将无法绑定到514 / UDP套接字。
  4. 禁用inet域套接字将会限制本地机器的风险。
  5. 使用步骤4,如果问题仍然存在,并且不是次要的流氓程序/守护进程,请获取3.5英尺(约1米)长的抽油杆*并与相关用户聊天。 抽油杆def。 --- 3/4,7/8或1in。 硬化钢杆,每端带有外螺纹。 在北达科他州西部和其他地区的石油工业中主要用于从油井中抽吸“吸”石油。 次要用途是用于建设牛饲料批次和处理偶尔顽固或好战的个人。

调试

当使用-d选项打开调试时,通过写入stdout上的大部分内容, syslogd将变得非常冗长。 每当配置文件重新读取并重新分析时,您将看到一个表格,对应于内部数据结构。 该表格由四个字段组成:

该字段包含从零开始的序列号。 这个数字表示内部数据结构(即数组)中的位置。 如果剩下一个数字,那么在/etc/syslog.conf的相应行中可能会有错误。

模式

这个领域很棘手,完全代表了内部结构。 每列表示一个设施(请参阅syslog (3))。 正如你所看到的,还有一些设施可以免费供以前使用,只使用最左边的设施。 列中的每个字段都表示优先级(请参阅syslog (3))。

行动

该字段描述了每当收到与该模式匹配的消息时发生的特定操作。 有关所有可能的操作,请参阅syslog.conf (5)联机帮助页。

参数

此字段显示最后一个字段中的操作的附加参数。 对于文件记录,这是日志文件的文件名; 对于用户日志记录,这是一个用户列表; 对于远程日志记录,这是要登录的计算机的主机名; 对于控制台日志记录,这是使用的控制台; 对于tty-logging这是指定的tty; 墙没有额外的论据。

也可以看看

记录器 (1), 系统日志 (2),(5)

合作者

Syslogd取自BSD资源,Greg Wettstein(greg@wind.enjellic.com)执行该端口至Linux ,Martin Schulze(joey@linux.de)修复了一些错误并添加了若干新功能。 Klogd最初由Steve Lord(lord@cray.com)撰写,Greg Wettstein做出了重大改进。

Greg Wettstein博士
Enjellic系统开发

肿瘤研究部计算机
罗杰马里斯癌症中心
法戈,ND
greg@wind.enjellic.com

斯蒂芬特维迪
计算机科学系
苏格兰爱丁堡大学
sct@dcs.ed.ac.uk

Juha Virtanen
jiivee@hut.fi

Shane Alderton
shane@ion.apana.org.au

Martin Schulze
Infodrom奥登堡
joey@linux.de

重要提示:使用man命令( %man )查看特定计算机上的命令使用方式。

相关文章