Next Previous Contents

13. 如果你的 PPP 伺服器使用 PAP 认证(Password Authentication Protocol)

如果你连接的伺服器需要 PAP 或 CHAP 认证,你需要多一点的工作.

在上面的选项档案中,加上下面几行


#
# 告诉 pppd 使用你的 ISP 名称做为认证过程中的"主机名称"
name <your ISP user name>    # 你需要改变这一行
#
# 如果你执行 PPP *伺服器* 并且需要使用 PAP 或 CHAP 认证,适当除去下面的
# 注解.不要在你做为客户端连上伺服器时使用此选项(即使它使用 PAP 或 CHAP)
# 因为这是告诉伺服器必须为它自己在你的机器上提供认证(这几乎是不可能的,
# 所以连结会失败).
#+chap
#+pap
#
# 如果你使用在 /etc/ppp/pap-secrets 档案中经编码的密码,除去下面一行的注解.
# 注意: 这和 Windows NT 上的远端存取服务里的微软编码密码是不同的.
#+papcrypt

13.1 使用 MSCHAP

微软的 Windows NT 远端存取服务(RAS)可以被设定为使用一种 CHAP(Challenge/Handshake Authentication Protocol) 的变种. 在你的 PPP 原始程式码中,你可以找到一个叫 README.MSCHAP80 的档案讨论这件事.

你可以开启 pppd 的侦错功能判断伺服器是否要求使用此认证协定. 如果伺服器使用 MS CHAP 认证,你会看到这样的一行


rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>]

关键的讯息是 auth chap 80

为了使用 MS CHAP,你必须重新编译 pppd 以支援此协定. 请参见 PPP 原始程式码中的 README.MSCHAP80 说明如何编译以使用此变种协定.

你还要注意这里的程式码只是让 Linux PPP 做为客户端连接上 MS Windows NT 伺服器用的. 它并不支援将 Linux 设立为让客户端使用 MSCHAP80 认证 PPP 伺服器.

13.2 PAP/CHAP 密码档案

如果你使用 PAP 或 CHAP 认证,你必须建立这些密码档案.它们是:


/etc/ppp/pap-secrets
/etc/ppp/chap-secrets

这些档案拥有者必须为 root,群组为 root,同时为了安全档案权限应为 740.

关於 PAP 与 CHAP 第一点要指出的是它们是设计用来认证电脑系统而不是使用者的.

"嗯? 有什麽不同呢?" 我听到你在问.

哦,一旦你的电脑建立与伺服器建立 PPP 连线,你系统上的任何使用者都可以使用此连线 - 不只是你而已. 这也是为何你可以使用 PPP 将两个区域网路(LAN)连接起来建立一广域网路(WAN)的原因.

PAP (还有 CHAP 也是)需要双向认证 - 也就是每一电脑需要一个合法的名称与密码在另一电脑上. 然而,这并不是大部份提供拨接式 PAP 认证连接的 PPP 伺服器运作的方式.

也就是说,你的 ISP 可能会给你一个使用者名称与密码以允许你连接到他们的系统进而连接到网际网路上. 你的 ISP 对於你电脑的名称一点也不感兴趣,因此你可能必须使用你在 ISP 上的使用者名称做为你电脑的名称.

这点要使用 pppd 选项的 name user name 来达成. 因此,如果你使用你 ISP 给你的使用者名称,加上这一行


name your_user name_at_your_ISP

到你的 /etc/ppp/options 档案中.

从技术上来说,PAP 其实应该要使用 user our_user name_at_your_ISP 这个选项,但是如果使用到 PAP 的话那麽 pppd 聪明的足以把 name 解译为 user. 使用 name 这个选项的好处是这对於 CHAP 也是有效的.

因为 PAP/CHAP 是用来验认电脑的,在技术上你也需要指定远端电脑的名称. 然而,大部分的人只接一家 ISP 所以你可以在密码档里的远端主机名称使用通用字元(*) .

许多 ISP 有多个数据机拨接中心连接到不同的终端机伺服器 - 每个终端机伺服器都有不同的名称,但都从单一的(自动转线)号码拨接. 在某些情形下可能因此而很不容易预先知道远端电脑的名称!

13.3 PAP 密码档

/etc/ppp/pap-secrets 这个档案看起来像


# Secrets for authentication using PAP
# client        server       secret     acceptable_local_IP_addresses

这四个栏位是以空白分界而且最後一项可以是空白(如果你使用动态 IP 或由你的 ISP 所提供的静态 IP).

假定你的 ISP 给你的使用者名称是 fred 而密码是 flintstone 的话那麽你应该在 /etc/ppp/options[.ttySx] 里设定 name fred 这个选项并且把你的 /etc/ppp/pap-secrets 档案设成下面这样


# Secrets for authentication using PAP
# client        server  secret          acceptable local IP addresses
fred            *       flintstone

这是说对於 fred 这个本地机器名称(我们已经告诉过 pppd 使用这个名称,即使这不是我们本地机器的名称也一样)以及任何的伺服器,都使用 flintstone 这个密码(暗码).

注意到我们并不需要指定本地的 IP 位址,除非有要求要我们使用一个特定的,固定的 IP 位址. 即使你试著用一固定的 IP,这也不大可能行得通因为对於大部份的 PPP 伺服器(为了安全的理由)不允许远端系统自行指定 IP 号码.

13.4 CHAP 密码档

目前的 pppd 版本要求你要有互相验认的方法 - 这是说你必须能够让从你的机器到远端伺服器以及从远端伺服器到你的机器这两种验认都能进行.

所以,如果你的机器是 fred 而远端是 barney 的话,则在它们个别的 /etc/ppp/options.ttySx 里你的设为 name fred remotename barney 而远端机器应设为 name barney remotename fred

fred 这台机器的 /etc/ppp/chap-secrets 档案看起来会像


# Secrets for authentication using CHAP
# client        server  secret            acceptable local IP addresses
fred            barney  flintstone
barney          fred    wilma

而 barney 的是


# Secrets for authentication using CHAP
# client        server  secret            acceptable local IP addresses
barney          fred    flintstone
fred            barney  wilma

特别要注意的是双方机器都必须具有双向认证的项目.这允许本地的机器向远端机器认证它自己并且让远地机器向本地机器认证它自己.

13.5 处理多重 PAP 认证连接

一些使用者拥有多於一部使用 PAP 的伺服器可连线. 如果你的使用者名称在每部你想连接的机器上都不同,这并不是问题.

然而,许多使用者在两个系统(或者甚至是全部)上具有相同的使用者名称. 这在从 /etc/ppp/pap-secrets 中正确地选择适当一行时会有问题.

如你所料地,PPP 提供一种机制以克服此因难. PPP 允许你使用 remotename 选项为远端伺服器设定一个"假想名称".

假设你连接到两部 PPP 伺服器都使用名称 fred.你以此方式建立 /etc/ppp/pap-secrets 档案


fred    pppserver1      barney
fred    pppserver2      wilma

如此,在与 pppserver1 连线时你在 pppd 选项中使用 name fred remotename pppserver1 并在连线 pppserver2 时使用 name fred remotename pppserver2

因为你可以使用在 pppd 使用 file filename 以指定 ppp 选项,你可以建立一指令稿以连接到每部 PPP 伺服器,正确地取用选项档案并且选择正确的 remotename 选项.


Next Previous Contents