23.5. INN 配置文件

完成这些常规任务后,您现在可以开始关注 INN 真正有趣的部分:其配置文件。所有这些文件都位于/etc/news中。 版本 2 中引入了一些配置文件的更改,我们在此处描述的是版本 2。如果您运行的是旧版本,您应该会发现本章对指导您升级配置很有用。在接下来的几个部分中,我们将逐一讨论它们,并以虚拟啤酒厂的配置为例。

如果您想了解有关各个配置文件功能的更多信息,您还可以查阅手册页;INN 发行版包含每个配置文件的单独手册页。

23.5.1. 全局参数

有许多 INN 参数本质上是全局性的;它们与所有承载的新闻组相关。

23.5.1.1. inn.conf 文件

INN 的主要配置文件是inn.conf。 除此之外,它还决定了您的机器在 Usenet 上为人所知的名称。 版本 2 的 INN 允许在此文件中配置令人眼花缭乱的参数数量。 幸运的是,大多数参数都具有默认值,这些默认值对于大多数站点来说是合理的。inn.conf(5)文件详细说明了所有参数,如果您遇到任何问题,您应该仔细阅读它。

一个简单的例子inn.conf可能看起来像
# Sample inn.conf for the Virtual Brewery
server:          vlager.vbrew.com
domain:          vbrew.com
fromhost:        vbrew.com
pathhost:        news.vbrew.com
organization:    The Virtual Brewery
mta:             /usr/sbin/sendmail -oi %s
moderatormailer: %s@uunet.uu.net
#
# Paths to INN components and files.
#
pathnews:               /usr/lib/news
pathbin:                /usr/lib/news/bin
pathfilter:             /usr/lib/news/bin/filter
pathcontrol:            /usr/lib/news/bin/control
pathdb:                 /var/lib/news
pathetc:                /etc/news
pathrun:                /var/run/news
pathlog:                /var/log/news
pathhttp:               /var/log/news
pathtmp:                /var/tmp
pathspool:              /var/spool/news
patharticles:           /var/spool/news/articles
pathoverview:           /var/spool/news/overview
pathoutgoing:           /var/spool/news/outgoing
pathincoming:           /var/spool/news/incoming
patharchive:            /var/spool/news/archive
pathuniover:            /var/spool/news/uniover
overviewname:           .overview

第一行告诉程序 rnewsinews 在传递文章时要联系哪个主机。 此条目至关重要;要将文章传递给 innd,它们必须与服务器建立 NNTP 连接。

domain 关键字应指定主机完全限定域名中的域部分。 几个程序必须查找您的主机的完全限定域名;如果您的解析器库仅返回不合格的主机名,则 domain 属性中给出的名称将附加到其上。 以任一方式配置它都不是问题,因此最好定义 domain

下一行定义了 inews 在添加From行到本地用户发布的文章时将使用的主机名。 大多数新闻阅读器在使用From字段编写对文章作者的回复邮件消息时使用。 如果您省略此字段,它将默认为您的新闻主机的完全限定域名。 这并不总是最佳选择。 例如,您可能让两个不同的主机处理新闻和邮件。 在这种情况下,您将在 fromhost 语句后提供您的邮件主机的完全限定域名。

pathhost 行定义了 INN 在接收到文章时要添加到Path标头字段的主机名。 在大多数情况下,您会想要使用您的新闻服务器的完全限定域名;您可以省略此字段,因为那是默认值。 有时,当服务大型域时,您可能想要使用通用名称,例如 news.vbrew.com。 这样做使您可以轻松地将新闻系统移动到不同的主机,如果您将来选择这样做的话。

下一行包含 organization 关键字。 此语句允许您配置 inews 将放入本地用户发布的文章的Organization行的文本。 正式地,您应该在此处放置您组织的描述或您组织的完整名称。 如果您不想如此正式,那么有幽默感的组织在此处展示幽默感是很时髦的。

organization 关键字是强制性的,并指定将用于发布版主消息的邮件传输代理的路径名。%s被版主电子邮件地址替换。

moderatormailer 条目定义了当用户尝试发布到审核新闻组时使用的默认地址。 每个新闻组的版主地址列表通常保存在单独的文件中,但是您将很难跟踪所有这些地址。 因此,moderatormailer 条目被用作最后的手段;如果定义了它,inews 将替换%s字符串为(稍微转换过的)新闻组名称,并将整篇文章发送到此地址。 例如,当发布到 soc.feminism 时,考虑到上述配置,该文章将邮寄到 soc-feminism@uunet.uu.net。 在 UUNET,应该为每个这些提交地址安装邮件别名,该别名自动将所有消息转发给相应的版主。

最后,其余的每个条目都指定了属于 INN 的某些组件文件或可执行文件的位置。 如果您是从软件包安装 INN 的,则应为您配置这些路径。 如果您是从源代码安装的,则需要确保它们反映了您安装 INN 的位置。

23.5.2. 配置新闻组

系统上的新闻管理员能够控制用户可以访问哪些新闻组。 INN 提供了两个配置文件,允许管理员决定要支持哪些新闻组并为它们提供描述。

23.5.2.1. active 和 newsgroups 文件

activenewsgroups文件用于存储和描述此新闻服务器托管的新闻组。 它们列出了我们有兴趣接收和提供文章的新闻组,以及有关它们的管理信息。 这些文件位于/var/lib/news/目录中。

active文件确定此服务器支持哪些新闻组。 它的语法很简单。active文件中的每一行都有四个字段,以空格分隔
name himark lomark flags

name字段是新闻组的名称。himark字段是该新闻组中已用于文章的最高编号。lomark字段是新闻组中使用的最低活动编号。 为了说明它是如何工作的,请考虑以下场景。 假设我们有一个新创建的新闻组himarklowmark都为 0,因为没有文章。 如果我们发布 5 篇文章,它们的编号将为 1 到 5。himark现在将等于 5,即编号最高的文章,并且lowmark将等于 1,即最低的活动文章。 如果文章 5 被取消,则不会有任何变化;himark将保持为 5,以确保该文章编号不会被重新分配,并且lowmark将保持为 1,即最低的活动文章。 如果我们现在取消文章 1,himark将保持不变,但是lowmark现在将等于 2,因为 1 不再处于活动状态。 如果我们现在发布一篇新文章,它将被分配文章编号 6,因此himark现在将等于 6。 文章 5 已经在使用中,因此我们不会重新分配它。lowmark保持在 2。 此机制使我们能够轻松地为新文章分配唯一的文章编号,并大致计算出组中有多少活动文章himarklowmark.

该字段可能包含以下内容之一

y

允许直接发布到此新闻服务器。

n

不允许直接发布到此新闻服务器。 这可以防止新闻阅读器直接发布到此新闻服务器。 新文章只能从其他新闻服务器接收。

m

该组是审核组。 任何发布到此新闻组的文章都将转发给新闻组版主以进行批准,然后才能进入新闻组。 大多数新闻组都是未经审核的。

j

此组中的文章不保留,而仅被传递。 这会导致新闻服务器接受该文章,但它对其所做的全部操作是将其传递给“上游”新闻服务器。 它不会使文章可用于从此服务器读取新闻阅读器。

x

无法发布文章到此新闻组。 将新闻文章传递到此服务器的唯一方法是从另一个新闻服务器馈送它们。 新闻阅读器不得直接将文章写入此服务器。

=foo.bar

文章在本地归档到 ``foo.bar'' 组中。

在我们的简单服务器配置中,我们将承载少量新闻组,因此我们的/var/lib/news/active文件将如下所示
control 0000000000 0000000001 y
junk 0000000000 0000000001 y
rec.crafts.brewing 0000000000 0000000001 y
rec.crafts.brewing.ales 0000000000 0000000001 y
rec.crafts.brewing.badtaste 0000000000 0000000001 y
rec.crafts.brewing.brandy 0000000000 0000000001 y
rec.crafts.brewing.champagne 0000000000 0000000001 y
rec.crafts.brewing.private 0000000000 0000000001 y
himarklomark此示例中的数字是您在创建新新闻组时会使用的数字。himarklomark对于已活动一段时间的新闻组,数字看起来会大相径庭。

newsgroups文件甚至更简单。 它提供新闻组的单行描述。 一些新闻阅读器能够读取并向用户呈现此信息,以帮助他们决定是否要订阅。

的格式newsgroups文件很简单
name description
name字段是新闻组的名称,而 <description是该新闻组的单行描述。

我们想要描述我们的服务器支持的新闻组,因此我们将构建我们的newsgroups文件如下
rec.crafts.brewing.ales         Home brewing Ales and Lagers
rec.crafts.brewing.badtaste     Home brewing foul tasting brews
rec.crafts.brewing.brandy       Home brewing your own Brandy
rec.crafts.brewing.champagne    Home brew your own Champagne
rec.crafts.brewing.private      The Virtual Brewery home brewers group

23.5.3. 配置新闻馈送

INN 为新闻管理员提供了控制哪些新闻组转发到其他新闻服务器以及如何转发它们的能力。 最常用的方法是使用前面描述的 NNTP 协议,但是 INN 也允许通过其他协议(例如 UUCP)进行新闻馈送。

23.5.3.1. newsfeeds 文件

newsfeeds文件确定新闻文章将发送到哪里。 它通常位于/etc/news/目录中。

的格式newsfeeds中,乍一看有点复杂。 我们将在此处描述一般布局,并且newsfeeds(5)手册页描述了我们遗漏的内容。 格式如下
# newsfeeds file format
site:pattern:flags:param
site2:pattern2\
	:flags2:param2
到站点的每个新闻馈送都由单行描述,或者可以使用 \ 续行符跨多行展开。 : 字符分隔每行中的字段。 行首的 # 字符将该行标记为注释。

site字段命名此馈送描述相关的站点。 站点名称可以以您喜欢的任何方式编码,并且不必是站点的域名。 站点名称稍后将被使用,并将引用一个表中的条目,该表向 innxmit 程序提供主机名,该程序通过 NNTP 将新闻文章传输到远程服务器。 您可以为每个站点设置多个条目;每个条目都将单独处理。

pattern字段指定要发送到此站点的新闻组。 默认情况下,发送所有组,因此如果那是您想要的,只需将此字段留空即可。 此字段通常是以逗号分隔的模式匹配表达式列表。 * 字符匹配零个或多个任何字符,. 字符没有特殊意义,! 字符(如果在表达式的开头使用)执行逻辑非,并且新闻组名称开头的 @ 字符表示“不要转发任何发布或交叉发布到此组的文章。” 该列表从左到右读取和解析,因此您应确保首先放置更具体的规则。 模式

rec.crafts.brewing*,!rec.crafts.brewing.poison,@rec.crafts.brewing.private

将发送所有 rec.crafts.brewing 新闻层次结构,除了 rec.crafts.brewing.poison。 它不会馈送任何发布或交叉发布到 rec.crafts.brewing.private 新闻组的文章;这些文章将被捕获,并且仅供使用此服务器的人员使用。 如果您颠倒了前两个模式,则第一个模式将被第二个模式覆盖,最终您将馈送 rec.crafts.brewing.poison 新闻组的文章。 第一个和最后一个模式也是如此;您必须始终在任何不太具体的模式之前放置更具体的模式,它们才能生效。

flags控制并约束新闻文章到此站点的馈送。flags字段是以逗号分隔的列表,可以包含以下列表中的任何项,以逗号分隔

<size

文章必须小于 size 字节。

Aitems

文章检查。items可以是以下一项或多项d(必须具有 Distribution 标头)或p(不要检查 Path 标头中的站点)。

Bhigh/low

写入输出前的内部缓冲区大小。

H[count]

文章必须小于count跃点;默认值为 1。

Isize

内部缓冲区大小(对于文件馈送)。

Mpattern

仅与模式匹配的审核组。

Npattern

仅与模式匹配的未经审核的组。

Ssize

如果排队超过 size 字节,则开始假脱机。

Ttype

馈送类型f(文件),m(漏斗;param字段命名文章将漏斗到的条目),p(管道到程序),c(发送到param字段的子进程的 stdin 通道),以及x(类似于 c,但在 stdin 上处理命令)。

Witems

要写入的内容b(文章字节大小),f(完整路径),g(第一个新闻组),m(消息 ID),n(相对路径),s(馈送文章的站点),t(接收时间),*(漏斗馈送的名称或接收文章的所有站点),N(新闻组标头),D(分发标头),H(所有标头),O(概述数据),以及R(复制数据)。

param字段具有特殊的编码,该编码取决于馈送的类型。 在最常见的配置中,您可以在其中指定要将传出馈送写入的输出文件的名称。 在其他配置中,您可以将其省略。 在其他配置中,它具有不同的含义。 如果您想做一些不寻常的事情,则newsfeeds(5)手册页将详细解释param字段的用法。

有一个特殊的站点名称应编码为ME并且应该是文件中的第一个条目。 此条目用于控制新闻馈送的默认设置。 如果ME条目具有与之关联的分发列表,则此列表将在发送之前添加到每个其他站点条目的前面。 这允许您例如声明某些新闻组要自动馈送,或自动阻止馈送,而无需在每个站点条目中重复该模式。

我们之前提到,可以使用一些特殊的馈送来生成线程数据,从而使新闻阅读器的工作更容易。 我们将通过利用作为 INN 发行版一部分的 overchan 命令来做到这一点。 为此,我们创建了一个名为overview的特殊本地馈送,该馈送会将新闻文章传递给 overchan 命令,以处理为概述数据。

我们的新闻服务器将仅提供一个外部新闻馈送,该馈送发送到 Groucho Marx 大学,并且他们接收除 controljunk 新闻组、rec.crafts.brewing.private 新闻组(将在本地保留)以及 rec.crafts.brewing.poison 新闻组(我们不希望我们啤酒厂的人员发布到该新闻组)之外的所有新闻组的文章。

我们将使用 nntpsend 命令通过 NNTP 将新闻传输到 news.groucho.edu 服务器。 nntpsend 要求我们使用“文件”传递方法并写入文章的路径名和文章 ID。 请注意,我们将param字段设置为输出文件的名称。 我们稍后将详细讨论 nntpsend 命令。 我们最终的新闻馈送配置是
# /etc/news/newsfeeds file for the Virtual Brewery
#
# Send all newsgroups except the control and junk ones by default
ME:!control,!junk::
#
# Generate overview data for any newsreaders to use.
overview::Tc,WO:/usr/lib/news/bin/overchan
#
# Feed the Groucho Marx University everything except our private newsgroup
# and any articles posted to the rec.crafts.brewing.poison newsgroup.
gmarxu:!rec.crafts.brewing.poison,@rec.crafts.brewing.private:\
	Tf,Wnm:news.groucho.edu
#

23.5.3.2. nntpsend.ctl 文件

nntpsend 程序通过调用 innxmit 命令来管理使用 NNTP 协议的新闻文章传输。 我们之前看到了 nntpsend 命令的简单用法,但它也有一个配置文件,该配置文件为我们提供了配置新闻馈送的一些灵活性。

nntpsend 命令希望找到它将馈送的站点的批处理文件。 它希望这些批处理文件命名为/var/spool/news/out.going/sitenameinnd 在处理newsfeeds中的条目时创建这些批处理文件,我们在前面的部分中看到了这一点。 我们在param字段中将站点名称指定为文件名,这满足了 nntpsend 命令的输入要求。

nntpsend 命令有一个名为nntpsend.ctl的配置文件,该文件通常存储在/etc/news/目录中。

nntpsend.ctl文件中,允许我们将完全限定域名、一些新闻馈送大小约束以及许多传输参数与新闻馈送站点名称关联起来。 站点名称是唯一标识文章逻辑馈送的一种手段。 文件的通用格式为
sitename:fqdn:max_size:[args]

以下列表描述了此格式的元素

sitename

newsfeeds文件中提供的站点名称

fqdn

我们将向其馈送新闻文章的新闻服务器的完全限定域名

max_size

在任何一次传输中要馈送的最大新闻量

args

要传递给 innxmit 命令的其他参数

我们的示例配置需要一个非常简单的nntpsend.ctl文件。 我们只有一个新闻馈送。 我们将馈送限制为最大 2 MB 的流量,并且我们将向 innxmit 传递一个参数,该参数设置 3 分钟(180 秒)的超时时间。 如果我们是一个更大的站点并且有许多新闻馈送,我们将简单地为每个看起来与此站点非常相似的新馈送站点创建新条目
# /etc/news/nntpsend.ctl
#
gmarxu:news.groucho.edu:2m:-t 180
#

23.5.4. 控制新闻阅读器访问

几年前,组织为其新闻服务器提供公共访问是很常见的。 今天,很难找到公共新闻服务器;大多数组织都仔细控制谁可以访问其服务器,通常将访问权限限制为在其网络上支持的用户。 INN 提供了配置文件来控制此访问。

23.5.4.1. incoming.conf 文件

我们在 INN 的介绍中提到,它通过将新闻馈送机制与新闻阅读机制分离来实现其某些效率和大小。/etc/news/incoming.conf文件是您指定哪些主机将使用 NNTP 协议向您馈送新闻的位置,以及定义一些参数的位置,这些参数控制从这些主机向您馈送文章的方式。 未在此文件中列出的任何连接到新闻套接字的主机将不会由 innd 守护程序处理;相反,它将由 nnrpd 守护程序处理。

/etc/news/incoming.conf文件语法非常简单,但是需要花一些时间才能理解。 允许三种类型的有效条目:键/值对,这是您指定属性及其值的方式;对等方,这是您指定允许使用 NNTP 向我们发送文章的主机名称的方式;以及组,这是一种将键/值对应用于对等方组的方式。 键/值对可以具有三种不同的作用域。 全局对适用于文件中定义的每个对等方。 组对适用于在该组中定义的所有对等方。 对等方对仅适用于该一个对等方。 特定定义会覆盖不太具体的定义:因此,对等方定义会覆盖组定义,而组定义又会覆盖全局对。

花括号字符({})用于分隔grouppeer规范的开始和结束。 # 字符将它出现的行上的其余部分标记为注释。 键/值对由冒号字符分隔,并且每行显示一对。

可以指定许多不同的键。 更常见和更有用的是

hostname

此键指定我们将允许向我们发送文章的对等方的完全限定名称或 IP 地址的逗号分隔列表。 如果未提供此键,则主机名默认为对等方的标签。

streaming

此键确定是否允许从此主机使用流式命令。 这是一个布尔值,默认为true.

max-connections

此键指定允许来自此组或对等方的最大连接数。 值为零表示无限制(也可以使用none).

password

此键允许您指定对等方要传输新闻必须使用的密码。 默认是不需要密码。

patterns

此键指定我们从关联的对等方接受的新闻组。 此字段的编码方式与我们在newsfeeds文件中使用的规则完全相同。

在我们的示例中,我们只有一个主机期望向我们馈送新闻:我们在 Groucho Marx 大学的上游新闻提供商。 我们将没有密码,但是我们将确保我们不接受来自外部的任何用于我们私有新闻组的文章。 我们的hosts.nntp看起来像
# Virtual Brewery incoming.conf file.

# Global settings
streaming:       true
max-connections: 5

# Allow NNTP posting from our local host.
peer ME {
    hostname: "localhost, 127.0.0.1"
}

# Allow groucho to send us all newsgroup except our local ones.
peer groucho {
    hostname: news.groucho.edu
    patterns: !rec.crafts.brewing.private
}

23.5.4.2. nnrp.access 文件

我们之前提到,新闻阅读器,实际上是未在hosts.nntp中列出的任何连接到 INN 新闻服务器的主机,都由 nnrpd 程序处理。 nnrpd 使用/etc/news/nnrp.access文件来确定谁被允许使用新闻服务器,以及他们应该具有哪些权限。

nnrp.access文件的结构与我们查看的其他配置文件类似。 它包含一组用于匹配连接主机的域名或 IP 地址的模式,以及确定应赋予其哪些访问权限和权限的字段。 每个条目应单独显示在一行上,并且字段用冒号分隔。 与连接主机匹配的此文件中的最后一个条目将是要使用的条目,因此,同样,您应该首先放置通用模式,然后在文件中稍后放置更具体的模式。 每个条目的五个字段(按它们应出现的顺序排列)是

主机名或 IP 地址

此字段符合wildmat(3)模式匹配规则。 它是一个描述连接主机名称或 IP 地址的模式。

权限

此字段确定应授予匹配主机哪些权限。 您可以配置两个权限R授予读取权限,以及P授予发布权限。

用户名

此字段是可选的,允许您指定 NNTP 客户端必须登录到服务器才能被允许发布新闻文章的用户名。 此字段可以留空。 读取文章不需要用户身份验证。

密码

此字段是可选的,并且是随附username字段的密码。 将此字段留空意味着发布文章不需要密码。

新闻组

此字段是一个模式,用于指定客户端被允许访问哪些新闻组。 该模式遵循与newsfeeds文件中使用的规则相同的规则。 此字段的默认值是无新闻组,因此您通常会在此处配置一个模式。

在虚拟啤酒厂示例中,我们将允许虚拟啤酒厂域中的任何 NNTP 客户端读取和发布到所有新闻组。 我们将允许任何 NNTP 客户端对除我们的私有内部新闻组之外的所有新闻组进行只读访问。 我们的nnrp.access文件将如下所示
# Virtual Brewery - nnrp.access
# We will allow public reading of all newsgroups except our private one.
*:R:::*,!rec.crafts.brewing.private

# Any host with the Virtual Brewery domain may Read and Post to all 
# newsgroups
*.vbrew.com:RP::*

23.5.5. 过期新闻文章

当新闻服务器接收到新闻文章时,它们会存储到磁盘。 新闻文章需要可供用户使用一段时间才能有用,因此大型运行的新闻服务器可能会消耗大量磁盘空间。 为了确保有效地使用磁盘空间,您可以选择在一段时间后自动删除新闻文章。 这称为文章过期。 自然,INN 提供了一种自动使新闻文章过期的方法。

23.5.5.1. expire.ctl 文件

INN 服务器使用名为 expire 的程序来删除过期的新闻文章。 expire 程序反过来使用名为/etc/news/expire.ctl的文件来配置控制文章过期规则。

的语法/etc/news/expire.ctl相当简单。 与大多数配置文件一样,空行或以 # 字符开头的行将被忽略。 一般想法是每行指定一个规则。 每个规则定义如何对与提供的模式匹配的新闻组执行文章过期。 规则语法如下所示
pattern:modflag:keep:default:purge

以下列表描述了字段

pattern

此字段是以逗号分隔的模式列表,与新闻组的名称匹配。wildmat (3) 例程用于匹配这些模式。 与新闻组名称匹配的最后一个规则是要应用的规则,因此,如果您要指定通配符 (*) 规则,则应将它们首先在此文件中列出。

modflag

此标志描述此规则如何应用于审核的新闻组。 它可以编码为M表示此规则仅适用于审核的新闻组,U表示此规则仅适用于未经审核的新闻组,或A表示此规则忽略审核状态并适用于所有组。

keep

此字段允许您指定带有“Expires”标头的文章在过期之前要保留的最短时间。 单位是天,并且是浮点数,因此您可以指定诸如7.5之类的值,表示七天半。 如果您希望文章永远保留在新闻组中,您也可以指定never

default

此字段是最重要的。 此字段允许您指定不带Expires标头的文章要保留的时间。 大多数文章都没有Expires标头。 此字段的编码方式与keep字段相同,其中never表示不带Expires标头的文章将永远不会过期。

purge

此字段允许您指定带有Expires标头的文章在过期之前要保留的最长时间。 此字段的编码与keep字段相同。

我们的要求很简单。 默认情况下,我们将所有新闻组中的所有文章保留 14 天,对于带有Expires标头的文章,则保留 7 到 21 天之间。 rec.crafts.brewing.private 新闻组是我们的内部新闻组,因此我们将确保我们不会使其中的任何文章过期
# expire.ctl file for the Virtual Brewery

# Expire all articles in 14 days by default, 7-21 days for those with
# Expires: headers
*:A:7:14:21

# This is a special internal newsgroup, which we will never expire.
rec.crafts.brewing.private:A:never:never:never

我们将提到您可能在/etc/news/expires.ctl文件中具有的一种特殊类型的条目。 您可能只有一行看起来像这样
/remember/:days
此条目允许您指定文章在历史记录文件中将被记住的最短天数,而不管文章本身是否已过期。 如果向您馈送文章的站点之一不经常使用,并且习惯于时不时地向您发送旧文章,则此功能可能很有用。 设置/remember/字段有助于防止上游服务器再次向您发送文章,即使该文章已从您的服务器过期。 如果您的服务器记得它已经收到该文章,它将拒绝重新发送该文章的尝试。 重要的是要记住,此设置对文章过期没有任何影响;它仅影响文章详细信息在历史记录数据库中保留的时间。

23.5.6. 处理控制消息

与 C News 一样,INN 可以自动处理控制消息。 INN 提供了强大的配置机制来控制针对各种控制消息中的每种消息将发生的操作,以及访问控制机制来控制谁可以针对哪些新闻组启动操作。

23.5.6.1. control.ctl 文件

control.ctl文件的结构相当简单。 此文件的语法规则与其他 INN 配置文件的语法规则非常相似。 以#开头的行将被忽略,可以使用/继续行,字段由:.

分隔。 当收到控制消息时,将针对每个规则依次测试该消息。 文件中与消息匹配的最后一个规则是要使用的规则,因此您应该将任何通用规则放在文件的开头,并将更具体的规则放在文件的末尾。 文件的通用语法为

message:from:newsgroups:action

每个字段的含义是

message

这是控制消息的名称。 典型的控制消息稍后描述。

from

这是一个 shell 样式的模式,与发送消息的人员的电子邮件地址匹配。 电子邮件地址在比较之前转换为小写。

newsgroups

如果控制消息是newgrouprmgroup,则此字段是一个 shell 样式的模式,与创建或删除的新闻组匹配。

action

此字段指定对于与规则匹配的任何消息要执行的操作。 我们可以采取很多操作;它们在下一个列表中描述。

message每行的字段可以具有以下值之一

checkgroups

此消息请求新闻管理员根据控制消息中提供的新闻组列表重新同步其活动新闻组数据库。

newgroup

此消息请求创建新的新闻组。 控制消息的正文应包含要创建的新闻组的用途的简短描述。

rmgroup

请求删除新闻组。

sendsys

此消息请求通过邮件将此新闻服务器的sys文件传输给控制消息的发起者。 RFC-1036 规定,Usenet 成员资格的要求是此信息必须公开可用,因为它用于保持 Usenet 地图的最新状态。

version

此消息请求将新闻服务器软件的主机名和版本返回给控制消息的发起者。

all

这是一个特殊编码,它将匹配任何控制消息。

message字段可能包含以下操作

doit

请求的命令将被执行。在许多情况下,将会发送邮件消息给管理员,告知他们该操作已发生。

doit=文件中提供的站点名称

这与doit操作相同,除了日志消息将被写入到 file 日志文件中。如果指定的文件是 mail,则日志条目将通过电子邮件发送。如果指定的文件是空字符串,则日志消息将被写入到/dev/null并且等同于使用未限定的doit操作。如果 file 名称以 / 字符开头,则该名称被视为日志文件的绝对文件名;否则,指定的名称将被转换为/var/log/news/file.log.

doifarg

如果命令带有参数,则请求的命令将被执行。如果命令没有参数,则控制消息将被忽略。

drop

请求的命令将被忽略。

log

日志消息将被发送到stderr输出,该输出来自 innd 进程。这通常被定向到/var/log/news/errlog文件中使用的规则完全相同。

log=文件中提供的站点名称

这与log操作相同,除了日志文件是根据为doit=文件中提供的站点名称操作给出的规则指定的。

mail

一封电子邮件消息将被发送给新闻管理员,其中包含请求的命令详情。不会发生其他操作。

verify-*

如果一个操作以字符串 “verify-” 开头,则控制消息将使用 PGP (或 GPG) 进行身份验证。[1]

为了让您了解control.ctlfile 在实践中的样子,这是一个非常简短的说明性示例

## Sample /etc/news/control.ctl
##
## Warning: You should not use this file, it is illustrative only.

##	Control Message Handling
all:*:*:mail
checkgroups:*:*:mail
ihave:*:*:drop
sendme:*:*:drop
sendsys:*:*:log=sendsys
senduuname:*:*:log=senduuname
version:*:*:log=version
newgroup:*:*:mail
rmgroup:*:*:mail

##  Handle control messages for the eight most important news heirarchies
##  COMP, HUMANITIES, MISC, NEWS, REC, SCI, SOC, TALK
checkgroups:*:comp.*|humanities.*|misc.*|news.*|rec.*|sci.*|soc.*|talk.*:drop
newgroup:*:comp.*|humanities.*|misc.*|news.*|rec.*|sci.*|soc.*|talk.*:drop
rmgroup:*:comp.*|humanities.*|misc.*|news.*|rec.*|sci.*|soc.*|talk.*:drop
checkgroups:group-admin@isc.org:*:verify-news.announce.newgroups
newgroup:group-admin@isc.org:comp.*|misc.*|news.*:verify-news.announce.newgroups
newgroup:group-admin@isc.org:rec.*|sci.*|soc.*:verify-news.announce.newgroups
newgroup:group-admin@isc.org:talk.*|humanities.*:verify-news.announce.newgroups
rmgroup:group-admin@isc.org:comp.*|misc.*|news.*:verify-news.announce.newgroups
rmgroup:group-admin@isc.org:rec.*|sci.*|soc.*:verify-news.announce.newgroups
rmgroup:group-admin@isc.org:talk.*|humanities.*:verify-news.announce.newgroups

## GNU ( Free Software Foundation )
newgroup:gnu@prep.ai.mit.edu:gnu.*:doit
newgroup:news@*ai.mit.edu:gnu.*:doit
rmgroup:gnu@prep.ai.mit.edu:gnu.*:doit
rmgroup:news@*ai.mit.edu:gnu.*:doit

## LINUX (Newsfeed from news.lameter.com)
checkgroups:christoph@lameter.com:linux.*:doit
newgroup:christoph@lameter.com:linux.*:doit
rmgroup:christoph@lameter.com:linux.*:doit

注释

[1]

PGP 和 GPG 是旨在通过公钥技术验证或加密消息的工具。GPG 是 PGP 的 GNU 免费版本。GPG 可以在 http://www.gnupg.org/ 找到,PGP 可以在 http://www.pgp.com/ 找到。