16.4. 设置系统以供拨入

如果您想设置您的站点以供拨入,您必须允许在您的串行端口上登录,并自定义一些系统文件以提供 UUCP 帐户,我们将在本节中介绍这些内容。

16.4.1. 提供 UUCP 帐户

首先,您必须设置用户帐户,以便远程站点可以登录到您的系统并建立 UUCP 连接。通常,您将为每个轮询您的系统提供单独的登录名。当为系统 pablo 设置帐户时,您可以为其指定用户名 Upablo。对于登录名没有强制策略;它们可以是任何东西,但如果登录名容易与远程主机名相关联,则对您来说会更方便。

对于通过串行端口拨入的系统,您通常需要将这些帐户添加到系统密码文件/etc/passwd。最好将所有 UUCP 登录名放在一个特殊的组中,例如 uuguest。帐户的主目录应设置为公共假脱机目录/var/spool/uucppublic;其登录 shell 必须是 uucico

要为通过 TCP 连接到您站点的 UUCP 系统提供服务,您必须设置 inetd 以处理 uucp 端口上的传入连接,方法是将以下行添加到/etc/inetd.conf[1]
uucp   stream  tcp   nowait  root  /usr/sbin/tcpd  /usr/lib/uucp/uucico -l

–l选项使 uucico 执行自己的登录授权。它会像标准的 login 程序一样提示输入登录名和密码,但依赖于其私有密码数据库而不是/etc/passwd这个私有密码文件名为/etc/uucp/passwd
Upablo  IslaNegra
Ulorca  co'rdoba

,其中包含登录名和密码对。

此文件必须由 uucp 拥有,并且权限为 600。
/usr/lib/uucp/uucico -l -u user
–u选项告诉它使用指定的用户名,而不是提示输入用户名。[3]

为了保护您的 UUCP 用户免受可能提供虚假系统名称并窃取其所有邮件的呼叫者的侵害,您应该将 called-login 命令添加到sys文件中的每个系统条目中。这将在下一节中描述。

16.4.2. 保护自己免受骗子侵害

UUCP 的一个主要问题是呼叫系统可以谎报其名称;它在登录后向被呼叫系统宣布其名称,但服务器没有任何方法来检查它。因此,攻击者可以登录到他或她自己的 UUCP 帐户,假装是其他人,并获取其他站点的邮件。如果您通过匿名 UUCP 提供登录,而密码是公开的,则这尤其麻烦。

必须防范这种冒名顶替者。解决此问题的方法是要求每个系统通过在sys中指定 called-login 来使用特定的登录名。一个示例系统条目可能如下所示
system          pablo
... usual options ...
called-login    Upablo

结果是,每当系统登录并假装它是 pablo 时,uucico 都会检查它是否以 Upablo 身份登录。如果不是,则呼叫系统将被拒绝,并且连接将被断开。您应该养成习惯,将 called-login 命令添加到您sys文件中的每个系统条目中。重要的是,您应该对您的 sys 文件中的所有系统执行此操作,无论它们是否会呼叫您的站点。对于那些从不呼叫您的站点,您可能应该将 called-login 设置为一些完全虚假的用户名,例如 neverlogsin

16.4.3. 保持偏执:呼叫序列检查

另一种防御和检测冒名顶替者的方法是使用呼叫序列检查。这些可以帮助您防止入侵者以某种方式找到您登录到 UUCP 系统的密码。

当使用呼叫序列检查时,两台机器都会跟踪到目前为止建立的连接数。计数器在每次连接时递增。登录后,呼叫者发送其呼叫序列号,接收者将其与自己的号码进行核对。如果它们不匹配,则连接尝试将被拒绝。如果初始号码是随机选择的,则攻击者将很难猜测正确的呼叫序列号。

但是呼叫序列检查为您做了更多的事情。即使某些非常聪明的人应该检测到您的呼叫序列号以及您的密码,您也会发现。当攻击者呼叫您的 UUCP 源并窃取您的邮件时,这将使源的呼叫序列号增加一。下次呼叫您的源并尝试登录时,远程 uucico 将会拒绝您,因为号码不再匹配!

如果您已启用呼叫序列检查,则应定期检查您的日志文件,以查找暗示可能存在攻击的错误消息。如果您的系统拒绝了呼叫系统提供的呼叫序列号,uucico 将在日志文件中放入一条消息,内容类似于“Out of sequence call rejected.”。如果您的系统因序列号不同步而被其源拒绝,则它将在日志文件中放入一条消息,内容为“Handshake failed (RBADSEQ)”。

要启用呼叫序列检查,请将以下命令添加到系统条目
# enable call sequence checks
sequence        true

此外,您必须创建包含序列号本身的文件。Taylor UUCP 将序列号保存在名为.Sequence的远程站点的假脱机目录中。它必须uucp 拥有,并且必须是模式 600(即,仅可由 uucp 读取和写入)。最好使用任意的、先前商定的起始值初始化此文件。创建此文件的简单方法是
# cd /var/spool/uucp/pablo
# echo 94316 > .Sequence
# chmod 600 .Sequence
# chown uucp.uucp .Sequence

当然,远程站点也必须启用呼叫序列检查,并从与您完全相同的序列号开始。

16.4.4. 匿名 UUCP

如果您想为您的系统提供匿名 UUCP 访问,您首先必须按照前面所述设置一个特殊的帐户。常见的做法是为匿名帐户提供登录名和密码 uucp

此外,您必须为未知系统设置一些安全选项。例如,您可能希望禁止它们在您的系统上执行任何命令。但是,您无法在sys文件条目中设置这些参数,因为 system 命令需要系统名称,而您没有系统名称。Taylor UUCP 通过 unknown 命令解决了这个难题。unknown 可以在config文件中使用,以指定通常可以出现在系统条目中的任何命令。
unknown         remote-receive ~/incoming
unknown         remote-send ~/pub
unknown         max-remote-debug none
unknown         command-path /usr/lib/uucp/anon-bin
unknown         commands rmail

这将限制未知系统从pub目录下方下载文件,并将文件上传到incoming目录,该目录位于/var/spool/uucppublic下方。下一行将使 uucico 忽略来自远程系统在本地打开调试的任何请求。最后两行允许未知系统执行 rmail;但是指定的命令路径使 uucico 仅在名为anon-bin的私有目录中查找 rmail 命令。此限制允许您提供一些特殊的 rmail,例如,将所有邮件转发给超级用户进行检查。这允许匿名用户联系系统的维护者,但同时也防止他们向其他站点注入任何邮件。

要启用匿名 UUCP,您必须在config中至少指定一个 unknown 语句。否则,uucico 将拒绝所有未知系统。

注释

[1]

请注意,tcpd 通常具有模式 700,因此您必须以用户 root 而不是 uucp 的身份调用它。tcpd第 12 章中进行了更详细的讨论。

[2]

Gert Doering 的 mgetty 就是这样一种工具。它运行在各种平台上,包括 SCO Unix、AIX、SunOS、HP-UX 和 Linux。

[3]

版本 1.04 中不存在此选项。