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