第 12 章 Internet 服 务 器

为 了 反 映 出 Unix 和 Internet 的 开 发 之 间 的 紧 密 关 系 , Linux 提 供 了 很 好 的Internet 服 务 , 像 Web , WA IS , ftp 和 Gophe r。 除 了 访 问 其 他 的 站 点 之 外 , 您可 设 置 自 己 的 Linux 系 统 作 为 一 个 Web 站 点 或 ftp 站 点 。 别 人 可 以 用 您 创 建 的W eb 页 来 访 问 您 的 系 统 或 下 载 您 提 供 的 文 件 。 这 样 的 系 统 便 被 称 为 服 务 器 , 并能 提 供 服 务 。 您 可 设 置 您 的 系 统 成 为 一 个 W eb 服 务 器 或 ftp 服 务 器 , 把 它 连 接到 Internet 中 使 其 他 用 户 可 以 访 问 。 一 个 单 个 的 Linux 系 统 可 以 提 供 几 种 不 同的 服 务 。 您 的 Linux 系 统 可 以 是 一 个 W eb 服 务 器 和 一 个 ftp 服 务 器 , 也 可 以 同时 是 一 个 Gopher 服 务 器 和 WAIS 服 务 器 。 一 个 用 户 可 以 用 您 的 ftp 服 务 下 载 文件 , 同 时 另 一 个 用 户 可 以 阅 读 您 的 W eb 页 。 为 了 做 到 上 述 功 能 , 您 要 为 每 个 服务 安 装 和 运 行 合 适 的 服 务 器 软 件 。 每 项 服 务 操 作 时 都 运 行 一 个 守 护 进 程 , 用 它来 查 找 远 程 用 户 对 它 的 操 作 请 求 。

OpenLinux 系 统 已 经 是 一 个 Web 、 ftp 和 Gopher 服 务 器 。 在 设 计 此 系 统 时已 经 把 它 设 计 为 Internet 服 务 器 。 通 常 您 需 要 自 己 取 得 和 安 装 服 务 器 软 件 , 但当 您 安 装 OpenLinux 时 , 这 些 服 务 的 服 务 器 软 件 将 自 动 安 装 并 配 置 。 每 次 您 启动 Ca ldera Network Desktop, 就 启 动 了 W eb 和 ftp 服 务 器 守 护 进 程 。 为 了 使您 的 Linux 系 统 成 为 一 个 W eb 服 务 器 , 只 须 创 建 W eb 页 。 另 外 , 只 须 把 您 要使 之 可 用 的 文 件 放 在 ftp 目 录 下 , 即 成 为 ftp 服 务 器 。 一 个 Gopher 服 务 器 也 被

自 动 安 装 。

为 了 使 您 的 Linux 系 统 作 为 一 个 Internet 服 务 器 ,您 必 须 取 得 一 个 到 Internet 的 连 接 并 提 供 远 程 用 户 到 您 系 统 的 访 问 。 访 问 通 常 是 指 允 许 匿 名 注 册 到 服 务 器保 留 的 目 录 中 。 您 的 OpenLinux 系 统 已 配 置 允 许 Web 和 ftp 用 户 进 行 访 问 。 建立 一 个 能 容 纳 服 务 器 操 作 的 Internet 连 接 并 不 简 单 。 您 需 要 一 个 专 门 的 连 接 , 或 由 Internet 服 务 提 供 商 提 供 一 种 连 接 。 您 不 仅 是 自 己 连 接 到 Internet, 您 还 要允 许 许 多 的 用 户 通 过 Internet 和 您 建 立 一 个 很 大 流 量 的 连 接 。

如 果 您 只 想 给 本 地 网 络 提 供 服 务 , 就 不 需 要 专 门 的 连 接 。 另 外 , 还 可 以 允

许 用 户 通 过 调 制 解 调 器 连 接 和 注 册 到 您 的 系 统 , 以 提 供 信 息 服 务 。 用 户 可 以 拨号 到 您 的 系 统 中 使 用 您 的 Web 页 或 用 ftp 下 载 文 件 。 无 论 您 想 提 供 什 么 样 的 服务 , 您 都 需 要 安 装 合 适 的 服 务 器 软 件 并 运 行 它 。

本 章 将 考 察 Internet 的 四 部 分 服 务 :W eb 、ftp 、WA IS 和 Gopher 。对 于 Web 、ftp 和 GN Gopher 服 务 已 经 被 安 装 , 您 不 用 按 照 描 述 的 执 行 安 装 的 步 骤 。 另 外 , 此 部 分 将 向 您 讲 述 服 务 被 设 置 在 什 么 目 录 中 , 以 及 如 何 把 文 件 象 Web 页 放 到 这些 目 录 中 。 在 您 的 Ca ldera Network Desktop 上 没 有 设 置 WA IS , 所 以 您 要 取得 此 服 务 器 软 件 并 按 照 本 章 的 描 述 对 它 进 行 安 装 。

启 动 服 务 器

  • 个 服 务 器 就 是 一 个 和 其 他 程 序 同 时 运 行 的 守 护 进 程 , 它 不 断 的 查 找 是 否有 对 服 务 的 请 求 , 此 请 求 可 以 来 自 您 的 系 统 的 其 他 用 户 或 通 过 网 络 连 接 到 您 的

系 统 中 的 远 程 的 用 户 。 当 它 收 到 一 个 来 自 用 户 的 服 务 请 求 , 它 便 启 动 一 个 会 话以 提 供 服 务 。 例 如 , 如 果 一 个 用 户 想 从 您 的 系 统 中 下 载 一 个 文 件 , 他 能 使 用 他自 己 的 ftp 客 户 程 序 来 请 求 您 的 ftp 服 务 器 为 他 启 动 一 个 会 话 。 在 此 会 话 期 间 , 他 能 访 问 您 的 系 统 并 从 中 下 载 文 件 。

为 了 使 用 户 能 访 问 您 的 服 务 器 , 您 的 服 务 器 必 须 运 行 。 如 果 您 在 您 的 系 统中 设 置 一 个 带 有 HTML 文 件 的 Web 站 点 , 在 用 户 能 访 问 您 的 W eb 站 点 和 显 示这 些 文 件 之 前 , 您 必 须 运 行 httpd W eb 服 务 器 程 序 。

有 一 些 方 法 可 以 启 动 一 个 服 务 器 。 一 种 方 法 是 从 命 令 行 手 工 输 入 服 务 器 程序 的 名 字 和 它 的 参 数 选 项 。 然 后 按 ENTER , 服 务 器 将 被 启 动 并 且 继 续 显 示 命令 行 提 示 。 服 务 器 将 在 您 完 成 其 他 任 务 时 同 时 运 行 。 为 了 查 看 您 的 服 务 器 是 否运 行 , 您 可 以 输 入 下 面 的 命 令 以 查 看 当 前 运 行 的 所 有 进 程 。 您 将 能 看 到 您 为 服务 器 程 序 启 动 的 进 程 。

#ps -ax

您 的 系 统 可 以 自 动 地 启 动 这 些 服 务 器 , 而 不 用 每 次 开 机 后 都 要 自 己 手 工 执行 这 些 服 务 器 程 序 。 依 照 您 想 如 何 使 用 一 个 服 务 器 , 这 有 两 种 方 法 来 配 置 自 动启 动 。 您 可 以 让 服 务 器 自 开 机 后 便 启 动 , 并 一 直 运 行 直 到 您 关 闭 它 ; 另 外 还 可以 让 服 务 器 收 到 用 户 的 第 一 个 对 它 的 服 务 请 求 时 再 启 动 。 如 果 一 个 服 务 器 经 常被 使 用 , 您 可 能 想 让 它 始 终 在 运 行 。 如 果 它 不 常 被 使 用 , 您 可 能 希 望 当 有 服 务请 求 时 再 启 动 它 。 例 如 , 如 果 您 运 行 一 个 Web 站 点 , 您 的 W eb 服 务 器 将 随 时可 能 收 到 来 自 Internet 上 的 请 求 , 而 对 于 ftp 站 点 来 说 , 您 可 能 不 常 收 到 请 求 , 在 这 种 情 况 下 , 您 可 能 想 让 您 的 ftp 服 务 器 收 到 请 求 时 再 启 动 。 当 然 有 些 ftp 站点 会 收 到 频 繁 的 请 求 , 它 们 将 被 设 置 为 不 断 运 行 的 ftp 服 务 器 。

为 了 启 动 系 统 时 自 动 启 动 一 个 服 务 器 , 需 要 用 到 目 录 /etc/rc.d/init.d 中 的 启动 脚 本 。 您 可 以 通 过 配 置 inetd 守 护 进 程 来 指 定 当 收 到 一 个 服 务 请 求 时 再 启 动一 个 服 务 器 。ined 将 查 找 服 务 请 求 并 在 收 到 请 求 时 启 动 服 务 器 。您的 OpenLinux 系 统 已 经 配 置 自 动 启 动 并 不 间 断 运 行 W eb 服 务 器 。 它 的 配 置 脚 本 叫 做httpd.init , 存 放 在 目 录 /etc/rc.d/init.d 中 。 ftp 服 务 器 在 inetd 下 配 置 运 行 。 当 有人 初 始 化 一 个 ftp 会 话 时 才 启 动 它 。 在 配 置 文 件 inetd.conf 中 您 能 找 到 一 个 关 于ftp 服 务 器 的 项 , 而 不 像 Web 服 务 器 那 样 , 在 目 录 /etc/rc.d/init.d 中 没 有 关 于 ftp 的 脚 本 。

服 务 器 初 始 化 脚 本

OpenLinux 用 了 一 种 补 充 的 初 始 化 文 件 , 此 文 件 在 其 他 的 系 统 中 并 不 存在 。 对 于 其 他 系 统 , 您 可 能 不 得 不 把 服 务 器 命 令 放 在 系 统 初 始 化 文 件 rc.local 中 。 对 于 OpenLinux , 您 能 使 用 目 录 /etc/rc.d/init.d 中 的 初 始 化 脚 本 。

目 录 /etc/rc.d/init.d 中 有 一 些 当 您 启 动 系 统 时 自 动 执 行 的 shell 脚 本 。 这 些 脚本 中 有 些 命 令 可 以 执 行 特 殊 的 程 序 象 服 务 器 程 序 。 在 这 些 程 序 中 , 您 能 找 到 一个 关 于 Web 服 务 器 的 脚 本 叫 做 httpd 。 小 心 不 要 更 改 其 他 的 脚 本 程 序 。 这 些 都是 关 于 您 的 网 络 接 口 或 打 印 机 守 护 进 程 必 须 的 启 动 程 序 。 在 目 录 中 有 一 个 简 单的 启 动 脚 本 叫 做 skeleton 。 为 了 给 服 务 器 创 建 一 个 新 的 脚 本 , 您 可 以 首 先 复 制一 个 skeleton 脚 本 。 接 着 编 辑 新 脚 本 , 把 服 务 器 路 径 名 和 命 令 放 在 合 适 的 位 置 。作 为 一 个 例 子 , 在 下 面 显 示 httpd 脚 本 。 W eb 服 务 器 程 序 的 名 字 为 httpd ,

$NAME=httpd 。 注 意 检 查 此 程 序 是 否 存 在 的 行 [ -f$DAEMON ] , $DAEMON

设 置 在 程 序 /usr/sbin/httpd 中。

/etc/rc.d/init.d/httpd #!/bin/sh

#httpdThis shell script takes care of starting and stopping httpd. PATH=/bin:/usr/bin:/sbin:/usr/sbin

NAME=httpd

DAEMON=/usr/sbin/$NAME

#Source function library.

./etc/rc.d/init.d/functions

#Source networking configuration.

./etc/sysconfig/network #Check that networking is up.

[ ${NETWORKING}="no" ] && exit0

[ !-r/etc/sysconfig/daemons/$NAME] && exit0

./etc/sysconfig/daemons/$NAME

[ "$ONBOOT"="no"-a"$PROBABLY"="booting" ] && exit 0 DAEMON=$DAEMON.$VARIANT

[ -f $DAEMON ] || exit 0

#See how we were called. case"$1"in

start)

#Start daemons.

if[ -f/etc/httpd/$VARIANT/conf/httpd.conf] ;then echo-n"Starting $IDENT services($VARIANT):" start-stop-daemon -S -n $NAME -x $DAEMON — -f

/etc/httpd/$VARIANT/conf/httpd.conf touch/var/lock/subsys/httpd

echo"."

elif[ "$PROBABLY"="goofing "] ;then echo"$VARIANT httpd not configured:Skipped!" fi

;;

stop)

#Stop daemons.

[ -f /var/lock/subsys/httpd] ||exit 0 if[ -f /var/run/$NAME.pid ] ;then

echo -n"Shutting down$VARIANT httpd:"

start-stop-daemon -K -p/va r/ run/$NAME.pid -n $NAME echo"."

fi

rm-f/var/lock/subsys/httpd

;;

*)

echo "Usage:httpd{start|stop}" exit 1

esac

exit 0

httpd 脚 本 首 先 执 行 一 个 定 义 脚 本 中 使 用 的 函 数 的 脚 本 , 然 后 执 行 一 个 网 络脚 本 以 决 定 网 络 配 置 。 接 着 它 检 查 这 个 守 护 进 程 的 配 置 文 件 是 否 存 在 , 如 存 在 , 将 执 行 此 文 件 。 对 于 http 守 护 进 程 , 配 置 文 件 名 为

/set/ssyconfig.daemons/httpd 。 这 个 文 件 中 设 置 了 一 个 在 以 后 命 令 中 将 使 用 的变 量 $VARIANT 的 值 , 在 此 值 为 Apache 。

./etc/rc.d/init.d/functions

./etc/sysconfig/network

[ ! -r /etc/sysconfig/daemons/$NAME ] && exit 0

./etc/sysconfig/daemons/$NAME

Web 服 务 器 程 序 将 执 行 脚 本 中 下 面 的 命 令 行 。 变 量 $NAME 被 设 置 为 httpd ,

$DAEMON 被 设 置 为 Web 服 务 器 程 序 , /usr/sbin/httpd。 -f 选 项 指 定 此 Web 服务 器 的 配 置 文 件 , 在 配 置 文 件 中 $VARIANT 指 定 一 个 使 用 的 Web 服 务 器 , 在此 值 为 Apache 。 start-stop-daemon 函 数 加 上 -S 选 项 将 启 动 此 守 护 进 程 。

start-stop-daemon-S-n $NAME -x $DAEMON -- -f

/etc/httpd/$VARIANT/conf/httpd.conf

start-stop-daemon 函 数 加 上 -K 选 项 将 关 闭 此 守 护 进 程 , 用 -p 选 项 指 定 进 程号 和 -n 选 项 指 定 名 字 。

start-stop-daemon-K-p/var/run/$NAME.pid -n $NAME

系 统 中 为 每 个 运 行 级 都 设 置 一 个 子 目 录 , 这 些 初 始 化 的 文 件 能 被 这 些 子 目录 中 的 连 接 访 问 。 在 目 录 /etc/rc.d 中 , 有 一 组 命 名 规 则 为 rcN.d 的 子 目 录 , 在

此 N 是 用 来 指 定 运 行 级 别 的 数 字 。 rc 脚 本 将 在 系 统 启 动 时 决 定 运 行 级 别 , 并 只执 行 为 此 运 行 级 别 设 置 的 子 目 录 中 的 脚 本 文 件 。 缺 省 的 运 行 级 别 为 3 , 它 是 多用 户 级 。 当 您 启 动 系 统 时 , rc 脚 本 将 执 行 指 定 在 rc3.d 目 录 中 的 启 动 脚 本 。rc3.d 目 录 中 有 符 号 连 接 到 /etc/rc.d/init.d 目 录 中 的 启 动 脚 本 ( 参 见 第 6 章 关 于 符 号 连接 ) 。 所 以 在 目 录 /etc/rc.d/init.d 中 的 httpd 脚 本 实 际 是 通 过 rc3.d 目 录 中 的 符号 连 接 并 被 调 用 。 在 rc3.d 目 录 中 连 接 到 /etc/rc.d/httpd 脚 本 的 是 S85httpd 。 为了 使 得 服 务 器 能 自 动 启 动 , 首 先 要 在 目 录 /etc/rc.d/init.d 中 创 建 一 个 启 动 脚 本 , 然 后 在 目 录 /etc/rc.d/rc3.d 中 创 建 一 个 符 号 连 接 到 此 脚 本 。

假 设 您 已 在 系 统 中 安 装 了 一 个 Gopher 服 务 器 , 现 在 想 自 动 启 动 它 。 最 简 单的 创 建 一 个 启 动 脚 本 gopherd , University of Minnesota's Gopher 服 务 器 程 序的 方 法 是 把 httpd 复 制 一 份 命 名 为 gopherd 。httpd 和 gopherd 都 是 网 络 服 务 器 , 用 了 许 多 相 同 的 脚 本 。

#cp httpd gopherd

接 着 您 要 编 辑 gopherd 脚 本 并 替 换 httpd 和 gopherd 中 不 同 的 地 方 。 对 于变 量 $DAEMON ,

您 应 该 分 配 gopherd 服 务 器 程 序 的 路 径 名 , 如 /usr/sbin/gopherd 。

$NAME=gopherd

$DAEMON=/usr/sbin/gopherd

下 面 的 行 将 执 行 gopherd 服 务 器 。 注 意 命 令 中 包 括 一 些 参 数 , 象 Gopher 文 件 的 目 录 。 服 务 器 的 不 同 参 数 也 有 所 不 同 。 http W eb 服 务 器 没 有 参 数 。 您 能把 引 用 移 到 变 量 $VARIANT 中 。

start-stop-daemon -S -n $NAME -x $DAEMON /usr/lib/gopher-data

现 在 切 换 到 目 录 /etc/rc.d/rc3.d 中 , 创 建 一 个 符 号 连 接 到

/etc/rc.d/init.d/gopherd 脚 本 。 命 令 ln 加 -s 选 项 将 创 建 此 连 接 。

#ln -s /etc/rc.d/init.d/gopherd S94gopherd

以 后 再 启 动 您 的 系 统 时 , gopherd 服 务 器 将 自 动 启 动 , 不 断 地 运 行 等 待 的请 求 。

除 了 复 制 脚 本 httpd 外 , 您 还 能 复 制 脚 本 skeleton 。 然 后 把 skeleton 的 行替 换 成 gopherd 服 务 器 的 检 查 、 启 动 和 关 闭 。 还 可 以 加 一 些 命 令 行 来 执 行

/etc/sysconfig/network 脚 本 并 检 查 网 络 是 否 正 常 连 接 。

您 会 注 意 到 , 这 里 没 有 ftp 服 务 器 的 脚 本 。 在 OpenLinux 中 , ftp 服 务 器 是由 inetd 程 序 管 理 的 , 在 下 一 部 分 中 会 有 详 细 的 描 述 。 如 果 您 希 望 ftp 服 务 器 时刻 运 行 , 您 可 以 象 在 操 作 gopherd 服 务 器 那 样 创 建 一 个 init 脚 本 和 一 个 符 号 连接 。 ftp 服 务 器 程 序 的 名 为 in.ftpd 。

您 还 需 要 给 文 件 inetd.conf 中 inetd 项 加 注 释 , 使 它 不 再 管 理 ftp 服 务 器 。

12.2.1 netd 服 务 器 管 理

如 果 您 的 系 统 中 的 某 一 服 务 平 均 只 有 很 少 的 请 求 , 就 不 需 要 此 服 务 的 服 务器 时 刻 运 行 。 可 以 在 远 程 用 户 访 问 它 时 再 运 行 。 inetd 守 护 进 程 管 理 Internet 服务 器 , 并 只 在 系 统 收 到 对 服 务 的 请 求 时 才 调 用 它 们 。 inetd 将 不 停 地 检 查 远 程 用户 对 某 一 特 定 服 务 的 请 求 , 当 收 到 请 求 时 便 启 动 相 应 的 服 务 器 守 护 进 程 。 例 如 , 当 inetd 收 到 一 个 用 户 访 问 ftp 的 请 求 , 它 启 动 ftpd , ftp 守 护 进 程 。 ftpd 将 处 理此 请 求 , 允 许 用 户 下 载 文 件 。

要 使 得 inetd 调 用 合 适 的 服 务 器 守 护 进 程 , 您 必 须 配 置 此 服 务 。 要 在 文 件

/etc/services 和 /etc.inetd.conf 中 放 置 服 务 器 的 项 。 /etc/services 文 件 中 列 出 您

的 系 统 中 可 用 的 服 务 。 文 件 /etc/services 中 的 项 包 含 服 务 的 名 字 和 它 的 端 口 名以 及 用 斜 杠 分 隔 开 的 协 议 。 出 现 在 您 的 Redhat 文 件 /etc/services 中 ftp 项 如 下所 示 。 别 的 系 统 可 能 只 要 求 一 项 。

ftp-data20/tcp

ftp 21/tcp

/etc/inetd.conf 文 件 是 inetd 配 置 文 件 。 您 需 要 为 文 件 中 的 项 指 定 服 务 、 协议 和 调 用 的 服 务 器 程 序 。 下 面 显 示 的 是 一 个 ftp 的 项 。 服 务 器 路 径 和 参 数 根 据 不同 的 Linux 也 有 所 不 同 。

#<service> <sock_type> <proto> <flags> <user> <server_path><args> ftpstreamtcpnowaitroot/usr/sbin/ftpdftpd

在 别 的 Linux 中 , 配 置 行 可 能 存 在 , 但 前 面 加 有 一 个 # 号 把 它 注 释 掉 。 您 只 须 除去 # 号 。 如 没 有 此 配 置 项 , 就 需 要 加 上 它 。

tcpd

您 可 以 用 tcpd 守 护 进 程 给 inetd 管 理 服 务 器 加 上 一 个 安 全 级 。您 能 设 置 tcpd 来 监 视 服 务 器 通 过 inetd 的 连 接 。 tcpd 将 检 查 远 端 的 用 户 认 证 以 确 认 他 们 进 行一 个 有 效 的 请 求 。 用 tcpd 还 能 限 制 远 端 用 户 访 问 您 的 系 统 。 一 列 主 机 名 存 放 在文 件 hosts.allow 和 hosts.deny 中 。 文 件 中 的 项 有 如 下 格 式 : service:hostname:domain 。 domain 是 可 选 项 。 对 于 service 您 能 指 定 一 个 特 定的 服 务 象 ftp 或 输 入 ALL 指 定 所 有 的 服 务 。 对 于 hostname 您 能 指 定 一 个 特 定

主 机 名 , 或 用 ALL 指 定 所 有 的 主 机 。 下 面 的 例 子 中 , 第 一 项 允 许 所 有 的 主

机 访 问 Web 服 务 , http 。 第 二 项 允 许 主 机 pango1.train.com 访 问 所 有 的 服 务 。第 三 和 第 四 项 允 许 主 机 rose.berkeley.edu 和 caldera.com 进行 ftp 访 问 。

http:ALL

ALL:pango1.train.com ftp:rose.berkeley.edu ftp:caldera.com

文 件 hosts.allow 中 包 含 您 允 许 访 问 的 主 机 。 如 果 您 只 是 不 允 许 一 些 特 定 的主 机 访 问 , 您 可 以 在 文 件 hosts.allow 中 对 服 务 指 定 ALL , 而 在 文 件 hosts.deny 中 列 出 您 禁 止 的 主 机 名 。 tcpd 的 帮 助 页 ( man tcpd ) 提 供 关 于 tcpd 更 多 的 信息 。

为 了 使 tcpd 监 视 一 个 服 务 器 , 您 需 要 在 文 件 inetd.conf 中 的 服 务 器 项 的 路径 名 区 域 中 放 置 tcpd 的 路 径 名 。您 的 Caldera Network Desktop 已 经 设 定 了 ftpd 服 务 器 项 。 用 tcpd 守 护 进 程 的 路 径 名 , /usr/sbin/tcpd 可 以 代 替 ftpd 程 序 的 路径 名 , /usr/sbin/in.ftpd。 参 数 域 中 列 出 in.ftpd 服 务 器 程 序 。

#<service> <sock_type> <proto> <flags> <user> <server_path><args> ftp stream tcp nowait root /usr/sbin/tcpdin.ftpd

当 inetd 收 到 一 个 ftp 服 务 的 请 求 , 它 调 用 tcpd 守 护 进 程 , 用 它 来 接 管 和 监

视 连 接 。 接 着 它 启 动 in.ftpd 服 务 器 程 序 。 缺 省 情 况 下 , tcpd 将 允 许 所 有 的 请 求 。为 了 允 许 所 有 的 对 ftp 服 务 的 请 求 , 您 需 在 您 的 文 件 /etc/hosts.allow 中 输 入 如下 所 示 的 项 , 项 ALL:ALL 将 使 您 的 系 统 对 所 有 的 用 户 开 放 所 有 的 服 务 。

ftp:ALL

ftp 服 务 器

OpenLinux 已 经 安 装 一 个 ftp 服 务 器 并 创 建 一 个 您 放 置 供 ftp 访 问 的 文 件 的

目 录 。 目 录 已 经 被 配 置 控 制 远 程 用 户 的 访 问 , 限 制 用 户 只 能 访 问 ftp 目 录 和 它 的子 目 录 。 留 给 ftp 的 目 录 为 /home/ftp 。 您 要 把 允 许 ftp 访 问 的 文 件 放 在 目 录

/home/ftp/pub 中 。 还 可 以 在 其 中 创 建 子 目 录 来 放 文 件 。 一 旦 连 接 到 网 络 中 , 一个 远 程 的 用 户 可 以 ftp 到 您 的 系 统 中 , 并 从 目 录 /hotm/ftp/pub 或 它 的 子 目 录 中下 载 文 件 。

虽 然 OpenLinux 已 经 配 置 成 一 个 ftp 站 点 , 但 是 理 解 它 是 如 何 配 置 的 也 是十 分 有 用 的 。 当 您 安 装 另 一 个 系 统 时 , 您 就 需 要 知 道 下 面 所 描 述 的 如 何 安 装 ftp 服 务 器 和 创 建 它 的 数 据 目 录 。 然 而 在 OpenLinux 中 已 经 完 成 这 些 设 置 , 您 不 需要 再 一 一 设 置 。

在 不 同 的 Linux 的 ftp 站 点 上 都 有 ftp 服 务 器 软 件 。 在 sunsite.unc.edu 和 它的 镜 像 站 点 上 , ftp 服 务 器 软 件 位 于 /pub/Linux/systems/Network/file-transfer 目录 中 。 The Washington University 的 ftp 服 务 器 是 一 个 文 件 叫 做 wu-ftpd-2.4- fixed.tar.g z。 将 来 您 可 能 想 从 这 些 站 点 中 下 载 您 的 ftp 服 务 器 软 件 的 更 新 版 本 并用 它 们 来 更 新 您 的 服 务 器 。 如 果 您 从 一 个 ftp 站 点 下 载 ftp 服 务 器 软 件 , 您 将 首先 解 压 和 展 开 它 们 。 将 会 自 动 创 建 一 些 目 录 存 放 文 档 和 源 代 码 。 服 务 器 软 件 包中 将 有 安 装 说 明 , 可 以 用 他 们 指 导 创 建 您 的 服 务 器 目 录 和 编 译 软 件 。

为 了 允 许 远 程 用 户 访 问 , 必 须 运 行 服 务 器 软 件 , ftp d( 表 12-1 中 有 关 于 ftpd 的 选 项 ) 。 和 其 他 的 服 务 器 一 样 , 您 可 以 在 启 动 机 器 是 开 始 ftp 服 务 , 可 以 当 收到 一 个 请 求 时 通 过 inetd 启 动 ftp 服 务 器 , 或 直 接 从 命 令 行 中 启 动 它 。 关 于 使 用inetd 启 动 ftp 服 务 器 , 在 前 面 “ 启 动 服 务 器 ” 中 已 详 细 描 述 。 为 了 在 初 启 系 统时 便 启 动 ftp 服 务 器 , 您 需 要 象 在 W eb 服 务 器 中 描 述 的 那 样 , 在 目 录

/etc/rec./inin.d 中 创 建 一 个 init 脚 本 。 要 想 从 命 令 行 中 启 动 ftp 服 务 器 , 您 要 输

入 ftpd 命 令 和 参 数 或 选 项 。 ftpd 服 务 器 能 通 过 选 项 被 调 用 。 通 常 要 带 允 许 注 册的 -l 选 项 。 选 项 -t 和 -T 用 来 给 用 户 设 定 中 断 时 间 , 一 段 时 间 内 没 有 动 作 , 就 将切 断 那 些 连 接 。 选 项 -d 显 示 调 试 信 息 , -u 为 上 传 的 文 件 设 置 umask 值 。 安 装在 您 的 Ca ldera Desktop 中 的 ftp 服 务 器 的 名 字 是 in.ftpd, 用 它 来 直 接 调 用 ftp 服 务 器 。

表 12-1 Web 服 务 器 目 录 和 http 选 项

选 项 作 用

-d 为 系 统 日 志 写 调 试 信 息

-l 在 系 统 日 志 中 注 册 每 个 会 话

-t seconds 设 置 不 活 动 的 超 时 秒 数 ( 缺 省 的 是 15 分 钟 )

-T seconds 允 许 用 户 设 定 的 最 大 的 超 时 时 间 ( 缺 省 的 是 两 小 时 )

-a 使 用 ftpaccess ( 5 ) 配 置 文 件

-A 禁 用 ftpaccess ( 5 ) 配 置 文 件

-L 把 设 置 到 ftpd 服 务 器 的 命 令 注 册 到 系 统 日 志 中

- I 把 ftpd 收 到 的 文 件 注 册 到 xferlog

-o 把 ftpd 传 输 的 文 件 注 册 到 系 统 日 志

Ftp 服 务 器 配 置 文 件

这 有 一 组 配 置 文 件 您 可 用 它 们 来 管 理 您 的 ftp 站 点 。 在 您 的 OpenLinux 系

统 中 , 这 些 文 件 位 于 目 录 /etc 下 , 并 以 ftp 作 为 名 字 的 开 头 。 ftpaccess 文 件 将决 定 访 问 您 的 ftp 站 点 的 用 户 的 权 能 。 访 问 、 信 息 、 权 限 、 记 录 和 其 余 的 杂 项 功能 将 被 指 定 。 例 如 , 您 可 给 某 一 目 录 创 建 一 个 别 名 , 当 一 个 ftp 用 户 注 册 时 显 示一 个 信 息 或 不 允 许 任 何 匿 名 用 户 删 除 文 件 。 文 件 中 的 loginfails 项 定 义 一 个 用 户在 断 出 之 前 试 着 登 录 的 次 数 , email 项 指 定 ftp 管 理 员 的 email 地 址 。 ftpaccess 的 帮 助 页 中 列 出 可 能 的 选 项 。 当 安 装 您 的 OpenLinux 系 统 , ftp 服 务 器 将 被 自 动 安 装 和 配 置 。 下 一 部 分 显 示 的 是 ftpaccess 文 件 和 它 的 配 置 。

权 能 是 为 三 种 不 同 类 型 的 用 户 设 置 的 , 三 种 用 户 为 : 匿 名 、 客 户 和 真 正 的用 户 。 匿 名 用 户 是 指 用 匿 名 注 册 的 用 户 。 客 户 用 户 是 指 用 客 户 帐 号 注 册 或 访 问的 用 户 。 一 个 真 正 的 用 户 是 指 一 个 在 系 统 中 有 帐 号 的 用 户 并 用 ftp 连 接 访 问 系统 。 用 类 选 项 可 定 义 您 自 己 的 类 。 在 这 里 显 示 的 ftpaccess 文 件 中 , 创 建 一 个叫 做 all 的 类 , 类 中 包 括 所 有 的 匿 名 、 客 户 和 真 正 类 型 的 用 户 。

当 显 示 一 个 信 息 时 , 信 息 项 指 定 一 个 带 有 此 信 息 的 文 件 。 当 用 户 注 册 时 显示 一 个 信 息 , 当 进 入 某 一 个 目 录 时 显 示 另 一 个 信 息 。 例 如 , 下 面 的 项 是 用 户 注册 时 显 示 在 文 件 /welcome.msg 中 的 信 息 。

message /welcome.msglogin

为 了 设 定 权 限 , 您 用 命 令 加 上 一 个 yes 或 no , 接 着 列 出 用 户 类 型 或 类 。 在此 显 示 的 文 件 ftpaccess , 所 有 的 用 户 能 执 行 tar 和 compress 操 作 , 但 是 匿 名和 客 户 用 户 将 被 禁 止 使 用 chmod 、 delete 、 overwrite 和 rename 操 作 。 他 们 不能 删 除 文 件 、 改 变 它 们 、 更 改 它 们 的 名 字 或 权 限 。

/etc/ftpaccess

class all real,guest,anonymous * email root@localhost

loginfails 5

readme README* login readme README* cwd=* message /welcome.msglogin message.messagecwd=* compress yesall

taryesall chmodnoguest,anonymous deletenoguest,anonymous overwritenoguest,anonymous renamenoguest,anonymous

log transfers anonymous,real inbound,outbound shutdown/etc/shutmsg

passwd-check rfc822 warn

您 能 用 ftphosts 文 件 来 允 许 或 禁 止 别 的 主 机 访 问 您 的 ftp 站 点 。 ftpusers 文件 列 出 不 能 通 过 ftp 访 问 的 用 户 。 例 如 , 即 使 您 知 道 口 令 , 也 不 能 通 过 ftp 连 接注 册 成 为 一 个 超 级 用 户 。 ftpgroups 是 一 个 组 存 取 文 件 , 它 允 许 ftp 用 户 成 为 您系 统 中 一 个 特 定 组 的 成 员 。 此 文 件 中 列 出 特 定 的 组 口 令 。 在 ftpaccess 文 件 中private 项 必 须 被 设 置 成 ye s。 表 12-2 中 列 出 可 能 的 ftpconversions, 象 压 缩 和存 档 的 选 项 。 关 于 ftpaccess 项 , 参 见 表 12-3 。

表 12-2ftp 配 置 文 件

ftpaccess ftp 用 户 的 访 问 、 信 息 、 权 限 、 记 录 和 其 余 的 杂 项 功 能

ftpconversions 为 压 缩 和 归 档 操 作 的 Ftp 转 换 表

ftpusers 不 允 许 通 过 ftp 访 问 的 用 户 列 表 , 象 root ftp 用 户 用 特 定 的 口 令 能 访 问 的 组 。 格 式 是access-group:encrypted:real-group

groupsftp access-group 是 一 个 任 意 的 字 符 串 。 real-group 是 列 在

/etc/group 中 的 一 个 有 效 的 组 名

允 许 或 禁 止 不 同 的 主 机 访 问 您 的 Ftp 站 点

allow username addrglob [ addrglob... ] ftphosts 只 允 许 匹 配 addrglob 的 主 机 名 以 username 注 册

deny username addrglob [ addrglob...]

将 拒 绝 匹 配 addrglob 的 主 机 名 以 username 注 册

表 12-3Ftpaccess 项( 以“ glob ” 结 尾 的 项 目 可 以 使 用 文 件 名 匹 配 符 ; * 、? 和[ ]); 类 型 列 表 是 用 逗 号 分 隔 的 一 列 包 含 关 键 字 :“ anonymous ” 、“ guse t” 和 “ rea l” 的 列 表

访 问 能 力 描 述

autogroup group classglob

[ classglob... ]

class class typelist addrglob

[ addrglob... ]

允 许 通 过 一 个 匿 名 用 户 的 特 定 类 别 访 问 一个 组 的 只 读 的 文 件 和 目 录

定 义 用 户 的 类 和 表 addrglob 的 原 地 址 。typelist 是 用 逗 号 分 隔 的 一 列 包 含 关 键字 :“ anonymous ” 、“ guse t”和“ rea l” 的 列 表

deny host-addrglob 总 是 拒 绝 名 字 和 和 host-addglob 匹 配 的

message_file 主 机 的 访 问 , 并 显 示 message-file 文 件

guestgroup groupname

[ groupname...]

当 用 户 是 一 个 特 定 组 的 成 员 时 , 允 许 客 户通 过 一 个 真 正 的 用 户 进 行 访 问 。 客 户 用 户的 口 令 项 将 指 定 一 个 在 ftp 目 录 中 的 一 个用 户 主 目 录

lim it class n times message_file 在 时 间 times, 限 制 类 别 为 class 的 用 户

数 不 超 过 n , 并 显 示 message_file 文 件

noretrieve file-list 不 检 索 这 些 文 件

loginfails number 在 number 次 注 册 失 败 后 , 中 断 ftp 连 接 。缺 省 值 为 5 。

private yes|no 用 户 成 为 指 定 在 组 访 问 文 件 ftpgroups 中的 一 个 组 的 成 员 信 息 功 能

banner file 注 册 之 前 显 示 标 题 。 文 件 要 求 全 路 径 名

email email-address 定 义 ftp 管 理 员 的 email 地 址

message file{when{class...}} 在 ftp 注 册 时 或 切 换 目 录 时 显 示 文 件 的 内

容 。 “ when ” 参 数 可 以 是 “ LOGIN ” 或“ CWD= d ir ” ; dir 指 定 当 进 入 该 目 录 时显 示 信 息 。 在 信 息 文 件 中 可 能 是 “ magic cookie s” , 此 文 件 将 引 起 ftp 服 务 器 替 换“ cookie ” 并 带 d 上 一 些 特 定 的 字 符 串 , 象 日 期 或 用 户 名

raadme file{when{class}} 当 用 户 注 册 或 使 用 切 换 目 录 命 令 时 , 提 示

文 件 file 存 在 和 此 文 件 的 修 改 日 期 记 录 功能

log commands typelist 能 够 记 录 用 户 使 用 的 命 令

log transfers typelist directions 记 录 文 件 的 传 输 。 directions 是 逗 号 分 隔

的 一 列 项 , 包 括 “ inbound ” 和“ outbound ” , 它 们 将 记 录 文 件 上 传 到服 务 器 或 从 服 务 器 下 载

杂 项 功 能

alias string dir 为 一 个 目 录 定 义 一 个 别 名 字 符 串

cdpath dir 载 cdpath 中 定 义 一 项 , 它 定 义 一 个 在 切换 目 录 时 用 到 的 搜 索 路 径

compress yes|no classglob

[ classglobtar yes|no classglob

[ classglob... ]

使 能 够 compress 或 tar 任 何 匹 配classglob 的 类 。 实 际 的 转 换 定 义 在 外 部文 件 ftco nversion 中

shutdown path 如 果 path 指 定 的 文 件 存 在 , 服 务 器 将 检查 此 文 件 已 决 定 是 否 关 闭 服 务 器

virtual address

root|banner|logfile path

打 开 虚 拟 服 务 器 功 能 权 限 功 能 允 许 或 不 允许 执 行 特 殊 功 能 的 能 力 。 缺 省 情 况 下 所 有的 用 户 都 允 许

chmod yes|no typelist 允 许 或 不 允 许 改 变 用 户 权 限

delete yes|no typelist 允 许 或 不 允 许 删 除 文 件 , rm overwrite yes|no typelist 允 许 或 不 允 许 更 改 文 件

rename yes|no typelist 允 许 或 不 允 许 给 文 件 重 命 名 , m v umask yes|no typelist 允 许 或 不 允 许 文 件 创 建 权 限

passwd-check none|trivial|rfc822(enforce|warn)

path-filter typelist mesg allowed_charset{disallowed regexp...}

upload root-dir dirglob yes|no ownergroup mode

[ "dirs"|"nodirs"]

ftp 用 户 帐 号

定 义 服 务 器 对 匿 名 ftp 用 户 进 行 口 令 检 查的 级 别 是 否 强 制 执 行

对 于 在 typelist 中 的 用 户 , path-filter 定 义常 规 表 达 式 来 控 制 文 件 名 的 格 式 。 这 里 可能 有 多 个 不 允 许 的 regexp

定 义 一 个 带 有 dirglob 的 目 录 允 许 或 禁 止上 传

为 了 允 许 别 的 用 户 用 匿 名 ftp 访 问 您 的 系 统 , 您 必 须 创 建 一 个 名 为 ftp 的 帐号 。 您 能 给 帐 号 ftp 设 置 一 些 限 制 , 使 得 任 何 远 程 的 ftp 用 户 不 能 访 问 您 系 统 的其 他 部 分 。 您 必 须 改 变 此 帐 号 在 文 件 /etc/passwd 中 的 项 , 使 一 般 的 用 户 不 能 访问 它 。 在 您 的 Caldera Network Desktop 已 经 设 置 允 许 匿 名 用 户 进 行 ftp 注 册 , 下 面 的 项 在 您 的 /etc/passwd 文 件 中 。

ftp:*:14:50:FTP User:/home/ftp:

在 口 令 区 域 中 的 星 号 用 来 保 护 此 帐 号 , 它 将 阻 止 其 他 的 用 户 以 此 帐 号 注 册 , 并 因 此 控 制 它 的 文 件 或 访 问 您 的 系 统 的 其 他 部 分 。 用 户 ID , 14 , 是 一 个 独 特 的ID 。 注 释 域 是 “ FTP Use r” 。 注 册 目 录 是 /home/ftp 。 当 ftp 用 户 注 册 到 您 的 系统 时 , 他 将 处 于 此 系 统 中 。 如 果 没 有 设 置 主 目 录 , 需 创 建 一 个 , 并 用 命 令 chown

为 ftp 用 户 改 变 它 的 权 限 。

组 ID 是 ftp 组 的 ID , 是 专 门 为 匿 名 ftp 用 户 设 置 的 。 您 能 通 过 为 ftp 组 设 置限 制 来 限 制 匿 名 的 ftp 用 户 。 下 面 是 一 个 您 能 在 /etc/group 文 件 中 找 到 的 关 于 ftp 组 的 项 。 对 于 别 的 Linux , 如 果 您 没 有 此 项 , 应 该 加 上 它 。

ftp::50

目 录 /home/ftp 的 权 限 中 应 该 否 定 写 权 限 。 如 果 您 不 希 望 ftp 用 户 创 建 和 删除 目 录 , 您 可 以 用 chmod 命 令 设 置 权 限 555 来 禁 止 写 访 问 : chmod 555

/home/ftp 。

目 录 /home/ftp 和 它 的 权 限 、 口 令 和 组 项 已 经 设 置 在 您 的 Ca ldera Network Desktop 。 如 果 您 在 另 外 的 Linux 上 设 置 一 个 ftp 服 务 器 , 要 自 己 设 置 /home/ftp 。

ftp 服 务 器 目 录

为 了 防 止 您 的 系 统 遭 到 ftp 用 户 的 一 些 意 外 的 访 问 , 您 应 在 ftp 目 录 中 , 如

/home/ftp 中 , 创 建 一 组 有 限 制 的 目 录 。 在 表 12-4 中 提 供 一 列 目 录 。 保 护 的 一个 重 要 部 分 是 阻 止 远 程 用 户 使 用 不 再 限 制 目 录 中 的 命 令 或 程 序 。 例 如 , 因 为 ls 命 令 位 于 您 的 /bin 目 录 中 , 您 可 能 不 希 望 用 户 使 用 ls 列 出 文 件 名 。 同 时 , 您 又希 望 ftp 用 户 使 用 ls 命 令 。 为 了 做 到 这 一 点 , 您 需 要 在 目 录 /home/ftp 中 创 建 一个 新 的 目 录 bin , 接 着 复 制 一 份 命 令 ls 放到 /home/ftp/bin 中 。 此 目 录 将 限 制 ftp 用 户 的 使 用 , 他 们 使 用 的 命 令 ls 是 目 录 /home/ftp/bin 中 的 命 令 , 而 不 是 您 自 己用 的 /bin 中的 ls 命 令 。 通 过 同 样 的 方 法 , 您 可 以 让 ftp 用 户 使 用 其 他 命 令 。 您需 要 的 其 他 命 令 是 cd , 它 允 许 用 户 切 换 目 录 , 命 令 more , 它 让 用 户 显 示 文 本文 件 。 您 的 Caldera Network Desktop 已 经 创 建 了 /home/ftp/bin 目 录 并 在 其 中

安 装 一 些 基 本 命 令 。 您 能 加 入 一 些 希 望 使 用 的 命 令 。

表 12-4ftp 目录

/home/ftp ftp 服 务 器 目 录 , 所 有 者 是 root( 在 一 些 系 统 中 , 此

目 录 可 能 是 /usr/local/ftp ) ; 所 有 的 目 录 和 子 目 录 有权 限 555 或 755 以 限 制 其 它 用 户 或 组 只 有 读 或 执 行的 权 限

/home/ftp/bin 此 目 录 中 含 有 ftp 远 程 用 户 能 执 行 的 命 令 , 象 ls 和 cd

/home/ftp/etc 此 目 录 中 含 有 配 置 文 件 象 它 自 己 的 passwd 文 件

/home/ftp/pub 您 提 供 的 可 下 载 的 文 件 放 置 在 此 目 录 中 ; 您 可 以 在 其

中 设 置 子 目 录

/home/ftp/lib 如 果 ls 命 令 需 要 ld.so.1 文 件 , 就 需 要 此 目 录 来 存 放

此 文 件

您 还 需 要 一 个 /home/ftp/etc 目 录 , 存 放 您 的 passwd 和 group 文 件 的 副 本 。另 外 它 也 阻 止 ftp 用 户 访 问 /etc 目 录 下 的 原 文 件 。 编 辑 /home/ftp/etc/passwd 文件 , 删 除 您 的 系 统 的 一 般 用 户 的 项 。 剩 余 的 项 的 口 令 应 被 设 置 为 * , 以 保 护 访 问 。对 于 group 文 件 , 除 去 所 有 的 用 户 组 并 设 置 所 有 的 口 令 为 *。

#cat /home/ftp/etc/passwd root:*:0:0:::

bin:*:1:1:::

operator:*:11:0:::

ftp:*:14:50:::

nobody:*:99:99:::

#cat /homt/ftp/etc/group root::0:

bin::1:

daemon::2:

sys::3:

adm::4:

ftp::50:

目 录 /home/ftp/pub 中 放 有 您 想 让 远 程 ftp 用 户 下 载 的 文 件 。 当 ftp 用 户 注 册到 系 统 时 , 它 将 处 于 目 录 /home/ftp 中 , 并 能 切 换 到 目 录 /home/ftp/pub 中 开 始访 问 其 中 的 文 件 。 在 /home/ftp/pub 中 能 加 入 任 何 您 希 望 的 目 录 和 文 件 。 您 甚 至可 以 指 定 一 些 目 录 为 上 传 目 录 , 允 许 ftp 用 户 上 传 文 件 到 您 的 系 统 中 。

一 些 Linux 系 统 要 求 , ls 命 令 工 作 时 要 访 问 libc.so.1 和 rld 文 件 。 它 们 通 常 存 放 在 您 的 /lib 目 录 中 。 因 为 您 不 希 望 ftp 用 户 间 接 访 问 您 的 系 统 , 您 要 创 建 一个 /home/ftp/lib 目 录 , 并 复 制 这 些 文 件 , 把 复 制 的 文 件 放 在 此 目 录 中 。 另 外 , 因 为 rld 使用 /dev/zero 文 件 , 您 还 要 创 建 一 个 /home/ftp/dev 目 录 并 用 mknod 复 制 设 备 文 件 /dev/zero , 然 后 把 它 放 到 此 目 录 中 。

权 限

为 了 限 制 ftp 用 户 只 能 访 问 目 录 /homt/ftp 和 它 的 子 目 录 , 您 需 要 对 ftp 用 户隐 藏 文 件 结 构 的 其 余 部 分 。 您 要 让 目 录 /homt/ftp 呈 现 为 ftp 用 户 的 主 目 录 。 实际 的 主 目 录 /, 和 其 他 的 目 录 结 构 则 对 ftp 用 户 隐 藏 。 您 可 以 用 命 令 chroot 加 上参 数 ftp , 使 得 目 录 /home/ftp 呈 现 为 主 目 录 。

#chroot ftp

现 在 , 当 ftp 用 户 用 cd / 命 令 来 切 换 目 录 时 , 他 总 是 切 换 到 目 录 /home/ftp

中 。

作 为 进 一 步 的 限 制 , 在 /home/ftp 中 所 有 的 具 有 命 令 的 目 录 和 命 令 本 身 都 是

为 root 所 有 , 而 不 是 被 ftp 用 户 所 有 。 简 而 言 之 , ftp 用 户 不 能 控 制 这 些 目 录 。您 能 用 命 令 chown 来 改 变 目 录 的 所 有 权 。 下 面 的 例 子 便 是 把 目 录 /home/ftp/bin 和 命 令 /home/ftp/bin/ls 的 所 有 权 设 置 成 root 。 root 应 该 拥 有 /homt/ftp/bin ,

/homt/ftp/etc 以 及 它 们 包 含 的 所 有 文 件 。 Caldera Network Desktop 已 经 为 您 作到 这 点 。 对 于 别 的 系 统 , 您 可 能 要 自 己 设 置 所 有 权 。

#chown root /home/ftp/bin

ftp 目 录 的 权 限 应 该 设 置 为 允 许 ftp 用 户 访 问 。 对 于 所 有 者 、 组 和 另 外 的 用户 , 有 三 组 权 限 : 读 、 写 和 执 行 。 为 了 允 许 ftp 用 户 访 问 , 组 和 目 录 的 其 他 权 限应 设 置 为 可 读 和 执 行 。 执 行 权 限 允 许 ftp 用 户 访 问 目 录 , 读 权 限 则 允 许 列 出 目 录中 的 内 容 。 目 录 不 允 许 ftp 用 户 具 有 写 权 限 。 没 人 想 让 ftp 用 户 能 删 除 或 添 加 一个 目 录 。 例 如 , 目 录 /homt/ftp/bin 需 要 读 和 执 行 权 限 , 因 为 ftp 用 户 要 访 问 和 执行 它 的 命 令 。 对 于 拥 有 可 以 下 载 的 文 件 的 目 录 /homt/ftp/pub 来 说 , 它 必 须 拥 有读 和 执 行 的 权 限 。

作 为 目 录 的 所 有 者 , 您 需 要 写 权 限 以 便 能 添 加 新 文 件 或 子 目 录 。 当 然 , 只有 当 您 做 改 变 时 才 需 要 写 权 限 。 为 了 进 一 步 的 安 全 , 当 您 不 需 要 做 改 动 时 , 能设 置 这 些 目 录 对 所 有 的 用 户 包 括 所 有 者 都 只 开 放 读 和 执 行 的 权 限 。用 命 令 chmod 加 上 数 字 555 和 目 录 名 将 设 置 对 所 有 的 用 户 为 读 和 执 行 权 限 。 当 前 在 您 的Caldera Network Desktop 中 , ftp 目 录 的 权 限 设 置 的 为 755 , 它 给 了 所 有 者 写

权 限 。

#chmod 555 /home/ftp/bin

对 于 目 录 /homt/ftp/bin 中 文 件 的 权 限 和 其 他 指 定 的 ftp 目 录 的 权 限 能 有 更 多的 限 制 。 一 些 文 件 需 要 执 行 , 而 另 一 些 文 件 只 要 被 读 。 目 录 /home/ftp/bin 或

/home/ftp/lib 中 的 文 件 ls 和 rld 需 要 执 行 , 可 以 设 置 权 限 为 555 。 在 目 录

/home/ftp/etc 中 的 文 件 象 passwd 和 group 可 以 设 置 权 限 为 111 , 即 只 读 的 权限 。如 下 面 的 例 子 显 示 的 ,能 用 命 令 chmod 来 设 置 文 件 的 权 限 。在 您 的 Ca ldera Network Desktop 系 统 中 已 经 为 您 设 置 了 这 些 权 限 。 对 于 别 的 系 统 , 您 可 能 要自 己 设 置 。

#chmod 111 /home/ftp/etc/passwd

ftp 文 件

在 目 录 /homt/ftp/pub 下 的 目 录 中 有 ftp 文 件 , 作 为 礼 貌 , 您 应 为 ftp 用 户 创建 一 个 readme 文 件 和 一 个 index 文 件 。 readme 文 件 应 包 含 对 此 目 录 中 的 文 件的 一 个 简 单 描 述 。 index 文 件 应 包 含 一 列 文 件 和 对 文 件 中 的 内 容 进 行 简 单 描 述 。

Web 服 务 器

在 安 装 OpenLinux 期 间 , 将 自 动 地 在 您 的 系 统 中 安 装 Apache Web 服 务 器和 所 有 的 必 须 的 目 录 及 配 置 文 件 。 您 的 OpenLinux 系 统 已 经 是 一 个 全 功 能 的W eb 站 点 。 每 次 当 您 启 动 系 统 , Web 服 务 器 也 同 时 启 动 , 并 不 断 地 运 行 。 您 的

W eb 站 点 的 数 据 文 件 的 目 录 为 /home/httpd/htm l。 把 您 的 Web 页 放 在 此 目 录 或它 的 子 目 录 下 。 在 Apache 的 站 点 http://www.apache.org 中 提 供 了 它 的 Web 服 务 器 在 线 的 支 持 和 手 册 。 在 Caldere 的 站 点 http://www.caldera.com 中 也 有在 线 的 支 持 。 您 能 得 到 关 于 开 发 您 的 W eb 站 点 和 您 遇 到 的 问 题 的 更 多 的 信 息 。

您 不 需 要 做 更 多 的 事 情 。 一 旦 连 接 到 一 个 网 络 中 , 远 程 的 用 户 将 能 访 问 您的 Web 站 点 。 但 是 , 了 解 一 个 W eb 站 点 是 如 何 建 立 的 将 是 十 分 有 好 处 的 。 如果 您 使 用 另 外 的 系 统 , 可 能 需 要 知 道 安 装 Web 服 务 器 和 创 建 目 录 的 过 程 。 下 面将 对 此 过 程 进 行 一 个 描 述 。

安 装 在 您 的 OpenLinux 系 统 中 的 Web 服 务 器 把 Web 站 点 设 置 在 目 录

/homt/httpd 中 。 为 了 管 理 此 站 点 , 还 要 设 置 一 些 目 录 , 如 表 12-5 所 示 。 cgi-bin

有 网 关 接 口 , 文 件 icons 拥 有 您 的 主 页 所 用 的 图 标 。 您 的 Web 页 被 放 在 目 录

/home/http/html 中 。 把 您 的 主 页 的 index.html 文 件 也 放 在 此 目 录 下 。 配 置 文 件在 不 同 的 目 录 , /etc/httpd/conf 中 。

表 12-5Web 服 务 器 目 录 和 httpd 选 项

W eb 服 务 器 目 录 描 述

/home/httpd 您 的 W eb 服 务 器 的 目 录

/home/httpd/cgi-bin 公 共 网 关 接 口 和 脚 本

/home/httpd/icons 主 页 的 图 标

/home/httpd/html 您 的 W eb 站 点 的 Web 页

/etc/httpd/variant/conf 存 放 您 的 W eb 服 务 器 的 配 置 文 件 , variant

是 一 个 特 定 的 Web 服 务 器 ; 例 如 ,

/etc/httpd/apache/conf 中 的 配 置 文 件 是 安装 在 OpenLinux 上 的 Apache Web 服 务 器的

httpd 选 项

-d 如 果 不 用 缺 省 的 目 录 , 用 此 选 项 指 定 一 个目 录

-f 允 许 您 指 定 一 个 不 同 于 httpd.conf 的 配 置文 件

-v 显 示 版 本

还 有 一 些 免 费 的 Web 服 务 器 软 件 可 供 您 使 用 。 NCSA httpd Web 服 务 器 是最 早 开 发 的 服 务 器 之 一 。 Apache 和 它 非 常 相 似 并 改 正 了 NCSA httpd 服 务 器 软件 中 的 一 些 问 题 。 您 能 从 多 数 的 Linux ftp 站 点 上 下 载 服 务 器 软 件 。 在 Linux ftp 站 点 和 它 的 镜 像 站 点 上 , W eb 服 务 器 软 件 位 于 目 录

/pub/Linux/systems/Networks/info-systems/www/server 中 。 您 能 用 ftp 或Netscape 来 访 问 此 目 录 。 将 来 能 从 此 目 录 中 下 载 您 的 W eb 服 务 器 的 更 新 版 本并 升 级 您 的 服 务 器 。

如 果 从 一 个 ftp 站 点 上 下 载 一 个 W eb 服 务 器 软 件 , 您 需 要 解 压 文 件 并 提 取档 案 文 件 。 此 过 程 中 将 用 到 许 多 以 前 的 目 录 , 不 过 在 目 录 中 新 增 一 些 文 档 和 源代 码 。 服 务 器 软 件 包 中 将 包 括 关 于 您 的 服 务 器 目 录 的 创 建 说 明 和 编 译 您 的 软 件的 说 明 。

配 置 您 的 Web 服 务 器

用 目 录 /etc/httpd/conf 目 录 中 的 一 些 配 置 文 件 能 配 置 您 的 Web 服 务 器 软 件 。根 据 需 要 不 同 配 置 也 有 所 不 同 , 可 以 让 您 的 Web 服 务 器 作 为 一 个 守 护 进 程 不 间断 地 运 行 , 或 当 inetd 需 要 时 调 用 它 。 如 果 您 的 服 务 器 将 有 大 量 的 使 用 , 应 该让 它 作 为 一 个 守 护 进 程 直 接 运 行 。

httpd.conf 文 件 用 来 配 置 W eb 服 务 器 守 护 进 程 。 它 列 出 了 一 列 变 量 和 它 们的 值 。 每 一 项 包 含 一 个 单 独 的 变 量 名 和 一 个 值 , 中 间 用 一 个 空 格 分 开 。 这 些 变量 为 您 的 Web 服 务 器 设 置 不 同 的 特 征 。 一 些 变 量 需 要 路 径 名 , 另 外 的 一 些 只 用设 置 关 键 字 “ on ” 或 “ off” 。 在 您 的 Caldera Network Desktop 中 已 经 设 置 了这 些 变 量 。 您 能 增 加 一 个 或 改 变 一 项 。 表 12-6 提 供 您 放 在 httpd.conf 文 件 中 的不 同 变 量 的 一 个 完 整 列 表 。 下 面 是 一 个 例 子 , 用 变 量 ServerAdmin 设 定 用 户 发送 关 于 管 理 的 问 题 的 邮 件 地 址 。 用 您 想 接 收 关 于 系 统 管 理 的 邮 件 的 地 址 来 代 替项 you @ your.address 。

#ServerAdmin: Your address, where problems should be e-mailed.

ServerAdmin you @ your.address

在 此 文 件 中 只 设 置 一 些 变 量 , 您 不 需 要 每 个 都 进 行 设 置 。 一 些 需 要 您 的 系统 的 特 殊 信 息 。例 如 , ServerName 为 您 的 W eb 服 务 器 指 定 一 个 另 外 的 主 机 名 。它 必 须 是 有 效 的 主 机 名 。 假 设 您 的 系 统 的 主 机 名 是 richlp.ix.com 。 还 有 一 个 另外 的 主 机 名 www.ix.com 。 注 意 此 项 前 有 一 个 # 号 。 去 掉 # 号 , 并 输 入 您 的 Web 服 务 器 的 主 机 名 以 取 代 new.host.nam e。

#ServerName allows you to set a hostname which is sent back to clinets

for

#your server if it's different than the one the program would get(i.e. use #"www" instead of the host's real name).

#ServerName new.host.name

文 件 srm.conf 配 置 Web 服 务 器 的 资 源 。 它 列 出 一 组 变 量 和 它 们 的 值 。 项的 前 面 通 常 带 有 一 个 注 释 来 解 释 此 项 。 一 些 项 已 经 被 赋 值 , 另 外 的 一 些 要 您 自己 输 入 值 。 您 能 用 标 准 的 文 本 编 辑 器 来 改 变 项 。 表 12-7 中 提 供 一 列 这 些 变 量 。下 面 的 例 子 显 示 项 DocumentRoo t。 此 项 前 有 一 个 注 释 解 释 。 项 本 身 包 含 一 个变 量 名 和 它 的 值 , 在 此 值 为 一 个 目 录 的 路 径 名 。

表 12-6httpd.conf 的 变 量

变 量 描 述

AccessConfig 文 件 access.conf 的 位 置 ( 缺 省 的 是 /conf/access.conf) AgentLog 动 作 的 记 录 文 件 ( 缺 省 的 是 logs/agent_log) ErrorLog 记 录 错 误 的 文 件 的 位 置 ; 如 果 不 是 以 / 开 头 , 则 指 相

对 于 服 务 器 主 目 录 的 地 址 ( 缺 省 的 是 log/error_log )

Group 服 务 器 作 为 一 个 守 护 进 程 运 行 的 组 ID

IdentityCheck 对 远 程 用 户 进 行 识 别 检 查

MaxClients 限 定 服 务 器 运 行 的 最 大 总 数 , 例 如 , 限 定 能 同 时 连 接

的 客 户 数 ; 超 过 此 数 , 客 户 将 不 能 注 册 ( 缺 省 值 为

150 )

MaxRequestsPerChil

( 缺 省 数 是 30 )

d

PidFile 服 务 器 将 记 录 它 的 pid 到 此 文 件 ( 缺 省 的 是

/logs/httpd.pid )

Port 等 待 请 求 的 端 口

ResourceConfig 文 件 srm.conf 的 位 置 ( 缺 省 是 conf/srm.conf) ServerAdmin 管 理 员 的 e-mail 地址

ServerName 另 外 的 服 务 器 的 主 机 名

ServerRootWeb 服 务 器 的 用 户 的 主 目 录 ; 也 是 服 务 器 的 配 置 、 错 误 和

记 录 文 件 所 放 置 的 目 录 ( 缺 省 的 是

/usr/locla/etc/httpd )

ServerType 或 是 单 机 或 是 inetd

StartServers 启 动 的 服 务 器 数 ( 缺 省 的 是 5 )

T imeOut 等 待 用 户 请求 的 秒 数 ; 如 果 在 此时 间 内 没 有 收 到 请求 , 用 户 将 退 出 注 册 ( 缺 省 的 是 400)

TransferLog 记 录 的 路 径 ( 缺 省 的 是 log/access_log ) TypesConfigMIME 配 置 文 件 的 位 置 ( 缺 省 的 是 conf/mime.con f) User 服 务 器 的 用 户 ID

表 12-7srm.conf 的 变 量

变 量 描 述

AccessFileName 在 每 个 目 录 中 拥 有 访 问 控 制 信 息 的 文 件

AddDescription 放 置 在 服 务 器 产 生 的 索 引 中 的 文 件 的 简 短 描述

AddEncoding extensions-list 当 浏 览 器 查 到 压 缩 文 件 时 , 对 它 们 进 行 解

压 ; extensions 列 表 中 包 括 不 同 的 扩 展 名 , 用 来 指 定 压 缩 的 类 型 , 象 .gz 指 定 gzip 。AddEncoding x-gzip gz

AddIcon image file file -

extensions 件 和 一 列 文 件 扩 展 名 , 象 .mpg , .bin

或 .ps AddIcon /icons/movie. gif . mpg .qt

AddIconbyEncoding 指 定 图 标 并 加 一 些 解 码 的 信 息

AddIconByType 用 MIME 类 型 来 确 定 图 标 的 使 用

AddLanguage language Extension

AddType type/subtypeextension

允 许 您 指 定 一 个 文 档 的 语 言 ; 如 果 一 个 文 件使 用 浏 览 器 能 识 别 的 语 言 , 您 可 以 使 用 浏 览器 的 内 容 可 变 的 功 能 , 指 定 语 言 和 扩 展 名 , 使 浏 览 器 能 显 示 此 文 件 AddLanguage en .en

允 许 您 不 用 编 辑 即 可 覆 盖 MIME 类 型 , 并指 定 特 定 的 文 件 为 某 一 种 类 型 ; 在 Apache

的 文 件 srm.conf-dist 中 有 一 些 项 能 使 用 象

map 文 件 , 这 些 项 被 注 释 掉

Alias alias-namepath-name 为 不 同 的 路 径 名 创 建 别 名 Alias /icons/

/usr/local/etc/httpd/icons/

DefaultType 文 档 使 用 的 缺 省 的 M IM E 类 型 , 服 务 器 不能 从 文 件 的 扩 展 名 中 找 到 的 此 类 型 ( 缺 省 是text/htm l)

DefaultIcon 不 包 含 图 标 的 文 件 所 显 示 的 图 标

DirectoryIndex 您 的 Web 站 点 索 引 的 文 件 名 ; 这 些 文 件 被做 为 HTML 目 录 的 预 写 索 引 ; 多 个 项 之 间用 空 格 分 隔 ( 缺 省 是 index.htm l)

DocumentRoot 您 提 供 的 文 档 的 目 录 ; 缺 省 下 , 所 有 的 请 求都 从 此 目 录 中 获 取 文 档 , 但 是 符 号 连 接 和 别名 可 能 指 向 其 他 位 置 ( 缺 省 是

/usr/local/etc/httpd/htdocs

FancyIndexing 为 了 做 索 引 , 加 文 件 名 和 图 标 到 文 件 列 中 ; 可 以 设 置 为 on 或 off

HeaderName 做 为 目 录 索 引 扩 展 的 文 件 ( 缺 省 是

HEADER )

IndexIgnore file-list 被 目 录 索 引 忽 视 的 文 件 集 ; 包 括 一 些 文 件 ,

象 README 或 HEADER

IndexOptions 索 引 选 项

LanguageProiority Language- list

允 许 您 给 定 一 些 语 言 的 一 个 优 先 顺 序 ; 忽 略内 容 具 有 多 义 性 LanguagePriority en fr de

OldScriptAlias 同 Alias

Readmename 服 务 器 缺 省 情 况 下 查 找 的 README 文 件 的名 字 ( 缺 省 是 README )

Redirect 告 诉 用 户 在 那 能 找 到 不 在 您 的 服 务 器 上 的 文

ScriptAlias alias-name path- name

控 制 包 含 服 务 器 脚 本 的 目 录

ScriptAlias /cgi-bin/

/usr/local/etc/httpd/cgi-bin/

UserDir 如 果 收 到 一 个 用 户 请 求 , 附 加 到 用 户 主 目 录中 的 目 录 名 ( 缺 省 是 /public_html)

DocumentRoot /usr/local/etc/httpd/htdocs

文 件 access.conf 决 定 一 些 服 务 是 否 允 许 用 户 访 问 , 这 些 服 务 位 于 服 务 器 的某 一 目 录 中 。 此 文 件 中 包 括 一 系 列 的 指 令 , 每 个 指 令 都 包 括 在 一 组 目 录 标 识 符中 。 开 始 的 标 识 符 是 单 词 “ D irectory” 加 上 一 个 目 录 路 径 名 , 并 用 尖 括 号 括 起来 ,<Directory pathname> 。结 束 的 标 识 符 用 相 同 的 <> 符 号 ,只 是 在“ Directory ” 前 加 有 一 个 斜 杠 , </Directory> 。 在 标 识 符 中 能 加 入 一 些 指 令 。

在 指 令 Options 中 , 您 能 授 权 一 些 特 征 , 象 使 用 符 号 连 接 。 用 指 令AllowOverride,您 能 决 定 文 件 .htaccess 能 覆 盖 那 些 被 指 令 设 定 的 特 征 。用 Limit 指 令 , 您 能 改 变 access.conf 文 件 以 控 制 W eb 用 户 访 问 您 的 系 统 。 Limit 指 令用 了 一 组 标 识 符 象 Directory 标 识 符 。用 <Limit> 开 始 一 个 Limit 指 令 并 用 </Limit>

结 束 它 。 Limit 指 令 指 明 谁 能 访 问 您 的 W eb 服 务 器 。 还 有 另 外 的 一 些 可 用 选 项 。例 如 , allow 选 项 加 上 一 列 主 机 名 , 将 限 制 只 能 这 些 主 机 访 问 。 deny 选 项 加 上一 列 主 机 名 将 拒 绝 这 些 系 统 的 访 问 。 表 12-8 列 出 了 不 同 的 指 令 和 它 们 的 选 项 。

在 您 的 文 件 access.conf 中 , 将 找 到 两 个 目 录 项 。 第 一 个 目 录 项 意 味 着 把 此目 录 作 为 您 的 Web 站 点 的 主 目 录 。 您 的 W eb 页 也 位 于 此 目 录 中 。 确 认 在 第 一个 目 录 项 中 使 用 的 路 径 名 是 否 就 是 您 的 W eb 站 点 使 用 的 根 路 径 名 。 如 果 不 是 , 改 正 它 。 下 面 是 一 个 Directory 项 的 例 子 。

#This should be changed to whatever you set DocumentRoot to.

<Directory /home/httpd/htdocs> Options Indexes FollowSymLinks A llowOverride All

# Controls who can get stuff from this server.

<Limit GET> order allow, deny allow from all

</Limit>

</Directory>

#Place any directories you wnat access information for after this one.

表 12-8access.con f 的 指 令 目 录 标 识 符 描 述

<Directory path-name></Directony> 指 定 设 置 控 制 的 目 录 ;以 </Directory>

结 束 指 令

Options feature-list 指 定 目 录 的 服 务 器 选 项 ; 放 置 在 目 录和 限 制 指 令 中

All 使 用 所 有 的 特 征

ExecCGI 使 CGI 脚 本 可 执 行FollowSymLinks 使 用 符 号 连 接Includes 允 许 使 用 include 文 件

IncludeNoExec 允 许 include 文件 但 不 允 许 exec 操 作

Indexes 允 许 用 户 查 询 索引

None 禁 用 所 有 特 征SymLinksIfOwnerMatch 使 用 符 号 连接 前 检 查 用 户 的 ID

AllowOverridefeature-list 目 录 中 .htaccess 文 件 能 覆 盖 的 控 制

选 项

All 不 限 制 访 问

AuthConfig

AuthName 目 录 的 授 权 名

AuthType 目 录 的 授 权 类 型

AuthUserFile 包 含 用 户 名 和 口 令

的 文 件

AuthGroupFile 包 含 容 许 的 组 名 的文 件

FileInfo 使 用 AddType 和

AddEncoding 指 令

Limit 使 用 限 制 指 令

Options 使 用 Options 指 令

<Limit></Limit> 用 下 列 指 定 控 制 对 您 的 W eb 服 务 器的 访 问 ; 项 all 指 定 所 有 的 主 机

allow host-list -host-list 允 许 在 host- list 中 指 定 的 主 机 访 问

denies host-list host-list 拒 绝 在

host-list 中 指 定 的 主 机 访 问

orders options 对 deny 和 allow 列 表 进 行 排 序 order deny,allow

requires host-list host-list 请 求 使 用

用 文 件 AuthUserFile 进 行 认 证

启 动 Web 服 务 器

您 能 用 命 令 httpd 手 工 启 动 您 的 Web 服 务 器 。 此 命 令 有 一 些 选 项 。 选 项 -d

允 许 您 为 http 程 序 指 定 一 个 不 同 于 缺 省 的 目 录 。 用 选 项 -f, 您 能 指 定 一 个 不 是

httpd.conf 的 配 置 文 件 。 选 项 -v 显 示 版 本 号 。

在 前 面 描 述 init 脚 本 时 提 到 ,您 的 OpenLinux 系 统 启 动 时 将 自 动 地 启 动 Web 服 务 器 守 护 进 程 。 Web 服 务 器 的 启 动 脚 本 叫 做 httpd, 它 位 于 目 录 /etc/rc.d/init.d 中 。 一 个 叫 做 S85httpd 的 符 号 连 接 并 运 行 目 录 /etc/rc.d/rc3.d 中 的 rc 程 序 。 对于 别 的 Linux 系 统 , 您 能 把 W eb 服 务 器 的 命 令 放 在 系 统 启 动 脚 本 象 rc.locla 或rc.sysinit 中 。

如 果 您 希 望 inetd 守 护 进 程 调 用 httpd ,在 文 件 /etc/services 和 /etc/inetd.conf 中 放 置 一 个 关 于 httpd 的 项 。 /etc/services 中 列 出 可 用 于 您 的 系 统 中 的 不 同 的 服务 。 对 于 Web 服 务 器 , 您 可 以 输 入 http 和 指 定 一 个 端 口 /tcp 。

http80/tcp

在 文 件 /etc/inetd.conf 中 的 Web 服 务 器 项 和 ftp 项 很 相 似 。 安 装 在 您 的 系 统Caldera Network Desktop 中 的 W eb 服 务 器 的 路 径 名 是 /usr/sbin/httpd.httpd , 它 没 有 参 数 。

http stream tcp nowait nobody /usr/sbin/httpd httpd

为 了 使 tcpd 能 监 视 和 控 制 Web 服 务 器 的 请 求 , 需 要 用 路 径 名 /usr/sbin/tcpd

代 替 路 径 名 /usr/sbin/httpd。

http stream tcp nowait nobody /usr/sbin/tcpd httpd

还 要 为 您 的 httpd.config-dist 文 件 中 的 ServerType 变 量 指 定 值 inetd 。

#ServerType is either inetd, or standalone. ServerType inetd

OpenLinux 没 有 配 置 从 inetd 运 行 您 的 W eb 服 务 器 。 如 果 您 希 望 这 样 , 需

要 从 自 动 启 动 的 列 表 的 启 动 守 护 进 程 列 中 除 去 您 的 Web 服 务 器 , 并 在 文 件

/etc/services 和 /etc/inetd.conf 中 加 入 合 适 的 项 。为 了 配 置 自 动 启 动 列 表 ,从 Lisa

主 菜 单 中 选 择 “ System Configuration ” , 从 下 一 级 菜 单 中 选 择 “ System Configuration ” 。 接 着 选 择 “ Configure daemon/server autostart ” 项 。 显 示一 列 守 护 进 程 和 服 务 器 。 项 后 带 有 一 个 `x`, 表 示 在 启 动 您 的 系 统 时 将 启 动 的 项 。移 到 Web 服 务 器 的 项 , 按 SPACEBAR 删 除 它 和 `x`。 接 着 按 ENTER ( 参 见 第19 章 关 于 Startup Daemon 菜 单 的 讨 论 ) 。

如 果 安 装 另 一 个 W eb 服 务 器 , 您 要 确 保 配 置 文 件 被 正 确 设 置 和 安 装 。 如 果您 用 另 一 个 版 本 , 并 且 自 己 安 装 Apache , 您 将 注 意 到 会 出 现 带 有 扩 展 名 .conf- dist 的 配 置 文 件 。 您 需 要 把 这 些 文 件 复 制 到 有 相 同 前 缀 , 后 缀 为 .conf 的 文 件 中 。W eb 服 务 器 将 只 从 带 有 后 缀 .conf 的 文 件 中 读 取 配 置 信 息 。 然 后 可 以 进 一 步 创建 您 的 配 置 项 。

为 了 检 查 您 的 W eb 服 务 器 , 启 动 Web 浏 览 器 并 输 入 您 的 系 统 的 Internet 域 名 。 对 于 系 统 turtle.trek.com , 用 户 输 入 http://turtle.trek.com 。 将 显 示 放 在W eb 服 务 器 上 主 目 录 中 的 主 页 。 最 简 单 的 方 法 是 用 lynx, 命 令 行 浏 览 器 。 启 动lynx 并 按 g 以 打 开 一 行 , 在 此 能 输 入 您 自 己 系 统 的 UR L 。 lynx 将 显 示 您 的 Web 站 点 的 主 页 。 不 过 首 先 要 确 认 把 文 件 index.html 放 在 /home/httpd/html 目 录 中 。

您 也 能 用 telnet 来 检 查 您 的 W eb 服 务 器 的 操 作 。 用 telne t、 您 的 系 统 主 机名 和 您 的 Web 服 务 器 操 作 使 用 的 端 口

telnet turtle.trek.com 80

Gopher 服 务 器

Gopher 服 务 器 用 一 种 高 度 组 织 的 方 法 来 访 问 Internet 资 源 , 诸 如 数 据 文 件或 图 形 。 不 同 于 ftp , 用 Gopher 能 呈 现 给 用 户 一 个 菜 单 以 供 它 们 选 择 。 每 项 菜单 能 引 出 另 一 个 菜 单 或 另 一 个 Gopher 站 点 。 从 这 个 方 面 讲 , Gopher 象 W eb 那 样 , 允 许 您 从 一 个 站 点 移 到 另 一 个 站 点 以 查 找 资 源 , 但 是 它 又 象 ftp 那 样 只 列出 资 源 , 没 有 文 本 或 图 形 来 进 行 解 释 。

Gopher 用 一 个 TCP/IP 协 议 叫 做 Gopher 协 议 。 它 能 使 得 Gopher 菜 单 文件 进 行 高 速 地 传 输 。 Gopher 信 息 包 含 在 Gopher 文 件 中 , 这 些 文 件 包 含 一 列 项 , 这 些 项 在 某 些 站 点 上 是 可 访 问 的 。 每 一 项 被 组 织 成 五 个 区 域 来 指 定 区 域 中 的 信息 和 这 些 项 的 地 址 。 每 个 区 域 之 间 用 一 个 tab 分 开 : 类 型 、 显 示 名 字 、 选 择 器字 符 串 、 主 机 名 和 端 口 。

类 型 能 是 一 些 可 能 的 Gopher 代 码 中 的 一 个 , 正 如 表 12-9 中 所 列 出 的 。 显示 名 是 对 显 示 在 Gopher 菜 单 中 的 项 目 的 一 个 描 述 。 选 择 器 字 符 串 是 项 目 的 独特 的 标 识 符 。 主 机 名 是 项 目 所 处 的 系 统 的 主 机 名 , 端 口 是 访 问 此 主 机 系 统 时 所用 的 端 口 ( 通 常 是 70 ) 。

表 12-9Gophe r 文 件 类 型 文 件 类 型 描 述

  1. 文 本 文 件

  2. Gopher 目 录

  3. CSO 电 话 号 码 服 务 器

  4. 错 误

  5. B inHex Machintosh 文 件 , HQX

  6. 二 进 制 的 DOS 文 件

  7. Unix UUencoded 文 件

  8. 全 文 本 索 引 ( Gopher 菜 单 文 件 )

  9. Telnet 连 接 , 包 括 远 程 主 机 的 地 址

  10. 二 进 制 文 件

  1. GIF 图 象 文 件

  2. HTML 文 件

I Graphic 图 象 文 件 ( 不 是 GIF )

M M IM E 多 部 分 混 合 信 息

P Adobe PDF 文 件

  1. 声 音 文 件

  2. TN3270 telnet 连 接

Gopher 是 由 University of Minnesota 开 发 的 , 而 且 还 在 不 断 地 开 发 新 的 版本 。 您 能 从 University of Minnesota 的 Gopher ftp 站 点 boombox.micro.unm.edu 中 目 录 /pub/gopher/unix 下 取 得 一 个 Gophe r。 您 也 能 从 大 多 数 的 Linux ftp 站 点取 得 Gopher 服 务 器 软 件 。 例 如 , 在 站 点 sunsite.unc.edu 和 它 的 镜 像 站 点 的

/pub/Linux/systems/Network/info-systems/gopher 目 录 或 /pub/packages/info- systems/gopher/boombox-mirror/unix 目 录 中 能 取 得 此 软 件 。 还 有 一 个 GNU 免费 的 Gopher 服 务 器 软 件 , 叫 做 GN Gophe r。 它 就 是 您 的 Caldera CD-ROM 中的 名 为 gn-2.22-1.i386.rpm 的 软 件 包 。用 rpm 或 glint 安 装 和 配 置 您 的 GN Gopher

服 务 器 。 Un iversity of Minnesota 为 任 何 教 育 机 构 或 非 商 业 应 用 提 供 免 费 的Gopher 软 件 。 但 是 对 于 商 业 用 户 需 要 一 个 授 权 的 费 用 或 任 何 人 要 通 过 Gopher 服 务 器 访 问 信 息 需 要 付 费 。 GN Gopher 服 务 器 软 件 对 任 何 人 , 商 业 或 非 商 业 的均 免 费 。 University of Minnesota 也 有 一 个 更 高 的 版 本 叫 做 Gopher+ , 它 当 前是 一 个 商 业 产 品 。

安 装 GN 和 Un iversity of Minnesota 的 Gopher 服 务 器 有 所 不 同 。 本 章 中 的例 子 用 的 是 University of Minnesota 的 Gopher 的 2.3 版 和 2.20 版 的 GN Gophe r, 它 们 能 从 大 多 数 的 Linux ftp 站 点 上 取 得 。 您 还 可 能 得 到 更 新 的 版 本 。University of Minnesota 的 Gopher 软 件 包 中 包 括 Gopher 客 户 程 序 和 服 务 器 软件 。 GN Gopher 软 件 包 只 包 括 服 务 器 软 件 。

gopher 客 户 程 序 是 一 种 速 度 很 快 的 行 模 式 的 客 户 程 序 。 另 外 还 有 一 些 别 的客 户 程 序 可 以 使 用 , 象 xgopher , 它 在 您 的 Ca ldera CD-ROM 中 。

Gopher 的 用 户 帐 号 和 数 据 目 录

您 需 要 一 个 数 据 目 录 来 存 放 Gopher 数 据 文 件 , 还 要 有 能 进 行 Gopher 访 问的 用 户 帐 号 和 组 。 虽 然 Caldera Network Desktop 已 经 创 建 了 Gopher 用 户 , 但 它 没 有 创 建 数 据 目 录 。 如 果 您 使 用 另 外 的 版 本 , 需 要 自 己 创 建 Gopher 用 户 。

Gopher 的 用 户 帐 号

为 了 能 更 好 地 控 制 其 他 Gopher 用 户 访 问 您 的 系 统 , 您 应 该 有 一 个 名 为gopher 的 用 户 帐 号 。 您 的 Caldera Network Desktop 已 经 创 建 了 Gopher 用 户帐 号 并 对 它 进 行 了 配 置 。 在 您 的 Caldera Network Desktop 的 文 件 /etc/passwd

中 您 将 能 发 现 下 面 的 关 于 Gopher 的 项 。

gopher:*:13:30:gopher:/home/gopher

口 令 域 中 的 星 号 用 来 保 护 此 帐 号 , 以 防 止 其 他 的 用 户 通 过 此 帐 号 注 册 , 并因 此 控 制 它 的 文 件 或 访 问 您 的 系 统 的 其 他 部 分 。用 户 ID , 13 , 是 一 个 独 特 的 ID 。注 释 域 为 “ gophe r” 。 注 册 目 录 为 /home/gophe r。当 Gopher 用 户 注 册 到 您 的系 统 , 他 将 进 入 此 目 录 。

对 于 别 的 系 统 , 您 要 自 己 创 建 Gopher 帐 号 。 您 能 给 此 帐 号 加 上 一 些 限 制 以阻 止 远 程 的 Gopher 用 户 访 问 您 系 统 中 的 其 他 部 分 。 您 能 改 变 /etc/passwd 文 件中 关 于 此 帐 号 的 项 , 通 过 设 置 口 令 域 为 一 个 星 号 来 阻 止 其 他 一 般 的 用 户 访 问 它 。组 ID 是 指 gopher 组的 ID , 它 专 为 gopher 用 户 设 置 。 您 能 在 gopher 组 上 设 置一 些 限 制 用 来 限 制 所 有 的 Gopher 用 户 。 下 面 是 一 个 在 文 件 /etc/group 中 的 关 于gopher 组 的 项 。 对 于 其 他 的 Linux 系 统 中 如 果 没 有 此 项 , 可 以 加 上 它 。

gopher::30:

Gopher 数 据 目 录

Caldera Network Desktip 为 它 的 gn Gopher 服 务 器 指 定 /home/gopher 目录 作 为 Gopher 数 据 目 录 。 您 的 Gopher 文 件 的 数 据 目 录 应 该 和 Gopher 用 户 的主 目 录 相 同 。 如 果 您 想 使 用 不 同 的 目 录 , 您 要 用 命 令 chown 把 目 录 的 所 有 权 改为 Gopher 用 户 。 当 配 置 您 的 Gopher 服 务 器 软 件 时 , 确 信 指 定 的 目 录 是 您 的Gopher 数 据 目 录 。 否 则 , 服 务 器 将 找 不 到 您 的 Gopher 文 件 。

University of Minnesota Gopher

在 下 面 的 例 子 中 ,用 户 下 载 了 Linux 版 本 的 University of Minnesota Gopher 软 件 包 , 名 为 gopher2_3.tar.gz。 首 先 用 gunzip 解 压 此 软 件 包 , 然 后 用 tar 展开 文 件 和 目 录 。 将 产 生 一 个 名 为 gopher2_3 的 目 录 。 此 目 录 中 有 包 含 有 文 档 和应 用 的 不 同 的 子 目 录 。 gopherd 目 录 中 含 有 Gopher 服 务 器 的 源 代 码 , gopher 目 录 中 有 Gopher 客 户 程 序 的 源 代 码 。 doc 目 录 中 包 含 文 档 , 包 括 您 的 帮 助 文档 。

#gunzip gopher2_3.tar.gz #ls

gopher2_3.tar

#tar xvf gopher2_3.tar #ls

gopher2_3 gopher2_3.tar

#cd gopher2_3 #ls -F

Copyright MANIFEST Makefile.config.in Makefile.in README conf.h

config.guess config.h.in config.sub configure configure.in copyright doc/ gopher/ gophfilt/ install-sh make.com object/ patchlevel.h

为 了 安 装 Gopher 服 务 器 , 首 先 要 在 gopherd 目 录 中 的 一 个 配 置 文 件 中 指定 选 项 。 您 要 提 供 一 些 信 息 , 象 在 什 么 目 录 中 放 置 您 的 Gopher 菜 单 文 件 。 接着 编 译 Gopher 软 件 。 编 译 软 件 只 不 过 是 Gopher 在 源 代 码 目 录 下 输 入 命 令

make 。 make 将 使 用 Makefile 文 件 正 确 地 为 您 编 译 Gopher 程 序 。 University of M innesota 的 Gopher 2.3 有 配 置 功 能 , 它 能 自 动 决 定 如 何 配 置 您 的 系 统 并 为 系统 创 建 合 适 的 Makefile 文 件 。 任 何 系 统 的 特 定 的 信 息 都 被 精 确 地 设 定 在 配 置 文件 中 。

配 置 Un iversity of Minnesota 的 Gopher 服 务 器

在 创 建 Gopher 服 务 器 之 前 ,您 要 用 文 件 gopherd.conf 和 gopherdlocal.conf 中 的 项 来 配 置 它 。 在 University of Minnesota 的 Gopher 服 务 器 中 , 这 些 配 置文 件 在 子 目 录 gopherd 中。 gopherd.conf 是 用 来 配 置 系 统 的 一 些 特 定 特 征 , 象限 制 的 连 接 数 。 gopherdlocal.conf 为 您 的 Gopher 服 务 器 提 供 信 息 , 象 管 理 员的 名 字 和 控 制 指 定 的 远 程 系 统 的 访 问 。

gopherd.conf gopherd.conf 和 gopherdlocal.conf 文 件 中 包 含 Gopher 服务 器 的 配 置 说 明 。文 件 中 已 列 出 一 组 命 令 的 缺 省 规 范 。您 只 须 删 除 每 行 开 始 的 # , 以 除 去 它 的 注 释 功 能 , 并 按 您 的 需 要 改 动 任 何 值 。

您 能 设 置 选 项 象 允 许 的 最 大 用 户 数 或 传 输 文 件 的 压 缩 方 法 。 输 入 选 项 时 , 首 先 输 入 选 项 的 说 明 符 和 一 个 冒 号 , 加 上 一 个 空 格 和 选 项 的 值 。 下 面 的 例 子 是设 定 最 大 的 用 户 数 :

MaxConnections: 15

您 必 须 为 系 统 中 的 Gopher 服 务 指 定 一 个 别 名 。 用 hostalias: 项 来 指 定 。通 常 此 项 指 的 是 您 的 系 统 的 主 机 名 的 全 称 , 有 的 系 统 可 以 是 主 机 名 的 一 部 分 , 比 如 是 gopher 。 下 面 的 例 子 中 hostalias 表 示 主 机 名 的 全 称 的 别 名 , garnet.train.com

hostalias: garnet.train.com

您 还 需 要 为 文 件 gopherdlocal.conf 指 定 全 路 径 名 。 用 命 令 include 加 上 文件 gopherdlocal.conf 的 路 径 名 即 可 。 在 您 的 Caldera Network Desktop 中 , gopherd 服 务 器 和 文 件 gopherd.conf 、 gopherdlocal.conf 应 该 安 装 在 目 录

/usr/sbin 中 。 当 gopherd 服 务 器 运 行 时 , 它 首 先 读 取 文 件 gopherd.conf 的 配 置信 息 ,接 着 读 取 文 件 gopherdlocal.conf 的 特 定 的 配 置 信 息 。在 文 件 gopherd.conf 中 的 include 操 作 需 要 gopherdlocal.conf 的 全 路 径 名 , 在 此 为

/usr/sbin/gopherdlocal.con f。

include: /usr/sbin/gopherdlocal.conf

用 ignore 和 ignore_patt 选 项 ,您 能 限 制 Gopher 用 户 可 访 问 的 文 件 。ignore 将 拒 绝 访 问 带 某 一 扩 展 名 的 文 件 ,例 如 ,ifnore: conf 将 拒 绝 任 何 对 扩 展 名 为 .conf 文 件 的 访 问 。 ignore_patt 限 制 有 特 定 模 式 的 文 件 , 例 如 , ignore_patt bin 将 限制 任 何 对 名 字 中 包 含 模 式 “ bin ” 文 件 的 访 问 。

gopherdlocal.conf gopherdlocal.conf 文 件 中 拥 有 本 地 的 用 户 定 制 。 此 文件 中 的 项 将 覆 盖 文 件 gopherd.conf 中 可 与 之 相 比 较 的 项 。 在 文 件gopherdlocal.conf 中 您 指 定 一 些 管 理 信 息 象 系 统 管 理 员 的 名 字 和 您 的 Gopher 服 务 的 描 述 。 在 此 文 件 中 有 两 项 是 关 于 系 统 管 理 员 的 : Admin :和 AdminEmail: 。用 Admin: 项 来 加 一 个 系 统 管 理 员 的 名 字 。 您 还 可 以 加 一 些 其 他 的 信 息 , 象 一 个电 话 号 码 。 用 Adm inEmail: 项 来 指 定 系 统 管 理 员 的 email 地 址 。

Admin: Richard Petersen AdminEmail: rp@richlp.com

一 系 列 的 项 提 供 关 于 您 的 Gopher 服 务 器 的 信 息 。 项 Abstract: 将 显 示 给 系

统 中 的 用 户 一 个 布 告 。 它 简 明 的 描 述 您 的 Gopher 服 务 器 提 供 的 服 务 。 项

Language 将 告 诉 用 户 它 的 大 多 数 的 文 件 使 用 什 么 语 言 。 您 应 该 设 定 这 两 项 。

别 的 信 息 项 都 是 可 选 的 。 在 项 Org :中 您 可 以 输 入 您 的 组 织 名 , 对 于 Loc :项 您 能输 入 您 的 地 址 。 项 BummerMsg :指 定 一 个 信 息 , 当 您 的 站 点 中 有 太 多 的 用 户 使用 而 不 能 再 被 用 户 访 问 时 , 产 生 错 误 并 显 示 此 信 息 。

用 access :项 您 能 限 制 其 他 用 户 访 问 。 一 个 access :项 下 面 的 格 式 :

access: hostname permission-list num

hostname 是 主 机 名 或 是 网 络 或 远 程 系 统 的 IP 地 址 。 num 指 定 从 远 程 网 络或 系 统 中 同 时 允 许 多 少 用 户 访 问 。 permission-list 设 定 远 程 网 络 或 系 统 中 的 用户 的 访 问 权 限 。 有 四 种 可 能 的 权 限 : 浏 览 , ftp , 读 和 查 找 。 为 了 禁 止 某 权 限 , 您 可 以 在 它 前 面 加 上 一 个 感 叹 号 ( ! ) 。 浏 览 权 限 允 许 用 户 列 出 目 录 中 的 文 件 , ftp 允 许 您 的 系 统 作 为 一 个 ftp 网 关 , 读 权 限 允 许 访 问 文 件 , 查 找 权 限 允 许 访 问索 引 。

对 于 hostnam e, 您 能 指 定 一 个 网 络 地 址 , 一 个 特 定 系 统 的 地 址 或 用 缺 省 项以 使 得 任 何 用 户 都 可 以 访 问 。 缺 省 项 是 指 用 关 键 字 “ default ” 。 下 面 的 例 子 中 , Gopher 服 务 器 对 任 何 用 户 开 放 读 和 查 找 权 限 , 当 时 关 闭 浏 览 和 ftp 权 限 。 没 有网 络 或 系 统 能 同 时 有 15 个 以 上 的 用 户 访 问 您 的 Gopher 服 务 器 。

access: default !ftp read search !browse 15

您 能 用 access :项 加 上 网 络 的 域 名 来 控 制 一 个 网 络 的 访 问 。 下 面 的 例 子 中 , 网 络 train.com 中 最 多 能 有 5 用 户 访 问 您 的 Gopher 服 务 器 ,但 是 没 有 浏 览 功 能 。

access: train.com ftp read search !browse 5

您 能 用 网 络 或 系 统 的 IP 地 址 代 替 域 名 。 对 于 网 络 , 您 只 能 用 IP 地 址 中 的网 络 部 分 。不 要 忘 记 在 结 束 时 用 一 个 句 号 。在 下 面 的 例 子 中 ,网 络 地 址 为 199.189. 的 网 络 被 拒 绝 使 用 您 的 系 统 作 为 一 个 ftp 网 关 。 同 时 只 能 有 7 个 用 户 访 问 。

access: 199.189. !ftp read search browse 7

为 了 给 特 定 的 系 统 提 供 访 问 , 您 能 输 入 主 机 的 系 统 名 。 在 下 面 的 例 子 中 , IP 地 址 为 204.166.189.21 的 系 统 能 完 全 访 问 您 的 Gopher 系 统 。 如 果 您 的 系 统 是单 人 使 用 的 单 机 , 可 以 指 定 此 系 统 只 能 有 一 个 用 户 访 问 。

access:204.166.189.21 ftp read search browse 1

Makefile.config 和 conf.h 在 编 译 Gopher 服 务 器 之 前 , 应 该 检 查 您 的

Makefile.config 和 conf.h 文 件 中 的 某 些 配 置 。 在 文 件 Makefile.config 文 件中 首 先 检 查 要 操 作 的 Gopher 程 序 的 路 径 名 。 它 被 指 定 给 变 量 PREFIX 。 如 果您 想 在 不 同 的 目 录 中 操 作 Gopher , 改 变 赋 给 变 量 PREFIX 的 缺 省 路 径 名 。Ga ldera Network Desktop 将 从 目 录 /usr/sbin 中 查 找 服 务 器 程 序 。 您 应 给 变 量PREFIX 赋 值 为 目 录 /usr/sbin 。 还 能 改 变 其 他 的 目 录 变 量 。

PREFIX=/usr/sbin

您 还 应 该 检 查 DOMAIN , SERVERPORT , SERVERDATA 和

SERVEROPTS 变 量 的 项 。 DOMAIN 变 量 指 定 您 的 域 名 的 网 络 部 分 。 例 如richlp.ix.com 的 网 络 部 分 应 是 .ix.com 。 一 定 要 带 有 前 一 个 圆 点 。 如 果 您 的 域 名命 令 能 显 示 您 的 全 域 名 , 您 可 以 让 此 项 为 空 。

DOMAIN=.ix.com

SERVERPORT 变 量 被 设 置 为 70 , 为 通 常 的 访 问 您 应 该 保 留 此 值 。 变 量SERVERDATA 有 Gopher 数 据 文 件 所 在 的 目 录 , 缺 省 值 为 /gopher-data 。 如 果您 想 用 另 一 个 目 录 , 能 把 此 目 录 赋 给 SERVERDATA 。 在 Ca ldera Network Desktop 中 您 应 该 设 置 为 /home/gopher 。 变 量 SERVEROPTS

被 赋 以 一 列 选 项 以 控 制 您 的 Gopher 服 务 。 您 能 在 标 题 中 加 入 日 期 和 时 间 或设 置 的 最 大 用 户 数 。 这 些 选 项 列 在 表 12-10 中 。

SERVERDATA=/home/gopher

在 文 件 conf.h 中 , 您 能 设 置 一 些 特 征 的 值 , 象 超 时 的 时 间 , 和 某 一 特 定 操作 , 象 看 一 个 图 形 文 件 时 使 用 的 程 序 。 在 文 件 conf.h 中 含 有 一 列 定 义 项 , 它 们和 C 编 程 中 的 定 义 项 很 相 似 。 每 项 以 #define 开 头 , 加 上 一 个 大 写 的 项 目 和 一个 值 。 为 了 改 变 一 个 特 定 项 目 的 值 , 用 文 本 编 辑 器 编 辑 此 文 件 , 删 除 此 值 并 输入 一 个 新 值 。 缺 省 的 值 已 经 输 入 。 下 面 的 例 子 设 定 打 印 选 项 为 值 : lpr 命 令 。

#define PRINTER_COMMAND "lpr"

对 于 Gopher 客 户 程 序 您 能 用 CLIENT1_HOST 项 来 指 定 它 将 连 接 的 缺 省 的Gopher 服 务 器 。 下 面 的 例 子 连 接 到 一 个 Gopher Internet 站 点 : gopher.tc.umn.ecu ,

#define CLIENT1_HOST "gopher.tc.umn.edu"

文 件 conf.h 容 易 被 混 淆 。 它 是 一 个 C 程 序 , 不 是 一 个 shell 脚 本 文 件 。 它和 别 的 配 置 文 件 不 同 。 在 大 多 数 的 配 置 文 件 中 , 一 个 # 是 一 个 注 释 。 而 在 文 件conf.h 中 , 它 是 一 个 定 义 指 令 的 开 始 。 在 conf.h 中 , 一 个 注 释 是 用 /* 开 头 并 以 */ 结 尾 的 。 加 注 释 的 项 便 失 去 作 用 , 要 使 它 起 作 用 只 须 删 除 /* 和 * /符 号 。

虽 然 文 件 conf.h 的 缺 省 的 项 工 作 的 很 好 , 您 能 按 需 要 对 它 们 做 改 变 。 然 而 , 改 变 用 于 Linux 系 统 的 项 时 要 小 心 。 Linux 将 使 用 那 些 不 是 专 为 其 他 系 统 设 计 的项 。 如 果 您 看 到 一 个 项 前 有 一 个 #if defined(system ), system 是 一 个 操 作 系 统的 名 字 ,然 后 下 面 的 项 将 用 于 此 系 统 ,直 到 下 一 个 #endif 。因 此 #if define d( sun ) 将 只 用 于 Sun 系 统 。 conf.h 文 件 中 有 一 大 部 分 是 为 VMS 操 作 系 统 定 义 的 , 在文 件 的 开 头 和 结 尾 有 些 项 是 用 于 Linux 的 。

您 现 在 可 以 开 始 编 译 您 的 Gopher 软 件 。 能 用 下 面 的 命 令 编 译 Gopher 客 户

程 序 和 Gopher 服 务 器 :

#make install

您 可 以 分 别 编 译 客 户 程 序 或 服 务 器 , 用 命 令 “ make ” 加 上 项 目 “ clien t” 或“ serve r” 。

#make client #make server

它 将 创 建 一 个 名 为 gopherd 的 服 务 器 程 序 。您 能 从 inetd 直 接 调 用 gopherd 。

表 12-10University of Minnesota Gopher 的 Makefile.config 和 conf.h Makefile.config 描 述

PREFIX 安 装 软 件 的 基 本 的 路 径 名 ( 缺 省 的 是 /usr/loca l)

CLIENTDIRGopher 客 户 程 序 被 安 装 的 目 录 ( 缺 省 的 是

/usr/local/bin ) CLIENTLIBGopher 客 户 程 序 的 帮 助 文 件MAN1DIRGopher 客 户 程 序 的 帮 助 文 件 被 安 装 的 目 录MAN8DIRgopher 服 务 器 的 帮 助 文 件 被 安 装 的 目 录

SERVERDIR Gopher 服 务 器 和 配 置 文 件 被 安 装 的 目 录

( gopherd 和 gopherd.conf- 缺 省 的 是

/usr/local/etc )

CLIENTOPTS Gopher 客 户 程 序 的 选 项

-DONOMAIL 远 程 用 户 不 能 邮 寄 文 件

-DAUTOEXITONU 同 时 处 理 q 和 u , 并 自动 地 从 主 菜 单 中 退 出 ( 如 果 Gopher 被 其 他 应 用程 序 调 用 时 , 此 选 项 很 有 用 )

DOMAIN 如 果 您 的 系 统 不 能 返 回 有 效 的 全 域 名 , 您 要 指 定系 统 的 网 络 地 址 ; 否 则 , 保 持 为 null

SERVERPORT= num 设 置 Gopher 服 务 器 用 来 等 待 请 求 的 端 口 , 通 常

为 70

SERVERDATA=

pathname

SERVEROPTS= options- list

Gopher 服 务 器 的 选 项

对 于 Gopher 服 务 器 可 用 的 Gopher 数 据 文 件 的所 在 目 录 ; 对 于 Caldera Network Desktop 此目 录 为 /usr/lib/gopher-data

-ADD_DATE_AND_TIME 往 Gopher 标 题 中 增加 日 期 和 时 间

-DDL 设 置 支 持 dl 数 据 库 功 能

-DCAPFILES 提 供 和 .cap 目 录 兼 容

-DLOADRESTRICT 限 制 用 户 访 问

-DSETPROCTITLE 设置 ps 显 示 的 进 程 标 题

DLPATH 到 dl 数 据 库 的 路 径

conf.h

CLIENT1_HOST 首 先 连 接 的 主 机 ( 列 在 这 的 是 缺 省 的 主 机 )

#define CLIENT1_HOST "gopher.tc.umn.edu"

CLIENT2_HOST 连 接 的 主 机 #define CLIENT2_HOST

"gopher2.tc.umn.edu"

CLIENT1_PORT 首 先 连 接 的 端 口 ( 缺 省 的 是 70 )

#define CLIENT1_PORT 70

CLIENT2_PORT 连 接 的 端 口 ( 缺 省 的 是 70 )

PAGER_COMMAND 文 本 的 分 页 命 令

MAIL_COMMAND Gopher 用 户 发 送 邮 件 的 命 令 ( 缺 省 的 是

/bin/mail )

TELNET_COMMAND telnet 通 话 使 用 的 命 令 ( 缺 省 的 是 telne t) PAINTER_COMMAND 打 印 的 命 令 ( 缺 省 的 是 lpr) PLAY_COMMAND 播 放 声 音 的 命 令 ( 缺 省 的 是 /bin/false ) IMAGE_COMMAND 显 示 图 象 的 命 令 ( 缺 省 的 是 xloadimage )

HTML_COMMAND 显 示 Web 页 的 命 令 ( 没 有 缺 省 值 , 一 般 用 lynx) MAXLOAD 限 制 连 接 平 均 负 载 ( 缺 省 是 10.0 ) READTIMEOUT 从 网 络 中 读 取 数 据 的 超 时 时 间 ( 缺 省 的 是 1*60 ) W A ISMAXHITS 从 一 个 WA IS 查 询 中 返 回 的 最 大 的 查 找 数 目 ( 缺

省 为 40 )

NOMAIL 如 果 定 义 此 项 , 则 限 制 用 户 邮 寄 和 下 载 文 件 ( 当前 用 /* * /注 释 掉 , 除 去 注 释 便 使 此 项 可 用 )

GOPHERHELP 在 线 的 Gopher 帮 助 文 件

TN3270_COMMNAD TN3270 通 话 的 命 令

conf.h

M IME_COMMAND M IM I 操 作 的 命 令

AFTP_HOST 设 置 ftp 网 关 ( 当 前 被 设 置 为 gopher- gw.micro.umn.edu )

CONF_FILE 设 置 gopherd.conf 文 件 所 在 的 位 置 ; 缺 省 的 是

/usr/local/etc/gopherd.conf ; 对 于 Caldera

DELETE_BOOKMARKS_ ONLY

Network Desktop 您 要 把 它 改 成 /usr/sbin #define CONF_FILE /usr/sbin

限 制 用 delete 命 令 删 除 书 签 ( 当 前 被 注 释 掉 )

启 动 Un iversity of Minnesota 的 Gopher

在 启 动 您 的 Gopher 服 务 器 之 前 , 首 先 应 该 创 建 一 些 Gopher 菜 单 文 件 , 在下 一 部 分 中 将 对 此 进 行 描 述 。 正 如 前 一 部 分 “ 启 动 服 务 器 ” 中 描 述 的 那 样 , 您能 从 命 令 行 中 直 接 启 动 Gopher 服 务 器 , 或 在 使 用 init 脚 本 引 导 系 统 时 启 动 , 或是 当 收 到 一 个 Gopher 服 务 请 求 时 通 过 inetd 来 启 动 。 University of Minnesota Gopher 服 务 器 选 项 将 列 在 表 12-11 中 。

12-11 University of Minnesota Gopher 服 务 器 选 项

选 项

描 述

-C

取 消 目 录 请 求 的 高 速 缓 存

-c

不 受 chroot 的 限 制 运 行 ;允 许 通 过 符 号 连 接 访 问 Gopher
数 据 主 目 录 外 的 文 件 , 象 系 统 的 帮 助 文 件 ; 有 潜 在 的 安

-D

全 问 题 , 应 该 和 -u username 选 项 一 起 使 用

启 动 调 试 功 能

-I

用 inetd 调 用 Gopher

-L num

指 定 最 大 的 平 均 负 载

-l logfile

记 录 到 日 志 文 件 的 连 接

-o conf-file 指 定 备 用 gopherd.conf 配 置 文 件

-u username 在 指 定 的 用 户 名 下 运 行 gopherd ; 为 安 全 目 的 提 供 附 加的 限 制

-U userid 在 userid 下 运 行 gopherd ; 为 安 全 目 的 提 供 附 加 的 限制 ( 同 -u )

Caldera Network Desktop 已 经 配 置 您 的 系 统 , 使 之 通 过 inetd 来 运 行

Gophe r。 此 配 置 将 把 Gopher 数 据 目 录 定 为 /home/gophe r。在 /etc/services 文件 中 您 将 找 到 一 个 关 于 Gopher 的 项 。 它 通 过 端 口 号 和 协 议 指 定 服 务 名 。 在 别的 系 统 中 , 您 要 自 己 输 入 它 。

gopher70/tcp

在 文 件 /etc/inetd.conf 中 也 有 一 个 关 于 Gopher 的 项 。 当 前 此 项 引 用 GN Gopher 服 务 器 , gn 。 您 能 把 它 改 为 引 用 gopherd 服 务 器 。 在 项 中 gn 的 地 方 替换 为 gopherd , 并 加 一 个 -I 选 项 和 Gopher 数 据 目 录 的 路 径 名 。 选 项 -I 指 定gopherd 被 inetd 调 用 。 您 能 加 一 个 端 口 号 , 在 此 为 70 。 此 项 还 被 设 置 用 tcpd 来 监 视 和 控 制 远 程 用 户 的 访 问 。 下 面 的 例 子 列 出 此 项 。

Gopher 数 据 文 件 在 目 录 /home/gopher 中 , 端 口 号 为 70 。 gopherd 程 序 和参 数 为 gopherd -I

/home/gopher 70 。

gopher stream tcp nowait root/usr/sbin/tcpd gopherd -I

/home/gopher 70

如 果 您 不 想 使 用 tcpd, 能 用 gopherd 服 务 器 程 序 的 路 径 名 取 代 它 。

gopher stream tcp nowait root/usr/sbin/gopherd gopherd -I

/home/gopherd 70

如 果 您 想 在 命 令 行 启 动 gopherd 服 务 器 , 可 输 入 gopherd 和 它 的 参 数 , Gopher 数 据 文 件 目 录 的 路 径 名 和 端 口 号 。 gopherd 有 一 些 可 能 的 选 项 , 列 在 表12-12 中 。 作 为 防 范 措 施 , 您 能 用 -u 选 项 指 定 一 个 非 root 的 所 有 者 来 运 行gopherd 。 您 需 要 首 先 创 建 一 个 用 户 , 并 在 它 的 passwd 项 中 输 入 一 个 * 。 用 户的 主 目 录 将 是 gopher 数 据 目 录 。 Caldera Network Desktop 已 经 创 建 一 个 名 为gopher 的 用 户 。 下 面 的 例 子 中 , gopherd 服 务 器 程 序 的 全 路 径 名 为

/usr/sbin/gopherd , Gopher 数 据 文 件 在 /home/gopher 中 , 端 口 号 为 70 。

/usr/sbin/gopherd -u gopher/home/gopher 70

为 使 Gopher 服 务 器 在 启 动 系 统 时 自 动 启 动 , 您 需 要 在 目 录 /etc/rc.d/init.d 中 创 建 一 个 init 脚 本 。 本 章 的 开 始 部 分 对 init 脚 本 和 如 何 创 建 gopherd 服 务 器的 init 脚 本 有 一 个 详 细 的 描 述 。

表 12-12gopherd.conf 和 gopherdlocal.conf 项

gopherd.conf 描 述

hostalias: DNS-alias-name 用 此 主 机 名 来 代 替 系 统 的 主 机 名 , 必 须 有

一 个 DNS , 用 来 引 用 一 个 系 统 , 比 如gopher.ix.com 上 Gopher 服 务 器 hostalias: gopher.turnip.com

cachetime: seconds 一 个 缓 冲 文 件 中 保 存 的 Gopher 目 录 的 时

viewext: extension Gophertype Prefix Gopher+type

变 换 文 件 名 的 扩 展 名 成 为 一 个 特 定 的

[ Language ] Gopher 类 型 ; 大 多 数 的 名 字 已 经 在 文 件gopherd.conf 中 设 置 了 。 第 一 个 参 数 是 一个 扩 展 名 , 象 .gif ; 第 二 个 参 数 是 单 个 字 符的 Gopher 类 型 ( 1 , 0 , I 等 ) ; 第 三 个 参数 是 要 加 到 一 般 文 件 名 路 径 前 的 前 缀 ; 第四 个 参 数 是 Gopher+ 视 图 特 征 或 Internet Media 类 型 ( 正 规 叫 做 M IM E 内 容 类 型 ) , 象 image/gif ; 可 选 的 第 五 个 参 数 是 指 定 文件 使 用 的 语 言 以 替 换 缺 省 的 语 言viewext; .jpg I 9

image/JPEGviewext: .html h 0 text/html

ignore: extension 忽 略 带 有 指 定 扩 展 名 的 文 件 ; 这 些 文 件 不提 示 给 Gopher 的 用 户 ignore:bin

ignore_patt: regular-expression 忽 略 匹 配 regular expression 的 文 件 ; 这

些 文 件 不 提 示 给 Gopher 的 用 户

blockext: extension 映 射 带 有 指 定 扩 展 名 的 文 件 到 属 性 块 中

decoder: extension program 当 检 索 到 文 件 时 , 用 指 定 的 程 序 对 带 有 指

定 扩 展 名 的 文 件 进 行 操 作 ; 和 压 缩 文 件 一起 使 用 decoder: .gz

/usr/gnu/bin/zcatpids_directory: path- name 一 个 存 放 pid 文 件 的 临 时 目 录

maxconnections: num Gopher 服 务 器 能 同 时 处 理 的 并 发 连 接 的 数

gopherdlocal.conf admin:administrator-name-and- info

管 理 员 的 名 字 和 附 加 信 息 , 象 电 话 号 码

adminemail:email-address Gopher 服 务 器 的 管 理 员 的 Email 地 址

site:site-description 站 点 的 描 述 名

loc:address 站 点 的 地 址 : 街 道 , 城 市 等

geog: 站 点 的 经 度 和 纬 度

language:default-language 站 点 使 用 的 缺 省 语 言secureusers:filename 列 出 经 过 认 证 的 主 机 和 网 络 的 文 件bummermsg: 当 拒 绝 一 个 客 户 访 问 时 显 示 的 信 息

access:domain name access- list

允 许 您 决 定 谁 能 浏 览 目 录 、 阅 读 文 件 和 在搜 索 您 的 系 统 , 第 一 个 参 数 时 域 名 、 IP 地址 或 缺 省 ; 第 二 个 参 数 是 一 列 逗 号 分 隔 的单 词 用 来 控 制 访 问 , 这 些 单 词 是 : browse , read , search 和 ftp 。 每 个 单 词 前 加 一 个 ! 就 可 拒 绝 此 种 访 问 ; 象default !browse,read,search,!ftp 设 置 缺 省为 拒 绝 浏 览 和 ftp , 但 允 许 读 和 查 找 。 如 果您 首 先 设 定 缺 省 值 , 以 后 的 项 中 将 继 承 这些 属 性 , 您 只 需 要 指 定 不 同 的 项 。 另 外 ,

您 还 可 以 通 过 增 加 一 个 可 选 的 参 数 来 指 定

并 发 事 务 的 访 问 数 access: default

browse,read,search,ft p 5

GN Gopher 服 务 器

您 的 Caldera Linux 系 统 已 经 配 置 了 GN Gopher 服 务 器 。 如 果 您 选 择 完 全安 装 的 选 项 , GN Gopher 将 自 动 安 装 , 如 果 选 用 推 荐 的 安 装 选 项 , 您 要 用 rpm 或 glint 来 安 装 gn-2.22-l.i386.rpm 。 无 论 选 择 哪 种 安 装 方 式 , 现 在 都 可 以 使 用您 的 Gopher 服 务 器 了 。 您 可 以 开 始 把 Gopher 文 件 和 菜 单 加 到 /home/gopher 目 录 中 。 要 运 行 mkcache 来 使 得 gopher 客 户 程 序 能 访 问 您 的 gopher 文 件 。然 而 , 如 果 用 的 是 Linux 的 另 外 版 本 。 您 要 能 从 一 个 Linux ftp 站 点 中 下 载 标 准的 GN Gopher 服 务 器 软 件 包 , gn-2.20.tar.gz。 然 后 配 置 并 安 装 它 。 解 压 和 展开 此 文 件 将 创 建 一 个 名 为 gn-2.20 的 目 录 , 其 中 放 有 GN Gopher 服 务 器 的 源 程序 和 文 档 。

GN Gopher 软 件 包 中 包 含 一 些 在 编 译 之 前 需 要 为 Linux 配 置 的 源 代 码 。 还

有 一 个 配 置 文 件 , config.h 和 一 个 Makefile 文 件 中 包 含 编 译 指 令 。 在 doc 子 目录 中 的 文 件 INSTALL 有 关 于 如 何 创 建 您 的 GN 服 务 器 和 设 置 Linux 站 点 的 详 细说 明 。 在 目 录 /doc/examples 中 有 GN Gopher 菜 单 的 大 量 的 例 子 。

配 置 GN Gopher 服 务 器

为 了 配 置 GN Gopher 服 务 器 , 您 要 改 变 文 件 config.h 和 Makefile 中 的 项 。有 些 项 是 必 须 配 置 的 ,您 需 要 指 定 它 们 。在 文 件 的 开 头 的 标 题“ Compulsory items tofill in ” 中 指 定 了 这 些 项 。 必 须 输 入 您 的 主 机 名 和 Gopher 数 据 目 录 的 路 径 名 ,

以 及 指 定 您 使 用 的 Linux 系 统 。 还 可 以 按 照 需 要 进 行 其 他 的 定 制 。 在 文 件 conf.h 中 每 项 的 格 式 为 : 一 个 #define 加 上 一 个 项 目 和 它 的 值 。 您 能 改 变 此 值 。 下 面 列出 的 项 对 Caldera Network Desktip 版 本 的 Linux 是 有 效 的 。 实 际 应 用 中 , 应 该用 您 的 系 统 主 机 名 取 代 gannet.train.com 。

#define GN_HOSTNAME "garnet.train.com" #define ROOT_DIR "/home/gopher" #define LINUX

#define MAINTAINER "mailto: justin@garnet.train.com" #define ROOT_MENU_NAME "GN -- A Gopher/HTTP Server" #define GN_LOGFILE "/var/log/gn.log" /* "/path/to/gn.log" */ #define MIME_TYPE_FILE "/usr/local/gn_mime.types"

#define WAISGN "/usr/sbin/waisgn"

在 必 须 配 置 的 项 后 有 一 些 其 他 的 项 , 它 们 在 缺 省 状 态 下 能 很 好 地 工 作 , 但您 也 可 以 按 需 要 对 它 进 行 改 变 。 比 如 您 能 通 过 指 定 DEFAULTPORT 项 为 另 一个 端 口 号 , 从 而 使 用 此 端 口 。 您 能 设 置 TIMEOUT 项 为 超 时 的 时 间 , 设 置MAXDEPTH 项 为 菜 单 查 找 的 最 大 深 度 。 在 Makefile 中 , 可 以 指 定 您 使 用 的 C 编 译 器 的 类 型 和 您 的 服 务 器 程 序 放 置 的 目 录 。 您 将 能 找 到 两 个 关 于 C 编 译 程 序CC 的 类 型 的 项 。 一 个 指 定 为 gcc , 前 面 加 有 一 个 # 把 它 注 释 掉 , 而 另 一 项 指 定为 cc , 前 面 没 有 # 号 。 您 可 以 在 cc 前 加 一 个 # , 而 去 掉 gcc 前 的 # 。 这 样 将 设 置CC 项 为 gcc 编 译 器 。 另 外 在 Makefile 中 您 能 设 置 SERVERBINDIR , 它 是 您放 置 的 服 务 器 程 序 的 目 录 路 径 。 BINDER 是 mkcache 和 uncache 程 序 的 目 录 。将 一 些 目 录 设 置 成 放 置 程 序 的 目 录 , 象 /usr/sbin 。 在 您 的 Caldera Network Desktip 中 用 Redhat 版 本 , 目 录 SERVERFINDER 应 被 设 置 为 /usr/sbin , 此 目

录 中 有 守 护 进 程 。 虽 然 mkcache 和 uncache 程 序 可 以 放 在 任 何 目 录 中 , 最 好还 是 把 它 们 和 GN 服 务 器 放 在 一 起 , 只 须 把 BINDER 也 设 定 为 /usr/sbin 即 可 以做 到 这 点 。

在 这 些 变 量 的 下 面 , 将 是 关 于 include 目 录 的 项 。如 下 所 示 , 除 去 关 于 Linux

的 项 前 面 的 # , 以 使 它 们 能 起 作 用 。

# INCLUDES= -I.. -I../gn

# For Linux use

INCLUDES= -I .. -I../gn -I/usr/include/bsd

在 文 件 Makefile 中 , 再 往 下 便 是 一 个 关 于 库 函 数 的 空 项 , 如 下 所 示 。

#Libraries to be included. LIBS=

下 面 的 项 是 为 不 同 的 系 统 指 定 不 同 的 库 函 数 , 这 些 项 被 注 释 掉 。 关 于 Linux

的 项 如 下 所 示 : #For Linux use #LIBS = -lbsd

您 可 以 除 去 LIBS 项 前 的 # 号 , 或 是 在 上 面 的 空 LIBS 后 加 上 -lbsd 的 值 。

LIBS= -lbsd

一 旦 配 置 完 成 后 , 您 能 输 入 make 来 创 建 一 个 服 务 器 。 它 将 产 生 两 个 可 执行 的 服 务 器 程 序 叫 做 sgn 和 gn 。 gn 是 为 inetd 使 用 的 , 而 sgn 是 能 直 接 使 用 的一 个 独 立 的 守 护 进 程 。 还 将 产 生 两 个 应 用 程 序 , mkcache 和 uncache 。 然 后 输入 make install 在 您 的 系 统 中 安 装 这 些 程 序 。

启 动 GN Gopher 服 务 器

现 在 可 以 启 动 服 务 器 了 。 在 启 动 Gopher 服 务 器 之 前 , 您 应 该 首 先 创 建 一 些如 下 一 部 分 所 描 述 的 Gopher 菜 单 文 件 。 您 可 以 启 动 服 务 器 做 为 一 个 独 立 的 守护 进 程 或 通 过 inetd 来 启 动 服 务 器 。 见 表 12-13 和 12-14

Caldera Network Desktop 已 经 把 您 的 系 统 配 置 为 通 过 inetd 运 行 GN Gopher 服 务 器 。创 建 和 安 装 GN Gopher 服 务 器 后 ,为 了 有 一 个 全 功 能 的 Gopher 服 务 器 , 必 须 创 建 您 的 Gopher 数 据 文 件 并 把 它 们 放 在 目 录 /home/gopher 中 。

为 了 使 用 inetd ,在 文 件 /etc/services 和 /etc/inetd.conf 中 必 须 有 关 于 Gopher 服 务 器 的 项 。Caldera Network Desktop 已 经 放 置 此 项 。您 能 在 文 件 /etc/services 中 找 到 下 面 的 项 :

gopher 70/tcp

在 文 件 /etc/inetd.conf 中 , 您 将 能 找 到 关 于 GN Gopher 服 务 器 的 项 。 注 意GN Gopher 服 务 器 是 被 gn 调 用 的 。 此 版 本 的 GN 服 务 器 是 通 过 inetd 工 作 。另 外 , tcpd 用 来 监 视 和 控 制 Gopher 访 问 。

gopher stream tcp nowait root /usr/sbin/tcpd gn

您 也 可 以 在 引 导 系 统 时 用 init 脚 本 或 直 接 从 命 令 行 启 动 GN Gophe r 。 在 这两 种 情 况 下 , 服 务 器 使 用 GN Gopher 的 sgn 版 本 来 启 动 , 并 以 一 个 独 立 的 守护 进 程 运 行 。 如 果 您 想 在 引 导 时 启 动 Gopher , 您 需 如 前 面 的 “ 启 动 服 务 器 ” 中 所 讲 述 的 创 建 一 个 目 录 /etc/rc.d/init.d 中 的 init 脚 本 。 输 入 sgn 和 参 数 , 用 来指 定 Gopher 数 据 文 件 的 目 录 的 路 径 名 和 端 口 号 ( 通 常 为 70 ) 。 端 口 号 用 -p 选项 来 指 定 。 作 为 一 种 预 防 措 施 , sgn 将 按 照 用 户 在 文 件 config.h 中 的 USERID 项 的 指 定 来 自 动 运 行 。

sgn -p 70 /home/gopher

表 12-13GN 服 务 器 配 置 文 件

GN_HOSTNAME 显 示 您 的 服 务 器 的 主 机 名 ; 在 此 是 您 的 系 统 的 主 机

ROOT_DIR 设 置 Gopher 数 据 目 录 ; 对 于 Caldera Network

Desktop 它 是 /home/gopher

LINUX 定 义 Linux 做 为 您 的 操 作 系 统 ; 缺 省 的 是

SUN_OS ; 您 要 用 LINUX 代 替 它

MAINTAINER 管 理 员 的 邮 件 地 址ROOT_MENU_NAME 您 想 显 示 的 做 为 Gopher 菜 单 标 题 的 名 字GN_LOGFILEGN 记 录 文 件 的 位 置

M IME_TYPE_FILE M IM E 配 置 文 件 的 位 置 ; 缺 省 的 是 /usr/local/gn-

m ime.types ; 您 能 把 文 件 放 在 任 何 地 方 , 但 是 确认 设 置 正 确 的 目 录

W A ISGN 控 制 WA IS 索引 /usr/sibn/waisgn 的 waisgn 程 序 的路 径 名

DEFAULTPORT 设 置 Gopher 访 问 的 缺 省 端 口 , 当 前 是 70 TIMEOUT 设 置 等 待 请 求 的 超 时 时 间

MAXDEPTH 设 置 查 询 菜 单 的 最 大 长 度

USERID 为 了 安 全 , 运 行 GN 服 务 器 所 使 用 的 用 户 ID

GROUPID 为 了 安 全 , 运 行 GN 服 务 器 所 使 用 的 组 ID

DECOMPRESS 解 压 文 件 所 用 的 程 序 ; 缺 省 的 时 /usr/local/bin/zcat MENUFNAME 设 置 菜 单 文 件 所 使 用 的 名 字 ; 缺 省 的 是 menu TEMPDIR 设 置 临 时 目 录 ; 缺 省 的 是 /tm p

表 12-14GN 服 务 器 的 Makefile 文件

CC 设 置 C 编 译 器 ; 缺 省 的 设 置 是 cc ; 您 能 把 它 改 成

gcc ; CC=gcc

INCLUDE 设 置 Include 目 录 ;应 该 被 设 置 使 用 /usr/include/bsd SERVBINDIR 您 的 GN 和 SGN 服 务 器 的 程 序 ; 缺 省 的 是 ../bin ;

应 该 设 置 为 /usr/sbin

BINDIR 缓 冲 支 持 程 序 的 目 录 ; 缺 省 的 是 ../b ; 应 该 设 置 为

/usr/bin

LIBS= 设 置 使 用 的 库 ; 除 去 关 于 Linux 的 那 一 项 前 的 # 号; 应 该 设 置 为 -lbsd

测 试 Gopher 服 务 器

当 您 的 Gopher 服 务 器 运 行 时 ,您 能 用 telnet 或 Gopher 客 户 程 序 来 测 试 它 。用 telnet 时 , 首 先 telnet 到 您 自 己 的 系 统 中 并 指 定 Gopher 使 用 的 端 口 。 下 面的 命 令 将 测 试 在 系 统 garnet.train.com 中 的 一 个 Gopher 服 务 器 。 将 显 示 启 动 信息 。

telnet garnet.train.com 70

如 果 按 ENTER , 将 显 示 您 的 服 务 器 上 的 Gopher 主 目 录 中 的 菜 单 项 , 并 以

下 面 的 格 式 输 出 :

type display-name selector hostname port 下 面 是 一 个 测 试 Gopher 服 务 器 的 例 子 : #telnet garnet.train.com 70

Trying 127.0.0.1 ...

Connected to garnet.train.com Escape character is '^ ] '.

0About My Weather Site 0/intro garnet.train.com 70 +

1California Weather Information 1/calif garnet.train.com

70

+

1New york Weather this week 1/newyork garnet.train.com

70

+

1The Weather in Hawaii 1/weather/hawaii/ garnet.train.com 70

还 可 以 用 Gopher 客 户 程 序 来 访 问 您 的 Gopher 服 务 器 。 下 面 的 例 子 中 , 用garnet.train.com 中的 Gopher 客 户 程 序 访 问 本 系 统 中 的 Gopher 服 务 器 。 将 显示 Gopher 服 务 器 的 主 菜 单 , 用 户 能 从 中 选 择 或 访 问 。

gopher garnet.train.com

Gopher 目 录

当 您 访 问 一 个 Gopher 站 点 时 , 将 显 示 一 个 Gopher 菜 单 。 此 菜 单 是 用 包 含在 一 个 Gopher 目 录 中 的 特 定 的 专 用 文 件 生 成 的 。 Gopher 菜 单 被 设 计 为 通 过 目录 进 行 操 作 。 目 录 将 列 出 其 中 可 用 的 文 件 或 引 出 另 一 个 目 录 。 每 个 目 录 中 专 用Gopher 菜 单 配 置 文 件 提 供 一 些 信 息 , 这 些 信 息 是 关 于 不 同 的 可 用 数 据 文 件 以 及

如 何 访 问 它 们 。 University of Minnesota Gopher 服 务 器 用 .cap 目 录 和 连 接 文 件来 组 织 Gopher 菜 单 。 GN Gopher 服 务 器 用 一 个 menu 和 .cache 文 件 。 然 而 , 连 接 文 件 和 GN menu 文 件 的 项 基 本 是 相 同 的 。

Gopher cap 和 连 接 文 件

缺 省 情 况 下 , 一 个 Gopher 目 录 中 的 所 有 文 件 和 子 目 录 将 自 动 地 以 字 母 顺 序显 示 在 一 个 Gopher 菜 单 中 。 数 据 文 件 的 类 型 为 0 , 目 录 为 类 型 1 。 每 个 菜 单 项的 名 字 是 一 个 文 件 名 或 目 录 名 。 用 cap 文 件 能 重 写 此 列 表 。

您 能 给 Gopher 数 据 文 件 改 名 。 而 通 常 用 一 个 描 述 语 句 在 Gopher 菜 单 中 对Gopher 文 件 进 行 说 明 。 通 过 选 中 菜 单 项 , 也 就 选 中 伴 随 着 此 语 句 的 文 件 。 或 者通 过 一 个 .cap 目 录 中 专 用 文 件 或 者 通 过 扩 展 的 连 接 文 件 中 的 项 来 实 现 描 述 语 句和 Gopher 数 据 文 件 的 关 联 。

Gopher 数 据 文 件 的 每 个 目 录 中 都 有 自 己 的 .cap 目 录 。 .cap 目 录 中 的 文 件和 在 Gopher 文 件 数 据 目 录 中 的 文 件 有 相 同 名 字 。 如 果 您 有 一 个 Gopher 数 据文 件 名 为 engine.1 , 在 .cap 目 录 中 也 有 一 个 文 件 名 为 engine.1 。 在 .cap 目 录 中的 文 件 包 含 三 项 : 名 字 、 类 型 和 Num b 。 名 字 被 赋 值 为 引 用 的 Gopher 数 据 文件 的 菜 单 项 的 描 述 语 句 。 类 型 项 指 定 Gopher 资 源 的 类 型 。 1 代 表 一 个 目 录 , 0 代 表 一 个 文 本 文 件 。Numb 项 被 赋 值 为 Gopher 菜 单 中 的 您 的 Gopher 项 的 序 号 。例 如 , Numb=3 表 示 这 是 Gopher 菜 单 中 的 第 三 项 。

.cap/engine.1

Name=The best engine in the world Type=0

Numb=1

当 在 Gopher 菜 单 中 显 示 此 项 时 , 它 将 被 显 示 在 第 一 项 。 选 中 它 将 选 中

engine.1 数 据 文 件 。

  1. The best engine in the world.

虽 然 .cap 文 件 能 被 用 来 引 出 您 的 目 录 中 的 数 据 文 件 , 但 它 们 不 能 引 出 其 他目 录 或 其 Gopher 站 点 中 的 文 件 。 为 了 补 充 这 点 , 您 需 要 使 用 连 接 文 件 中 的 连接 项 。 一 个 目 录 中 的 连 接 文 件 可 以 有 许 多 连 接 项 以 连 接 不 同 的 Gopher 资 源 。一 个 连 接 文 件 是 任 何 以 圆 点 开 头 的 文 件 。 一 般 的 连 接 文 件 的 名 字 为 : .links 。 一个 连 接 的 每 一 项 都 有 五 个 变 量 集 : 名 字 、 类 型 、 端 口 、 路 径 和 主 机 名 。 您 还 可以 按 菜 单 顺 序 加 一 项 , NUMB 。 名 字 项 是 用 在 菜 单 项 中 的 描 述 语 句 。 端 口 是 用来 连 接 远 程 系 统 的 端 口 , 它 通 常 是 70 。 类 型 是 菜 单 项 引 用 的 资 源 类 型 。 一 个 资源 能 是 一 个 文 件 , 它 也 能 是 一 个 telnet 通 话 或 一 个 图 形 文 件 。 Gopher 不 能 引 用数 据 文 件 。 路 径 变 量 含 有 菜 单 项 引 用 的 资 源 的 路 径 名 。 在 此 的 路 径 名 是 一 个 以Gopher 数 据 目 录 开 始 的 路 径 名 。 目 录 /home/gopher/calif 将 有 一 个 路 径 名 /calif, 在 此 /home/gopher 是 Gopher 数 据 目 录 。 路 径 名 前 可 以 加 上 类 型 。 calif 目 录 可以 是 1/callif , 1 代 表 目 录 的 类 型 。 主 机 名 是 资 源 所 在 的 主 机 名 。 从 您 的 系 统 引用 的 资 源 将 是 您 的 系 统 的 主 机 名 。 如 果 资 源 位 于 别 的 系 统 , 它 将 是 那 个 系 统 的主 机 名 。 用 一 个 + 赋 给 端 口 和 主 机 名 项 将 表 明 使 用 当 前 的 端 口 和 主 机 名 。 对 于 您自 己 系 统 中 的 文 件 和 目 录 , 最 好 省 去 端 口 和 主 机 名 项 。

.links

Name=The best engine in the world Type=1

Port=70 Path=1/engines

Host=richlp.ix.com

您 可 以 用 连 接 来 设 定 用 ftp 或 W A IS 连 接 到 其 他 系 统 中 以 访 问 它 们 的 文 件 和信 息 。 这 时 您 使 用 的 服 务 和 它 的 参 数 将 指 定 在 路 径 项 中 。 主 机 名 和 端 口 都 是 一个 + 。 一 个 ftp 连 接 的 格 式 如 下 所 示 :

Name=ftp-fiile-or-directory Type=1 Path=ftp:hostname/path/ Host=+

Port=+

例 如 , 为 了 设 定 一 个 ftp 连 接 以 访 问 chris.train.com 中 的 文 件 caboose1 , 您 应 如 下 所 示 设 置 路 径 。 当 前 的 端 口 和 主 机 名 都 是 + 。

Name=The last caboose Type=0

Port=+

Path=ftp:pango1.train.com/usr/lib/gopher-data/caboose1 Host=+

从 一 个 WAIS 连 接 , 能 访 问 您 的 系 统 或 远 程 系 统 中 的 WASI 资 源 。 对 于 您的 系 统 , 用 waisrc :加 上 一 个 W A IS 资 源 的 路 径 。 对 于 远 程 系 统 , 在 waisrc :后还 要 加 上 主 机 名 。 例 如 :

waisrc:pango1.train.com/wais/data

您 还 可 以 设 置 一 个 连 接 以 执 行 shell 脚 本 , 而 不 仅 仅 只 是 访 问 资 源 。 在 这 种情 况 下 , 路 径 变 量 被 设 置 为 exec: 加 上 脚 本 参 数 和 脚 本 名 。 参 数 用 双 引 号 括 起来 , 如 果 没 有 参 数 , 用 一 对 空 的 双 引 号 。 参 数 和 脚 本 之 间 用 一 个 冒 号 分 隔 。

path=exec:"arguments":script

除 了 用 每 个 目 录 中 各 自 的 连 接 文 件 来 管 理 各 自 的 .cap 文 件 外 , 您 能 用 一 个扩 展 的 连 接 文 件 来 包 含 本 地 文 件 项 和 连 接 项 。 这 样 的 连 接 文 件 一 般 名为 .names 。 .names 将 列 出 名 字 项 和 Numb 项 , 并 有 一 个 指 明 文 件 路 径 的 路 径项 。 文 件 .names 还 有 一 个 摘 要 项 , 您 能 为 它 输 入 一 个 文 件 内 容 的 简 明 描 述 。 在下 面 显 示 的 文 件 .names 的 第 一 项 引 用 一 个 本 地 文 件 , 而 第 二 项 引 用 一 个 远 程Gopher 站 点 。

.names Path=/engines

Name=The best engine in the world Numb=1

Abstract=A discussion of the best steam engine ever built.

Name=The oldest train running Type=1

Port=70 Path=1/museums Host=pang01.train.com

GN Gopher 目 录

GN Gopher 目 录 放 置 菜 单 项 在 一 个 名 为 menu 的 文 件 中 。 每 个 Gopher 目录 有 它 自 己 的 menu 文 件 , 文 件 中 有 关 于 每 个 菜 单 项 的 项 目 。 GN Gopher 使 用和 Un iversity of Minnesota Gopher 相 同 的 项 目 集 ,仅 有 一 些 例 外 。在 文 件 menu 中 , 您 为 每 个 菜 单 项 列 出 路 径 、 名 字 、 Numb 和 摘 要 。 然 而 , 在 路 径 项 的 路 径

名 之 前 , 您 必 须 指 定 Gopher 类 型 。 它 通 常 是 一 个 数 字 项 , 0 表 示 文 本 文 件 , 1

表 示 目 录 。

Name=About My Weather Site Path=0/intro

Type=0 Numb=1

Abstract=Important W eather Information

GN Gopher 要 求 为 每 个 目 录 创 建 一 个 .cache 文 件 。 在 目 录 中 执 行 mkcache 程 序 即 可 生 成 一 个 .cache 文 件 。 您 能 在 每 个 gopher 目 录 中 用 此 方 法 创 建 .cache 文 件 , 或 从 gopher-data 主 目 录 中 执 行 mkcache 加 上 -r 选 项 。 命 令 mkcache -r 将 为 当 前 目 录 和 它 的 所 有 子 目 录 产 生 .cache 文 件 。 在 您 的 Caldera Network Desktop 中 ,您 能 从 /home/gopher 目 录 中 运 行 mkcache -r 来 为 您 的 所 有 Gopher 目 录 创 建 .cache 文 件 。

GN Gopher 也 完 全 支 持 Web 页 。它 能 显 示 W eb 页 ,并 通 过 W eb 页 的 HREF

引 用 它 的 菜 单 项 。

参 见 GN 文 档 中 关 于 这 些 功 能 的 详 细 描 述 。

Gopher 索 引 : gopherindex

用 gopherindex 命 令 能 为 您 的 Gopher 数 据 文 档 创 建 全 文 索 引 。gopherindex 在 Un iversity of Minnesota Gopher 软 件 包 中 ,它 用 waisindex 来 执 行 它 的 索 引 , 所 以 您 必 须 安 装 有 W A IS 。 它 使 用 参 数 的 几 个 可 能 选 项 和 一 个 Gopher 数 据 目录 。 在 数 据 目 录 中 的 所 有 文 档 将 被 做 一 个 索 引 。 -N 选 项 指 定 用 在 一 个 Gopher

菜 单 中 的 索 引 文 件 的 一 个 描 述 。 下 面 的 例 子 将 对 目 录 /home/gopher/baseball 中的 文 件 进 行 索 引 。

/usr/sbin/gopherindex -v -N "Search CIS Services Short Courses"

/home/gopher/baseball

除 了 使 用 gopherindex, 您 还 能 直 接 使 用 waisindex 并 对 索 引 文 件 创 建 一 个连 接 。

waisindex -r /home/gopher/baseball

在 目 录 连 接 或 menu 文 件 中 您 能 为 索 引 文 件 创 建 连 接 项 。 类 型 7 是 一 个 文档 WAIS 索 引 类 型 。

Type=7 Name=Baseball Index Host=+

Port=+ Paht=7/.index/index

一 个 用 Gopher 例 子

下 面 是 一 个 简 单 的 Gopher 例 子 。 它 是 一 个 Gopher 站 点 , 站 点 上 的 文 件 是关 于 一 些 州 的 天 气 信 息 。 每 个 州 的 文 件 放 在 它 自 己 的 目 录 中 。 开 始 的 Gopher 菜 单 在 Gopher 数 据 目 录 中 。此 菜 单 项 被 定 义 在 .name 文 件 中( 对 于 GN Gopher 将 是 名 为 menu 文 件 ) 。 大 多 数 的 菜 单 项 引 用 其 他 的 Gopher 目 录 。 有 一 个 菜单 项 是 对 Gopher 站 点 的 介 绍 信 息 的 文 件 。 在 主 Gopher 目 录 中 只 有 这 个 介 绍文 件 和 .name 文 件 。 下 面 的 两 项 连 接 到 本 地 Gopher 目 录 , calif 和 newyork 。最 后 的 一 项 连 接 到 另 一 个 Gopher 站 点 garnet.train.com 。

.names

Path=/intro

Name=About My Weather Site Numb=1

Type=0

Abstract=Important W eather Information.

Name=California Weather Information Numb=2

Type=1 Path=/calif

Name=New York Weather this week Numb=3

Type=1 Path=/newyork

Name=The Weather in Hawaii Numb=4

Type=1 Port=70

Path=/usr/lib/weather/hawaii/ Host=garnet.train.com

California 菜 单 项 引 用 calif 子 目 录 。 此 目 录 下 有 一 些 关 于 California 天 气 信

息 的 文 件 。 目 录 calif 中 列 出 两 个 数 据 文 件 , 一 个 连 接 文 件 和 一 个 .caps 目 录 。在 .cap 目 录 中 有 两 个 文 件 , 这 两 个 文 件 和 目 录 calif 中 两 个 数 据 文 件 有 相 同 的 名字 。 对 于 calif 目 录 中 surf.data 和 storm.data 文 件 , 在 .caps 目 录 中 也 有 两 个 名为 surf.data 和 storm.data 的 文 件 。 下 面 显 示 的 是 .caps 目 录 中 的 文 件 。

surf.data

Name=Surfing Conditions Numb=1

Type=0 storm.data

Name=Storm Advisory Numb=2

Type=0

在 calif 目 录 中 , .link 文 件 列 出 一 个 访 问 远 程 系 统 中 文 件 的 项 。

.links

Name=The Weekend Snowpack Numb=3

Type=0 Port=+

Path=ftp:rose.net.com/usr/lib/weather/snow/current.txt

Host=+

对 于 GN gophe r, menu 文 件 如 下 面 所 示 , 每 个 路 径 名 前 都 有 一 个 文 件 类型 ( 0 代 表 文 本 文 件 , 1 代 表 目 录 ) 。

menu

Name=About My Weather Site Path=0/intro

Name=California Weather Information Path=1/calif

Name=New York Weather this week Path=1/newyork

Name=The Weather in Hawaii Path=0/usr/lib/weather/hawaii/

W A IS 服 务 器

WAIS ( 广 域 信 息 服 务 ) 用 关 键 字 查 找 一 个 文 档 数 据 库 , 并 按 照 它 们 的 重 要程 度 排 列 和 显 示 结 果 。 这 是 一 种 非 常 有 效 的 方 法 使 信 息 能 在 网 络 上 使 用 。 W A IS 是 由 Thinking Machines 开 发 的 , 现 在 由 WA IS Inc 管 理 。 WA IS 的 免 费 版 本 称为 free W A IS , 它 能 从 Clearinghouse for Networking Inofrmation Discovery and Retrieval(CNIDR ) 获 得 。 您 还 能 从 CNIDR 和 Linuxftp 站 点 上 取 得 free WAIS 的Linux 版 本 。

free WAIS 软 件 包 中 包 括 客 户 程 序 、 一 个 服 务 器 程 序 和 一 个 索 引 程 序 ( 参 见

表 12-15 和 12-16 ) 。 客 户 程 序 被 称 为 swais 、 xwais 和 waissearch 。 它 们 是 用

来 输 入 请 求 和 显 示 结 果 。 索 引 软 件 被 称 为 waisindex 。 您 能 用 它 为 您 的 W A IS 文 档 创 建 一 个 关 键 字 索 引 , 以 提 供 快 速 有 效 的 访 问 能 力 。 服 务 器 软 件 被 称 为waisserver 。 用 它 您 能 创 建 自 己 的 WAIS 站 点 并 允 许 其 他 的 用 户 在 您 的 WA IS 文 档 上 执 行 查 找 。

12-15 WAIS 服 务 器 : z3950

选 项

描 述

-p portnum

监 听 端 口 , 如 果 提 供 portnum , 则 用 端 口

号 为 portnum 的 端 口

-s

-d directory

监 听 标 准 的 输 入 /输 出

用 此 目 录 做 为 索 引 的 缺 省 位 置

-e path-name

把 错 误 输 出 重 定 向 到 path-nam e, 如 果 为

指 定 此 目 录 , 则 重 定 向 到 /dev/null

-l log_level

设 置 记 录 的 级 别 0 、 1 、 5 和 10

1 只 记 录 错 误 和 警 告 信 息

5 记 录 MEDIUM 优 先 级 的 信 息

-u user

10 记 录 所 有 的 信 息

已 指 定 的 用 户 运 行 服 务 器

-v

显 示 当 前 的 版 本 和 数 据

12-16 waisindex :选 项 和 文 件 类 型

W aisindex

文 件 描 述

index-name.doc

关 于 文 档 的 信 息 , 包 括 大 小 和 名 字

index-name.dct

是 一 个 字 典 文 件 , 其 中 包 含 交 叉 索 引

和 倒 置 文 件 的 所 有 的 关 键 词 列 表

index-name.fn 列 出 为 索 引 创 建 的 文 件

index-name.hl 所 有 标 题 的 表 ; 标 题 是 题 目 并 当 它 们在 查 找 结 果 中 时 显 示 它 们

index-name.inv 倒 排 文 件 , 其 中 包 括 一 个 单 词 表 , 它们 重 要 程 度 的 排 序 , 它 们 到 索 引 文 档的 连 接

index-name.src 包 含 索 引 信 息 的 源 描 述 文 件 , 包 括 它位 于 什 么 系 统 , 它 涉 及 的 主 题 , 谁 来管 理 等 信 息

index-name.status 包 含 用 户 定 义 的 信 息

waisindex 选 项

-a 给 存 在 的 一 行 附 加 索 引

-contents 给 文 件 的 内 容 做 索 引 ( 缺 省 )

-d path-name 为 索 引 文 件 指 定 路 径 名 ; 路 径 名 将 被加 到 索 引 文 件 名 的 前 面

-e logfile 重 定 向 错 误 信 息 到 logfiile

-export 为 了 允 许 Internet 访 问 , 加 主 机 名 和TCP 端 口 到 源 描 述 文 件 中 ; 否 则 将 不包 括 连 接 信 息 , 文 件 只 能 被 本 地 访 问

-l num 设 置 记 录 的 级 别 0 、 1 、 5 和 10

0 不 记 录

1 只 记 录 错 误 和 警 告 信 息

5 记 录 MEDIUM 优 先 级 的 信 息

10 记 录 所 有 的 信 息

-mem 索 引 时 使 用 的 内 存 数

-M 连 接 不 同 类 型 的 文 件

-contents 决 定 是 否 对 文 件 内 容 做 索 引 ; - contents 对 整 个 文 件 做 索 引 ;

-nocontents-nocontents 只 对 文 件 名 和 标 题 做 索 引 , 不 对 内 容

-pairs 如 何 对 待 大 写 单 词 ; -pairs ( 缺 省 ) 把 大 写 的 单 词 做 为 一 项 ;

-nopairs-nopairs 把 大 写 单 词 中 字 母 分 别 做 为 一 项

-pos 是 否 在 索 引 中 包 括 单 词 的 位 置 信 息 ;

-pos 将 包 括 此 信 息 , 并

-nopos 允 许 近 似 匹 配 搜 索 , 但 索 引 的 大 小 将增 加 ; -nopos 不 包 括 此 信 息

-r 递 归 的 对 子 目 录 做 索 引

-register 登 记 一 个 索 引 到 WAIS 服 务 目 录 中

-t 指 定 文 档 文 件 的 类 型

-T 设 置 文 档 的 类 型

文 档 文 件 的 类 型

filename 用 文 件 名 做 为 标 题 行 的 文 本 类 型

first_line

用 文 件 中 的 第 一 行 做 为 标 题 行 的 文 本

类 型

one_line

对 每 个 句 子 做 索 引 的 文 本 类 型

text

对 文 档 做 索 引 的 文 本 类 型 , 标 题 行 是

ftp

路 径 名

包 含 访 问 系 统 的 ftp 代码

GIPGIF

图 象 文 件

PICTPICT

图 象 文 件

TIFFTIFF

图 象 文 件

MPEGMPEG

文 件

M ID IM IDI

文 件

HTML

用 于 W eb 页 的 HTML 文件

mail_or_rmail

索 引 邮 箱 文 件

mail_digest

用 标 题 行 中 的 主 题 对 email 做 索 引

netnets

对 USENET 新 闻 做 索 引

ps

Postscript 文件

您 能 从 站 点

ftp.cnidr.org 或 大 多 数 的

Linux ftp 站 点 上 取 得 freeWAIS 。在 ftp

站 点 ftp.cnidr.org 上 有 一 个 free W A IS 的 Linux 版 本 , 并 且 是 已 经 编 译 过 的 , 可以 马 上 使 用 的 版 本 。 当 前 用 于 Linux 的 软 件 包 是 freeWAIS-0.5-linux.tar.gz , 位于 目 录 /pub/CNDIR.tools/freewais 中 。 您 也 可 以 下 载 源 代 码 自 己 编 译 。 源 代 码软 件 包 叫 做 free W A IS-0.5.,tar.Z , 它 能 按 照 不 同 的 系 统 进 行 不 同 的 配 置 。free W A IS 也 可 以 从 sunsite.unc.edu 或 它 的 镜 像 站 点 上 的 /pub/packages/info-

systems/wais 目 录 中 下 载 。 此 目 录 中 有 一 些 不 同 的 版 本 。

创 建 一 个 您 想 放 置 free WAIS 的 目 录 , 通 常 是 /home/wais 。 建 议 您 下 载 预 编译 过 的 用 于 Linux 的 二 进 制 的 软 件 包 freeWAIS-0.5-linux.tar.gz 。 接 着 用 gunzip 解 压 , 用 tar xvf 展 开 文 件 。 将 创 建 一 个 名 为 free W A IS-0.5-linux 的 目 录 。 此 目录 中 包 含 那 些 二 进 制 文 件 。 您 需 要 把 它 们 安 装 到 合 适 的 目 录 中 , 象 /usr/bin 。 如果 您 想 下 载 源 代 码 , 并 自 己 编 译 freeWAIS , 您 首 先 要 配 置 软 件 , 然 后 再 编 译 创建 它 的 二 进 制 文 件 。

配 置 和 安 装 free W A IS 源 代 码 : Makefile 和 ir.h

如 果 您 下 载 源 代 码 , 它 的 目 录 中 将 有 一 些 子 目 录 : doc 中 含 有 文 档 , src 中含 有 源 代 码 。 还 有 一 个 特 殊 的 子 目 录 , wais-test, 中 含 有 您 的 服 务 器 的 测 试 文件 。

您 首 先 要 在 Makefile 文 件 中 设 定 变 量 TO P 。 TOP 需 要 赋 值 为 freeWAIS 源代 码 所 在 的 目 录 的 路 径 名 。 输 入 您 的 WAIS 源 代 码 所 在 目 录 的 路 径 名 。

除 了 Makefile 之 外 , 还 有 一 些 特 定 的 Makefile , 每 个 文 件 都 有 一 个 扩 展 名 , 用 来 指 定 它 是 特 定 操 作 系 统 的 Makefile 。Makefile.linux 文 件 便 是 用 来 创 建 Linux 版 本 的 free WAIS 。 此 文 件 已 经 为 Linux 作 了 一 些 配 置 。 然 而 , 您 能 指 定 或 改 动另 一 些 选 项 。 下 面 将 对 这 些 选 项 进 行 详 细 的 描 述 。 这 些 选 项 被 赋 值 给 变 量CFLAGS 。 开 始 已 经 设 置 了 缺 省 的 选 项 。 下 面 是 一 个 项 CFLAGS 的 例 子 。 记 住您 只 能 修 改 此 行 。

CFLAG = -Wall -m486 -fwritable-strings -Who-unuesd -I$(INCLUDE)

-DTELL_USER -DUSG -SDECURE_SERVER -

DRELEVANCE_FEEDBACK -DBOOLEANS

-DPARTIALWORD -DLITERAL -DSOUND -DBIBDS -DLINUX

下 面 是 一 列 其 他 的 有 用 的 选 项 :

Makefile 选 项 描 述

-DBIO 允 许 为 生 物 符 号 做 索 引

-DBOOLEANS 允 许 用 AND , OR 和 NOT 进 行 布 尔 查 找

-DBINGINDER 为 文 档 的 最 大 集 合 做 索 引

-DLITERAL 文 字 串 查 找

-DPARTIALWORD 允 许 在 模 式 匹 配 中 使 用 * 以 匹 配 模 式 的 任 何 变 化 。 例 如 , 用 hum * 匹 配 human 、 humm ingbird 。

-DRELEVANCE_FEEDBACK 允 许 您 从 查 找 中 选 择 相 关 的 文 档 并 用 在 它 们之 上 进 行 新 的 查 找

-DSECURE_SERVER 提 供 最 好 的 服 务 器 安 全

-DTELL_USER 告 诉 服 务 器 谁 正 在 连 接

-DUSE_SYSLOG 使 用 系 统 日 志 进 入 系 统

如 果 需 要 , 可 以 限 制 您 的 WA IS 服 务 只 允 许 特 定 的 网 络 或 系 统 访 问 。 为 了做 到 这 点 , 创 建 一 个 SERV_SEC 文 件 , 并 输 入 允 许 访 问 的 网 络 和 系 统 的 域 名和 IP 地 址 。 文 件 SERV_SEC 被 定

义 在 文 件 ir.h 中 的 include 目 录 的 一 项 , 如 下 所 示 :

#define SERVSECURITYFILE "SERV_SEC"

SERV_SEC 文 件 中 的 项 包 含 域 名 和 IP 地 址 , 其 中 IP 地 址 是 可 选 项 , 例 如 :

pango1.train.com 204.166.189.21

您 能 给 进 一 步 限 制 到 一 个 特 定 的 数 据 库 的 访 问 , 只 允 许 某 些 指 定 的 网 络 和

系 统 访 问 某 些 数 据 库 。 您 需 要 建 立 一 个 DATA_SEC 文 件 。 此 文 件 也 被 定 义 在文 件 ir.h 中 的 include 目 录 的 一 项 , 如 下 所 示 :

#define DATASECURITYFILE "DATA_SEC"

文 件 DATA_SEC 中 的 每 一 项 首 先 列 出 数 据 库 , 接 着 是 域 名 和 可 选 的 IP 地址 。 在 域 名 的 区 域 用 一 个 * 则 表 示 所 有 的 用 户 均 可 访 问 此 数 据 库 。 下 面 的 例 子 显示 文 件 DATA_SEC 中 的 项 , 第 二 项 为 所 有 的 用 户 打 开 一 个 oldata 数 据 库 。

mydata pango1.train.com 204.166.189.21 oldata * *

一 旦 您 准 备 编 译 free WAIS , 要 使 用 下 面 的 make 命 令 和 项 “ linux” 。 它 将为 您 的 Linux 系 统 创 建 W A IS 客 户 程 序 、 索 引 器 和 服 务 器 程 序 。 接 着 首 先 要 运行 目 录 src/x 中 的 xmkmf 来 为 xwais 创 建 Makefile 。

#make linux

创 建 索 引

为 了 使 用 W A IS , 必 须 为 可 用 的 文 档 创 建 索 引 。 索 引 的 过 程 是 由 waisindex 命 令 完 成 的 , 它 将 创 建 一 个 特 定 的 WA IS 数 据 库 。 您 能 为 单 个 文 件 、 一 组 文 件或 文 件 的 整 个 目 录 和 子 目 录 创 建 索 引 。数 据 文 件 和 它 的 索 引 一 起 组 成 一 个 W A IS 数 据 库 。 您 能 分 别 为 不 同 的 文 件 或 文 件 组 建 立 索 引 , 在 您 的 服 务 器 上 建 立 不 同的 WAIS 数 据 库 。 WA IS 数 据 库 应 该 位 于 当

WAIS

服 务 器 被 调 用 时 指 定 的 WAIS 数 据 目 录 中 。

waisindex 能 创 建 一 个 倒 排 文 件 索 引 , 它 将 涉 及 指 定 的 文 件 中 的 每 个 单 词 。

这 样 就 可 以 在 文 档 中 进 行 全 文 的 关 键 字 搜 索 。 waisindex 命 令 有 一 些 选 项 , 在选 项 的 最 后 是 被 索 引 的 文 件 、 文 件 组 或 目 录 。 用 -d 选 项 能 指 定 索 引 的 名 字 。waisindex 将 为 文 档 创 建 几 个 索 引 文 件 。 每 个 索 引 文 件 有 自 己 的 扩 展 名 来 说 明自 己 的 功 能 , 但 它 们 名 字 的 前 缀 是 用 -d 选 项 指 定 的 。 如 果 您 没 在 此 选 项 中 指 定名 字 , “ inde x” 将 作 为 前 缀 名 。 另 外 , 如 果 您 希 望 您 的 数 据 库 能 Internet 上 用户 访 问 , 您 还 要 加 一 个 -export 选 项 。 没 有 此 选 项 , 您 的 数 据 库 只 能 被 您 的 系 统中 的 其 他 用 户 访 问 。 下 一 部 分 将 讨 论 -export 选 项 。 waisindex 的 选 项 和 索 引 文件 列 在 表 12-14 中。

waisindex -d index-file -export file-list

如 果 您 对 列 出 的 多 个 文 件 进 行 索 引 , 则 对 这 些 文 件 将 做 成 一 个 索 引 。 如 果您 想 对 一 个 子 目 录 中 的 所 有 文 件 做 索 引 , 只 须 在 命 令 中 用 -r 选 项 加 上 目 录 名 。

waisindex -d index-file -export -r directory-name

若 要 加 一 个 文 件 或 目 录 到 一 个 已 存 在 的 数 据 库 中 , 您 要 在 对 它 做 索 引 时 用选 项 -a 。 还 要 用 选 项 -d 和 数 据 库 名 以 把 此 索 引 文 件 加 到 指 定 的 数 据 库 中 。 您 能在 命 令 行 中 列 出 几 个 文 件 以 把 它 们 加 入 数 据 库 中 。 如 果 您 想 加 一 个 目 录 , 要 使用 -r 选 项 加 上 目 录 名 。

waisindex -d index-file -a -export file-list

下 面 的 例 子 中 , 用 户 首 先 对 文 件 cookies 和 cakes 做 索 引 , 为 它 们 创 建 一个 索 引 名 为 recipe s。 从 recipes 中 查 询 将 搜 索 cookies 和 cakes 两 个 文 件 。 下面 的 例 子 中 ,用 户 将 对 文 件 pies 做 索 引 并 把 它 加 到 索 引 recipes 中 。W A IS recipes 数 据 库 中 现 在 包 含 文 件 cookies、 cakes 和 pies 。 然 后 对 目 录 snack , 包 括 它 的所 有 文 件 和 它 的 子 目 录 中 的 所 有 文 件 , 做 索 引 , 索 引 名 为 junkfood。 最 后 一 个例 子 中 , 又 一 次 对 sancks 做 索 引 , 但 这 一 次 索 引 将 被 加 到 recipes 数 据 库 中 。

junkfood 数 据 库 仍 然 存 在 并 引 用 snacks 目 录 。#waisindex -d recipes -export cookies cakes #waisindex -d recipes -export -a pies #waisindex -d junkfood -export -r snacks #waisindex -d recipes -export -a -r snacks

用 -t 选 项 ,您 将 能 对 不 同 类 型 的 文 件 做 索 引 。您 能 索 引 图 片 、邮 箱 文 件 、HTML 页 和 标 准 的 文 本 文 件 。 不 同 的 文 本 的 类 型 列 在 表 12-14 中 。 对 于 文 本 文 档 , 您能 进 一 步 指 定 对 每 行 做 索 引 。 如 果 您 按 行 索 引 , 当 用 关 键 字 查 找 时 , W A IS 将指 出 关 键 字 所 在 的 行 。 下 面 的 例 子 中 , 使 用 者 对 文 档 breads 的 每 行 做 索 引 , 产生 索 引 文 件 叫 做 cereals 。

#waisindex -d cereals -t one_line breads

waisindex 命 令 还 能 把 不 同 类 型 的 文 件 关 联 到 一 个 文 件 中 。 例 如 , 如 果 您 有一 些 图 象 、 视 频 或 声 音 文 件 , 想 把 它 们 和 一 个 指 定 的 文 本 文 档 相 关 联 , 您 可 以用 waisindex 把 这 些 文 件 连 接 在 一 起 。 当 一 个 用 户 检 索 一 个 文 本 文 档 时 , 同 时将 检 索 关 联 的 图 象 、 视 频 或 声 音 文 件 。 当 用 户 阅 读 文 本 时 , 它 也 能 显 示 一 个 图片 或 播 放 声 音 。 关 联 文 件 必 须 和 它 们 所 关 联 的 文 件 有 相 同 的 前 缀 。 例 如 , 如 果有 一 个 文 档 名 为 train.tx t, 有 一 个 图 形 文 件 trani.gif 和 声 音 文 件 train.mid i。 用 -

M 选 项 和 一 列 文 件 类 型 , 加 上 -export 选 项 把 一 组 文 件 连 接 到 一 个 索 引 文 件 。

#waisindex -d train -M text, tiff, mpeg, midi – export

/user/waisdata/train/*

为 了 让 W A IS 和 您 的 Web 资 源 很 好 地 结 合 , 您 要 为 您 的 W eb 页 创 建 W A IS 索 引 。 用 waisindex 和 -T HTML 选 项 , 用 它 来 指 定 被 索 引 的 文 件 类 型 是 HTML 文 档 。 索 引 名 可 以 是 类 似 myweb 之 类 的 名 字 。 此 索 引 将 允 许 W A IS 搜 索 Web

HTML 文 档 。 在 下 面 的 例 子 中 , 使 用 者 将 对 目 录 /home/httpd/html 中 的 Web 页做 索 引 。 索 引 名 为 myweb , 类 型 是 HTM L。通 过 指 定 -contents 选 项 对 每 个 Web 页 的 全 部 内 容 做 索 引 。 选 项 -export 将 包 括 Internet 访 问 的 主 机 信 息 。

#waisindex -d myweb -T HTML -contents -export -r

/home/httpd/html/*.html

您 的 WAIS 资 源

当 您 为 文 件 做 索 引 以 便 数 据 库 可 用 时 , waisindex 将 为 数 据 库 创 建 一 个 源 文件 , 通 过 它 别 的 用 户 能 访 问 您 的 数 据 库 ; 它 将 提 供 一 些 信 息 , 象 数 据 库 的 名 称等 。 一 些 WAIS 数 据 库 访 问 时 要 收 费 , 用 源 文 件 能 显 示 收 费 信 息 。 您 还 能 从 中找 到 管 理 员 的 地 址 以 发 送 一 些 建 议 。 在 源 文 件 的 结 束 是 W A IS 数 据 库 的 一 个 简短 描 述 。

当 用 命 令 waisindex 创 建 数 据 库 时 , 如 果 您 指 定 -export 选 项 , 为 了 使 别 的系 统 中 的 用 户 访 问 您 的 数 据 库 ,将 加 入 一 些 字 段 。其 中 有 两 个 字 段 是 关 于 Internet 信 息 的 , 一 个 是 IP 名 , 另 一 个 是 您 的 主 机 的 IP 地 址 。 被 加 入 的 另 一 个 字 段 是用 来 指 定 访 问 您 的 计 算 机 上 的 WA IS 数 据 库 的 端 口 。如 果 您 没 有 用 -export 选 项 , 这 些 字 段 将 是 空 的 。 这 种 情 况 下 , 只 有 您 的 系 统 中 的 用 户 才 能 访 问 数 据 库 。

如 果 需 要 , 您 能 改 变 源 文 件 中 的 任 何 字 段 。 完 整 的 源 文 件 是 用 括 号 括 起 来的 。 每 行 中 的 字 段 是 以 一 个 开 始 的 冒 号 加 上 字 段 名 。 您 能 编 辑 源 文 件 并 加 入 更多 的 描 述 。 注 意 描 述 是 用 双 引 号 括 起 来 的 。 第 一 个 引 号 是 在 “ description ” 的后 面 , 然 后 是 描 述 的 文 本 , 最 后 是 结 束 的 引 号 , 它 单 独 占 一 行 。 下 面 的 例 子 是一 个 zipcodes 的 源 文 件 , 名 为 zipcodes.src 。

(:source

:versiton 3

:ip-address "192.31.181.1"

:ip-name "quake.think.com"

:tcp-port 210

:database-name "/proj/wais/db/sources/zipcodes"

:cost 0.00

:cost-unit :free

:ma intainer "wais @quake.think.com"

:descriptin "

WAIS index of USA Zip Code database.

The full Zipcodes file may be obtained via FTP using the URL:

<ftp://obi.std.com/obi/ZIPCODES/zipcode.txt> "

)

别 的 用 户 用 源 文 件 来 访 问 WA IS 数 据 库 。 一 个 源 文 件 将 告 诉 用 户 它 位 于 哪个 主 机 以 及 它 调 用 的 是 什 么 。 您 可 以 把 它 看 做 是 WAIS 数 据 库 的 URL 。 远 程 的用 户 为 了 访 问 数 据 库 必 须 首 先 拥 有 源 文 件 。 您 可 以 把 源 文 件 发 送 给 用 户 , 他 可以 把 源 文 件 插 入 他 的 主 机 的 wais-sources 目 录 中 , 或 者 把 源 文 件 登 记 注 册 到 一个 象 quake.think.com 和 cnidr.org 的 W A IS 服 务 器 中 , 这 些 服 务 器 中 有 一 个 服务 器 的 目 录 。 您 的 源 文 件 和 其 他 的 源 文 件 都 放 在 这 些 服 务 器 中 。 用 一 个 W A IS 客 户 程 序 象 swais , 使 用 者 能 访 问 服 务 器 的 此 目 录 并 找 到 列 在 其 中 的 WA IS 数据 库 。 接 着 它 们 可 以 选 择 和 查 询 您 的 数 据 库 。

当 您 创 建 一 个 数 据 库 时 , 在 对 文 件 做 索 引 时 用 -register 选 项 就 可 以 注 册 数

据 库 。 您 也 可 以 等 到 以 后 再 注 册 , 可 能 您 需 要 先 测 试 它 。 注 册 时 只 须 用 命 令

waisindex 和 选 项 -d 加 索 引 名 , 然 后 再 加 上 -register 选 项 。

waisindex -d recipes -register

测 试 您 的 W A IS 服 务 器

在 freeWAIS-0.5 源 代 码 包 中 , 有 一 个 目 录 名 为 test-wais , 此 目 录 中 含 有 一组 测 试 文 件 , 用 它 们 您 可 以 测 试 索 引 或 服 务 器 的 访 问 。 在 此 目 录 中 有 一 个 shell 脚 本 为 test.waisinde x。 如 果 您 查 看 此 shell 脚 本 , 您 将 看 到 几 个 waisindex 命令 ,用 测 试 文 件 创 建 几 个 不 同 的 数 据 库 。它 将 创 建 四 个 测 试 索 引 。索 引 test-Bool 测 试 布 尔 查 找 能 力 。 test-Comp 索 引 测 试 压 缩 文 件 的 操 作 。 test-Docs 索 引 对 使用 目 录 docs 中 的 文 档 进 行 递 归 查 找 进 行 测 试 。 test-Multi 检 查 对 不 同 类 型 的 文件 象 GIF 图 形 文 件 的 操 作 ( 这 些 命 令 名 前 都 有 一 个 路 径 ../bin /, 如 果 您 已 经 下 载WAIS 二 进 制 文 件 并 已 进 行 安 装 , 应 该 删 除 前 面 的 ../bin/)。

您 还 可 以 注 意 到 为 每 个 测 试 数 据 库 都 创 建 一 个 源 文 件 : 一 个 boolean.src 和doc.src 。 为 了 在 本 地 测 试 您 的 服 务 器 , 把 这 些 源 文 件 复 制 到 您 的 W A IS 客 户 程序 用 来 访 问 WA IS 资 源 的 目 录 。 例 如 , 如 果 swais 用 /usr/lib/wais-sources 做 为它 的 源 目 录 , 然 后 复 制 test-boolean.src ( 源 ) 文 件 到 此 目 录 中 。 现 在 或 者 通 过inetd , 或 直 接 启 动 您 的 WA IS 服 务 器 ( 如 果 您 直 接 启 动 , 在 命 令 的 最 后 加 上 一个 & 号 ) 。 用 test-wais 目 录 的 路 径 名 作 为 WA IS 数 据 目 录 。 当 您 启 动 swais , 它 将 列 出 在 它 的 源 目 录 中 所 有 资 源 , 包 括 test-boolean 资 源 和 其 它 测 试 资 源 。您 能 选 择 和 查 询 您 的 测 试 资 源 , 它 将 访 问 您 的 WAIS 服 务 器 并 返 回 结 果 。 可 以试 着 查 找 关 键 字 “ boolean ” 。 也 能 把 目 录 wais-test 移 到 您 的 W A IS 数 据 目 录

中 。 为 了 创 建 一 个 总 体 的 数 据 库 , 您 可 以 对 wais-test 用 -r 选 项 做 索 引 。

启 动 free W A IS

您 可 以 让 WA IS 不 间 断 地 运 行 或 当 需 要 时 通 过 inetd 调 用 它 。 用 waisserver 命 令 和 一 些 选 项 能 启 动 WA IS 服 务 器 。 您 能 用 -d 选 项 指 定 W A IS 索 引 的 缺 省 位置 。 还 能 用 -p 设 置 端 口 , 用 -u 设 置 用 户 名 。 在 命 令 的 最 后 加 上 一 个 & 号 。 当 直接 调 用 时 , waisserver 将 在 后 台 运 行 。 为 了 使 WAIS 以 一 个 持 续 运 行 的 守 护 进程 运 行 , 您 应 在 一 个 rc.d/init 启 动 文 件 象 wais.init 中 输 入 waisserver 命 令 。 下面 的 例 子 是 一 个 waisserver 命 令 。

waisserver -d /usr/wais/wais_index &

为 了 更 安 全 地 运 行 您 的 W A IS 服 务 , 以 一 个 普 通 用 户 而 不 是 以 root 来 运 行waisserver 。 新 建 一 个 用 户 并 在 它 的 passwd 项 中 输 入 一 个 * 。 然 后 启 动waisserver 时 能 用 -u 选 项 加 上 用 户 名 。 在 下 面 的 例 子 中 , waisserver 以 用 户sports 运 行 。

waisserver -u sports -d /usr/wais/wais_index &

为 了 使 inetd 启 动 WA IS 服 务 器 ,您 必 须 在 文 件 /etc/services 和 /etc/inetd.conf

中 放 置 合 适 的 项 。 对 于 文 件 /etc/services, 您 可 以 放 置 如 下 的 项 。

z3590210/tcp#z39_50 protocol for W A IS 接 着 在 文 件 inetd.conf 中 , 放 置调 用 WA IS 服 务 器 的 项 。 当 waisserver 被 waisserver.d 调 用 , 它 将 知 道 是 通 过inetd 来 运 行 。 由 于 这 个 原 因 , 参 数 列 中 的 第 一 个 参 数 是 waisserver.d 。

z3590 stream tcp nowait root /usr/sbin/waisserver waisserver.d /home/wais -e server.log

总 结 : Internet 服 务 器

您 能 设 置 您 的 Linux 系 统 做 为 一 个 服 务 器 以 提 供 大 量 的 Internet 服 务 。 您 需要 的 是 合 适 的 服 务 器 软 件 和 安 全 地 组 织 的 目 录 。设 置 您 的 Linux 系 统 做 为 一 个 ftp 服 务 器 , 一 个 Web 服 务 器 , 一 个 Gopher 服 务 器 或 W A IS 服 务 器 的 服 务 器 软 件是 免 费 的 。 OpenLinux 在 安 装 系 统 时 自 动 地 安 装 W eb 和 ftp 服 务 器 软 件 。 在 系统 的 桌 面 上 , 您 可 以 操 作 Linux 系 统 , 使 它 做 为 一 个 Web 站 点 或 一 个 ftp 站 点 。

同 时 , 还 可 以 用 不 同 的 Internet 服 务 器 运 行 。 它 们 以 守 护 进 程 运 行 , 等 待远 程 用 户 的 请 求 。 当 收 到 对 某 一 服 务 的 请 求 时 , 相 应 的 服 务 器 处 理 此 请 求 。 一个 远 程 的 用 户 能 连 接 到 您 的 ftp 服 务 器 并 下 载 文 件 , 同 时 另 一 个 用 户 可 以 连 接 到您 的 Web 服 务 器 并 浏 览 您 的 W eb 页 。 依 照 服 务 器 的 运 行 频 率 , 您 可 以 让 它 不间 断 地 运 行 或 只 有 当 需 要 时 用 inetd 守 护 进 程 调 用 它 。 为 了 使 一 个 服 务 器 不 间断 地 运 行 , 您 只 用 简 单 调 用 它 的 服 务 器 程 序 。 用 inetd 调 用 服 务 器 时 , 您 必 须在 文 件 /etc/services 和 /etc/inetd.conf 中 放 置 合 适 的 项 , 然 后 运 行 inetd 守 护 进程 。

Internet 服 务 器 软 件 可 以 从 不 同 的 Linux 站 点 上 免 费 下 载 。 参 见 第 1 章 中 关于 ftp 站 点 。 在 站 点 sunsite.unc.edu 和 它 的 镜 像 站 点 中 , 大 多 数 的 服 务 器 软 件位 于 目 录 /pur/linux/systems/info-systems 中 。 以 后 可 以 从 这 些 站 点 中 下 载 更 新的 软 件 版 本 。 Caldera Network Desktop 当 前 已 安 装 Apache Web 服 务 器 和wa-ftpd ftp 服 务 器 。