sysklogd
在Linux操作系统上,sysklogd是一组Linux系统日志记录实用程序。
查看英文版
1 sysklogd 运行系统环境
2 sysklogd 描述
3 sysklogd 语法
4 配置文件语法
5 远程日志记录支持
6 调试
7 安全注意事项
sysklogd 运行系统环境
Linux
sysklogd 描述
Sysklogd提供了两个系统实用程序,它们为系统日志记录和内核消息捕获提供支持。Internet和Unix域套接字的支持使该实用程序包能够支持本地和远程日志记录。
系统日志记录由从BSD派生的syslogd版本提供。为内核日志的支持由提供klogd的实用程序,其允许在任何一个独立的方式或作为要进行内核日志客户端的syslogd的。
syslogd提供了许多现代程序使用的一种日志记录。每个记录的消息至少包含一个时间和一个主机名字段,通常包含一个程序名称字段,但是它取决于记录程序。
启动时会读取主配置文件/etc/syslog.conf或带有-f选项的备用文件。以井号(“ # ”)开头的任何行和空行都将被忽略。如果在解析行期间发生错误,则将忽略整行。
查看英文版
sysklogd 语法
>syslogd [ -a socket ] [ -d ] [ -f config-file ] [ -h ] [ -l hostlist ] [ -m interval ] [ -n ] [ -p socket ] [-r ] [ -s domainlist ] [ -u user ] [ -v ]
选项
-a socket | 使用此参数,您可以指定syslogd必须侦听的其他套接字。 如果要在chroot()环境中运行某些守护程序,则需要这样做。 您最多可以使用19个其他插槽。 如果您的环境需要更多,则必须在syslogd.c源文件中增加符号MAXFUNIX。 |
-d | 打开调试模式。 使用此守护程序将不会继续进行派生以将其自身设置在后台,而是与之相反,它将驻留在前台并在当前tty上写入许多调试信息。 |
-f config-file | 指定替代配置文件,而不是默认的/etc/syslog.conf。 |
-h | 默认情况下,syslogd不会转发从远程主机接收的消息。在命令行上指定此开关将导致日志守护程序将其接收到的任何远程消息转发到已定义的转发主机。这可能会导致syslog循环以相当快的速度填满硬盘,因此需要谨慎使用。 |
-l hostlist | 指定仅使用简单主机名而不是fqdn记录的主机名。 可以使用冒号(“:”)分隔符指定多个主机。 |
-m nterval | syslogd定期记录标记时间戳记。 两行“-MARK-”之间的默认间隔为20分钟。 可以使用此选项进行更改。 将间隔设置为零会完全关闭它。 根据生成的其他日志消息,这些行可能不会连续写入。 |
-n | 避免自动背景。 这是特别需要的,如果syslogd是由init启动并控制的。 |
-p socket | 您可以指定替代的UNIX域套接字,而不是/ dev / log。 |
-r |
此选项将使设施使用具有系统日志服务的 Internet 域套接字从网络接收消息。默认值是不接收来自网络的任何消息。此选项在sysklogd包的版本 1.3 中引入。 请注意,默认行为与旧版本的行为方式相反,因此您可能需要启用此功能。 |
-s domainlist | 指定在日志记录前应删除的域名。使用冒号 (": ")分隔符可以指定多个域。请注意,不能指定任何子域,但只能指定整个域。例如,如果指定了 -s north.de,并且主机日志记录解析为 satu.info-drom.north.de将不剪切任何域,则必须指定两个域,如:-s North.de:info-drom.north.de。 |
-u user |
默认情况下,syslogd守护进程以完全root权限运行。如果指定此选项,守护程序将在启动日志记录之前放弃对给定用户(以及该用户的主要组)的权限。这大大降低了syslogd中可利用的安全漏洞的潜在影响。 syslogd在启动时仍将以root用户身份打开所有日志文件。 但是,在收到SIGHUP信号(这会导致守护程序重新启动)之后,日志文件将以非特权用户的身份重新打开,如果该日志文件只能由root用户写入,则该用户将失败。 如果需要使用信号重新启动守护程序,则必须调整日志文件的权限,以使其可以由指定用户(或其主要组)写入。 |
-v | 打印版本并推出 |
信号
Syslogd对一组信号做出反应。 您可以使用以下命令轻松地向syslogd发送信号:
kill -SIGNAL `cat /var/run/syslogd.pid`
其中,SIGNAL是以下信号之一:
SIGHUP | 这使syslogd执行重新初始化。关闭所有打开的文件,将重新读取配置文件(默认为/etc/syslog.conf),并再次启动syslog工具。 |
SIGTERM |
消毁syslogd |
SIGINT, SIGQUIT | 如果启用了调试,这些都将被忽略,否则syslogd将消亡。 |
SIGUSR1 | 打开/关闭调试。 仅当使用-d debug选项启动syslogd时,才能使用此选项。 |
SIGCHLD | 等待子进程(如果已生成)。 |
查看英文版
配置文件语法
Syslogd的配置文件使用语法与原始 BSD 源略有不同。最初,特定优先级及以上的所有消息都转发到日志文件。
例如,以下行导致使用守护程序设施(调试是最低优先级,因此所有更高的内容也将匹配)的守护进程的所有输出进入 /usr/adm/daemons:
# Sample syslog.conf daemon.debug /usr/adm/daemons
根据新方案,此行为保持不变。区别在于添加四个新指定符,星号(*)通配符,等号(=),感叹号(!), 和减号(-)。
*指定将指定设施的所有消息都定向到目的地。 请注意,此行为通过指定调试的优先级而退化。 用户已经表明,星号表示法更加直观。
=通配符用于将日志记录限制为指定的优先级类别。 例如,这允许仅将调试消息路由到特定的日志记录源。
例如,syslog.conf中的以下行会将调试消息从所有源定向到/ usr / adm / debug文件。
# Sample syslog.conf *.=debug /usr/adm/debug
!用于排除指定优先级的日志记录。这会影响所有(!)指定优先级的可能性
例如,以下行将记录设施邮件的所有邮件,但具有优先级信息的邮件除外,这些邮件将记录到 /usr/adm/mail文件中。从"news.info(包括)到 news.crit(不包括)的所有消息将被记录到 /usr/adm/news文件中。
# Sample syslog.conf mail.*;mail.!=info /usr/adm/mail news.info;news.!crit /usr/adm/news
您可以直观地使用它作为异常指定符。上述解释是倒置的。这样做,你可以使用
mail.none
或
mail.!*
或
mail.!debug
跳过邮件功能附带的每条消息。
如果您要在每次写入文件后都忽略同步文件,则只能在文件名前添加“-”前缀。
查看英文版
远程日志记录支持
若要启用远程日志记录,请在命令行上指定-r选项。默认行为是syslogd不会侦听网络。
策略是让syslogd 侦听本地生成的日志消息的unix 域套接字。此行为将允许syslogd与标准 C 库中的系统日志进行互操作。同时,syslogd在标准系统日志端口上侦听来自其他主机的消息。要正确处理此工作,services文件(通常在/etc中找到)必须具有以下条目:
syslog 514/udp
如果缺少此条目,则 syslogd既不能接收远程消息,也不能发送它们,因为无法打开 UDP 端口。相反,syslogd将立即死亡,并打印一条错误消息。
若要使消息转发到另一个主机,请将syslog.conf文件中的正常文件行替换为要向其发送消息的主机的名称,该主机将预发消息以@开头 。
例如,要将所有消息转发到远程主机,请使用以下syslog.conf条目:
# Sample syslogd configuration file to # messages to a remote host forward all. *.* @hostname
要将所有内核消息转发到远程主机,配置文件将如下所示:
# Sample configuration file to forward all kernel # messages to a remote host. kern.* @hostname
如果在启动时无法解析远程主机名,因为名称服务器可能无法访问(可能在syslogd之后启动),syslogd将重试解析名称十次,然后进行投诉。避免这种情况的另一个可能性是将主机名放在/etc/hosts。
为了避免这种情况,不再将从远程主机接收的消息发送到另一个(或相同的)远程主机。如果您遇到需要此行为的设置,请使用-h 命令行开关。但是,需要谨慎处理此选项,因为syslogd循环可以相当快地填满硬盘。
如果远程主机与主机位于同一域中,则 syslogd正在运行,则将只记录简单的主机名,而不是整个 fqdn。
在本地网络中,您可以提供一个中央日志服务器,以便将所有重要信息保存在一台计算机上。如果网络由不同的域组成,您不必抱怨记录完全限定的名称,而不是简单的主机名。您可能需要使用此服务器的带域功能 -s。您可以告诉syslogd删除服务器位于的域以外的多个域,并且只记录简单的主机名。
使用-l选项还可以将单个主机定义为本地计算机。这还会导致只记录其简单的主机名,而不是 fqdns。
用于将消息转发到远程主机或接收来自远程主机的消息的 UDP 套接字仅在需要时打开。在 1.3-23 之前的版本中,它每次都被打开,但未分别打开以进行读取或转发。
查看英文版
调试
当使用-d选项打开调试时,syslogd将非常详细,因为它将编写它所做大部分操作。每当重新读取和重新分析配置文件时,您都会看到一个与内部数据结构对应的表格。此表格由四个字段组成:
number | 此字段包含以零开始的序列号。此数字表示内部数据结构(数组)中的位置。如果一个数字被抛出,则/etc/syslog.conf 中的相应行中可能有错误。 |
pattern | 此字段正好表示内部结构。每个列代表一个syslog设施。如您所见,仍然有一些设施可供先前使用,仅剩下最左边的设施被使用。 列中的每个字段代表优先级。 |
action | 此字段描述每当收到与模式匹配的消息时发生的特定操作。 |
arguments | 此字段显示最后一个字段中操作的其他参数。对于文件日志记录,这是日志文件的文件名;对于文件日志记录,这是日志文件的文件名。对于用户日志记录,这是用户列表;对于远程日志记录,这是要记录到的计算机的主机名;对于控制台日志,这是用过的控制台;对于 tty - logging, 这是指定的 tty 。 |
查看英文版
安全注意事项
syslogd守护程序有可能被用作拒绝服务攻击的管道。流氓程序(或程序员)很容易用syslog消息淹没syslogd守护程序,导致日志文件占用了文件系统上的所有剩余空间。当然,在 inet 域套接字上激活日志记录会使系统面临本地计算机上的程序或个人之外的风险。
保护机器的方法有很多:
- 实施内核防火墙以限制哪些主机或网络有权访问 514/UDP 套接字。
- 日志记录可以定向到隔离或非根文件系统,如果填充,不会损害它们。、
- ext2文件系统可用于仅按 root 配置以限制文件系统的一定百分比。请注意,这将要求syslogd作为非根进程运行,并防止使用远程日志记录,因为syslogd将无法绑定到 514/UDP 套接字。
- 禁用inet域套接字将把风险限制在本地计算机上。
查看英文版