Server 专 栏
FTP Server档 案 传 输
伺 服 器 的 建 立 与 管 理

王 国 泰

  在 网 际 网 路 这 个 资 讯 高 速 公 路 上 , FTP( File Transfer Protocol) 占 了 相 当 重 要 的 角 色 。 透 过 FTP所 提 供 的 「 档 案 传 输 」 功 能 , 可 以 与 远 在 数 千 里 外 的 电 脑 做 资 料 档 案 的 传 输 交 换 , 早 在 WWW尚 未 风 行 之 前 , FTP占 了 网 际 网 路 使 用 量 的 首 位 , 足 见 FTP在 网 路 服 务 上 不 可 或 缺 的 地 位 。 因 此 我 们 「 建 构 Internet Server」 系 列 到 此 就 开 始 进 入 「 建 立 FTP Server」 的 话 题 。

FTP Server初 步

  如 果 我 们 将 一 个 FTP Server所 服 务 的 对 象 来 区 分 , 原 则 上 可 以 分 为 两 种 :

第 一 种 是 「 伺 服 器 上 的 合 法 使 用 者 」 :
在 一 般 UNIX环 境 里 , 都 至 少 会 提 供 让 此 伺 服 器 自 身 的 合 法 使 用 者 可 以 透 过 FTP来 存 取 使 用 本 身 帐 号 目 录 下 的 档 案 资 料 , 这 是 相 当 基 本 的 需 求 。

第 二 种 则 是 所 谓 「 匿 名 使 用 者 」 ( Anonymous FTP Server ) :
在 国 际 网 路 的 连 通 世 界 里 , 并 不 是 每 个 人 都 拥 有 许 多 主 机 的 使 用 帐 号 , 为 了 有 些 较 为 共 通 性 的 存 取 档 案 方 式 , 於 是 就 有 此 「 匿 名 」 的 产 生 。 一 般 使 用 者 只 要 以 使 用 者 代 号 为 “ anonymous” 的 身 分 , 并 以 自 己 的 E-Mail作 为 登 录 的 密 码 登 录 该 系 统 , 使 用 者 就 可 存 取 位 於 特 定 目 录 系 统 下 的 档 案 , 而 这 也 正 是 公 益 软 体 ( Public Domain) 的 大 本 营 。

  再 来 把 FTP Server依 架 构 来 划 分 也 可 分 为 两 个 部 份 。

1、 FTP Server执 行 档 :
在 Linux系 统 里 , /usr/sbin/in.ftpd正 是 FTP Server的 执 行 档 所 在 。 “ in.ftpd” 所 负 责 的 工 作 除 了 网 路 传 输 的 指 令 处 理 之 外 也 首 先 处 理 了 使 用 者 的 身 分 确 认 工 作 , “ in.ftpd” 会 使 用 /etc/passwd作 为 使 用 者 身 分 确 认 的 根 据 。 在 确 认 身 分 後 , 才 进 一 步 的 核 准 使 用 者 存 取 档 案 。

  要 确 定 目 前 系 统 所 使 用 的 FTP Server 执 行 档 正 确 所 在 , 可 以 检 查 /etc/inetd.conf 中 关 於 FTP的 设 定 。

图 一 etc/inetd.conf关 於 FTP Server程 式 执 行 设 定

2、 档 案 系 统 ( File System) :
既 然 是 档 案 传 输 , 那 麽 就 要 有 摆 放 档 案 的 空 间 , 因 此 FTP Server的 另 一 个 部 份 就 是 档 案 系 统 。 如 果 是 一 般 的 使 用 者 ( 也 就 是 有 使 用 者 帐 号 者 ) 使 用 FTP连 线 登 录 後 , FTP Server会 直 接 将 档 案 系 统 指 到 该 使 用 者 的 所 属 目 录 去 , 如 果 使 用 者 是 以 “ ftp” 或 是 “ anonymous” 的 身 分 登 录 系 统 , 则 会 根 据 /etc/passwd中 定 义 " ftp″ 这 个 使 用 者 的 所 属 目 录 为 何 。 在 Linux大 都 指 向 /home/ftp 这 个 目 录 中 。 而 对 於 该 目 录 档 案 的 存 取 权 限 就 端 看 这 个 使 用 者 的 权 限 是 否 符 合 该 档 案 系 统 的 定 义 了 。

  简 单 而 笼 统 的 介 绍 过 FTP Server之 後 , 接 下 来 我 们 开 始 进 入 真 正 的 主 题 「 如 何 设 定 FTP Server」 。 而 我 们 将 把 重 点 放 在 如 何 设 定 与 管 理 一 个 “ Anonymous” FTP Server。

关 於 WU-FTP

  如 果 今 天 架 设 FTP Server的 需 求 只 是 提 供 伺 服 器 上 的 使 用 者 作 档 案 传 输 之 用 那 麽 使 用 原 先 标 准 的 " ftpd″ 伺 服 程 式 就 应 该 足 够 应 付 了 , 但 是 如 果 是 要 提 供 作 为 “ Anonymous FTP Server” 的 服 务 时 , 建 议 各 位 不 妨 使 用 Washington University版 的 “ ftpd” ( 通 称 WU-FTP) , 因 为 它 提 供 了 比 原 先 " ftpd″ 更 多 的 选 择 性 功 能 , 利 於 伺 服 器 管 理 上 不 同 的 需 求 。 目 前 常 见 的 版 本 是 " 2.4.2″ Slackware 3.0、 RedHat 2.x/3.0都 已 经 将 它 定 为 系 统 的 FTP Server伺 服 程 式 。

WU-FTP有 那 些 主 要 的 特 色 呢 ?

  1. 可 以 依 据 需 求 将 不 同 网 域 或 主 机 作 分 类 , 然 後 在 给 予 不 同 的 存 取 档 案 权 限 设 定 , 甚 至 可 以 设 定 可 存 取 的 时 段 , 达 到 控 管 的 目 地 。
  2. 提 供 使 用 者 在 下 载 档 案 的 同 时 , 对 所 传 输 的 档 案 自 动 压 缩 、 解 压 缩 。
  3. 可 记 录 使 用 者 档 案 上 传 、 下 传 的 情 形 。
  4. 可 以 暂 时 将 FTP Server进 行 「 关 机 」 的 动 作 , 以 便 於 系 统 维 护 。
  5. 有 部 份 显 示 讯 息 的 功 能 , 让 使 用 者 在 适 当 时 机 接 收 系 统 讯 息 。
  6. 可 以 设 定 系 统 最 多 连 线 人 数 的 限 制 , 以 符 合 系 统 运 作 的 效 率 。

  林 林 总 总 下 来 WU-FTP的 确 多 了 许 多 不 错 的 功 能 , 这 相 当 有 利 於 传 输 量 较 大 的 FTP Server管 理 需 求 。 也 因 此 , 下 面 开 始 就 来 我 们 就 一 步 步 说 明 WU-FTP的 设 定 方 式 , 让 读 者 可 以 妥 善 安 排 自 己 的 FTP Server成 为 一 个 具 有 水 准 的 伺 服 器 。

WU-FTP系 统 设 定 档

  FTP Server的 系 统 管 理 者 要 使 用 WU-FTP 所 提 供 许 多 控 制 上 的 设 定 选 择 , 就 需 要 透 过 设 定 主 要 的 数 个 系 统 参 数 档 而 来 ( 分 别 是 /etc/ftpaccess、 /etc/ftpconversions、 /etc/ftphosts、 /etc/ftpusers) 。

1、 /etc/ftpconversions:
主 要 定 义 使 用 者 在 下 载 同 时 进 行 , 档 案 压 缩 、 解 压 缩 的 处 理 方 式 。

2、 /etc/ftpaccess:
这 是 WU-FTP最 主 要 的 设 定 档 , 在 这 个 系 统 参 数 档 案 里 可 以 进 行 多 项 关 於 使 用 权 限 上 的 设 定 , 以 及 与 讯 息 相 关 的 档 案 名 称 与 路 径 。

3、 /etc/ftphosts:
可 以 指 定 哪 些 网 路 位 址 的 机 器 不 可 使 用 哪 个 使 用 者 身 分 与 本 伺 服 器 连 线 。

4、 /etc/ftpusers:
性 质 与 /etc/ftpusers相 似 , 这 档 案 里 可 以 限 制 哪 些 使 用 者 不 可 以 执 行 FTP进 行 传 档 。 ( 例 如 : root、 nobody)

/etc/ftpconversions

  WU-FTP提 供 使 用 者 传 输 的 同 时 , 直 接 将 正 在 传 输 的 档 案 经 过 适 当 的 处 理 ( 例 如 : 压 缩 、 解 压 缩 、 TAR等 等 ) , 这 样 子 就 不 必 担 心 使 用 者 没 有 这 些 档 案 的 解 压 缩 、 压 缩 程 式 而 伤 脑 筋 。 而 处 理 档 案 的 规 则 就 定 义 在 /etc/ftpconversions中 。 WU-FTP软 体 已 经 预 先 设 定 好 常 用 的 /etc/ftpconversions内 容 , 所 以 如 何 设 定 内 容 倒 也 不 需 多 作 改 变 。


: .Z: : : /bin/compress -d -c %s: T_REG|T_ASCII: O_UNCOMPRESS: UNCOMPRESS

:    :  : .Z: /bin/compress -c %s: T_REG: O_COMPRESS: COMPRESS

: .gz:  :   : /bin/gzip -cd %s: T_REG|T_ASCII: O_UNCOMPRESS: GUNZIP

:    :  : .gz: /bin/gzip -9c %s: T_REG: O_COMPRESS: GZIP

:    :  : .tar: /bin/tar -cf - %s: T_REG|T_DIR: O_TAR: TAR

:    :  : .tar.gz: /bin/tar -czf - %s: T_REG|T_DIR: O_COMPRESS|O_TAR: TAR+GZIP

  究 竟 WU-FTP是 如 何 使 用 /etc/ftpconversions的 , 我 们 用 些 例 子 说 明 一 下 :

  1. 当 使 用 者 执 行 “ get README.gz” 时 , WU-FTP会 先 行 寻 找 档 名 为 “ README.gz” 的 档 案 准 备 传 输 , 这 时 若 没 找 到 该 档 案 则 会 依 据 ftpconversions中 的 定 义 寻 找 " README″ 的 档 案 , 如 果 档 案 存 在 就 将 " README″ 依 据 所 设 定 的 执 行 " /bin/gzip -cd...″ 来 进 行 压 缩 , 然 後 传 档 。

    图 二 在 下 载 档 案 时 , 由 WU-FTP自 动 压 缩

    图 叁 传 输 时 , 同 时 将 档 案 解 压 缩

  2. 与 前 者 大 致 相 同 原 理 , 当 使 用 者 执 行 “ get README” 时 , WU-FTP若 没 找 到 该 档 案 则 会 依 据 ftpconversions中 的 定 义 依 序 寻 找 README.Z、 README.gz、 README.tar、 README.tar.gz的 档 案 , 哪 一 个 档 案 先 找 到 就 将 " README.xxx″ 依 据 所 设 定 的 处 理 执 行 然 後 传 档 。

  档 案 中 所 定 义 的 /bin/gzip执 行 档 , 并 非 位 於 Linux系 统 根 目 录 下 , 而 是 指 到 /home/ftp/bin/gzip这 个 档 案 , 希 望 读 者 能 了 解 这 点 , 因 为 接 下 来 有 些 档 案 名 称 路 径 也 是 相 对 於 FTP Server的 档 案 系 统 , 而 非 原 有 的 Linux档 案 系 统 。

/etc/ftpusers、 /etc/ftphosts

  在 某 些 时 候 基 於 安 全 上 的 考 量 , 系 统 管 理 者 必 需 限 制 某 些 特 定 人 士 或 机 器 不 得 进 入 此 FTP Server, 对 於 这 些 将 被 限 制 的 「 访 客 」 名 单 就 定 义 於 /etc/ftpusers、 /etc/ftphosts 这 些 档 案 中 。 下 面 是 【 RedHat Linux】 系 统 的 /etc/ftpusers预 设 内 容 。

图 四 受 限 制 的 使 用 者 代 号

  根 据 这 个 定 义 root、 news、 nobody.. 等 使 用 者 , 是 不 可 以 使 用 FTP由 此 伺 服 器 进 行 档 案 传 输 的 行 为 , 或 许 读 者 会 有 点 疑 惑 , 为 什 麽 " root″ 这 位 超 级 使 用 者 不 可 以 使 用 呢 ? 理 由 是 , 这 个 使 用 者 权 限 太 大 了 , 哪 天 不 小 心 被 人 偷 到 了 密 码 , 那 这 个 伺 服 器 上 的 档 案 都 可 能 不 保 , 实 在 有 点 危 险 , 所 以 把 他 列 为 黑 名 单 中 比 较 妥 当 些 。

图 五 使 用 者 无 权 使 用 FTP

/etc/ftpaccess

  先 前 我 们 在 介 绍 时 , 说 了 许 多 关 於 WU-FTP 所 提 供 的 功 能 , 而 这 些 大 部 分 的 功 能 设 定 就 都 放 在 /etc/ftpaccess里 面 , 因 为 这 里 的 设 定 实 在 非 常 多 样 , 在 篇 幅 的 限 制 下 , 配 合 着 /etc/ftpaccess范 例 图 形 中 的 标 示 , 重 点 说 明 主 要 设 定 的 意 义 与 方 式 。

图 六 /etc/ftpaccess功 能 设 定

1、 限 定 允 许 使 用 者 错 误 登 录 的 次 数
loginfails 2表 示 可 以 有 两 次 输 入 密 码 错 误 的 机 会 , 如 果 两 次 都 错 , FTP Server会 自 动 切 断 这 个 连 线 通 道 。

2、 设 定 使 用 者 类 别
WU-FTP的 使 用 者 种 类 有 叁 种 :

real: 有 实 际 上 合 法 帐 号 的 使 用 者 。
anonymous: 匿 名 登 录 此 伺 服 器 的 使 用 者 。
guest: 另 行 定 义 某 些 使 用 群 组 的 使 用 者 。

  有 了 这 叁 种 使 用 者 种 类 後 , 在 ftpaccess 设 定 里 就 可 以 定 义 不 同 使 用 者 种 类 可 能 有 不 同 的 控 制 。 但 是 , 如 果 这 叁 个 基 本 分 类 还 不 够 时 , 那 麽 我 们 可 以 利 用 class这 个 控 制 命 令 来 自 行 定 义 使 用 者 种 类 。

class classname type... address......
class all real, guest, anonymous*定 义 种 类 " all″ , 表 示 任 何 一 台 机 器 上 的 使 用 者 。

3、 设 定 非 法 使 用 者 连 线 时 所 显 示 的 讯 息
deny这 个 设 定 可 以 有 两 个 作 用 :
(1)设 定 哪 个 特 定 网 路 机 器 不 允 许 连 线 。
(2)当 该 网 路 机 器 使 用 者 尝 试 连 线 时 , 可 以 指 定 显 示 哪 个 讯 息 档 。

  这 样 一 来 , 该 使 用 者 也 不 会 一 头 雾 水 , 被 拒 绝 的 不 知 所 以 然 来 。
deny*.gov.ch/etc/ftpmsgs/msg.denied
当 来 自 *.gov.ch的 使 用 者 连 线 时 , 系 统 显 示 ” msg.denied:来 告 知 使 用 者 。

  而 deny还 有 个 选 项 “ ! nameserved” ( 如 范 例 ) , 它 的 用 意 是 在 要 求 与 此 伺 服 器 连 线 的 使 用 者 主 机 一 定 是 可 以 经 由 网 路 名 称 伺 服 器 ( DNS) 查 询 的 到 的 主 机 。 如 果 加 上 这 个 选 项 , 那 麽 像 国 内 一 般 HiNet、 SeedNet 的 拨 接 用 户 就 无 法 与 此 伺 服 器 连 线 , 因 为 这 些 拨 接 用 户 的 网 路 位 址 并 没 有 建 立 於 名 称 伺 服 器 中 。

4、 设 定 同 时 最 多 允 许 多 少 人 连 线
limit可 以 设 定 哪 些 类 别 的 使 用 , 在 哪 些 时 段 , 最 多 可 同 时 几 个 人 连 线 。
limit all 20 Any/etc/msgs/msg.toomany
使 用 者 类 别 " all″ , 在 任 何 时 段 最 多 可 以 有 20个 使 用 者 如 果 超 过 时 , 後 来 要 连 线 的 使 用 者 将 会 被 拒 绝 , 并 且 系 统 会 显 示 “ msg.toomany” 的 内 容 给 该 使 用 者 。

5、 讯 息 显 示 的 设 定
Wu_FTP可 以 让 使 用 者 在 连 线 时 、 登 录 时 、 更 换 目 录 时 分 别 显 示 不 同 的 讯 息 。 而 这 些 显 示 讯 息 的 来 源 则 分 别 透 过 banner、 message、 readme、 shutdown来 指 定 。
banner/etc/ftp.banner
设 定 当 使 用 者 刚 开 始 连 上 本 伺 服 器 时 FTP Server显 示 的 讯 息 , 通 常 是 本 主 机 的 介 绍 。

  banner所 指 定 的 档 案 名 称 并 不 是 相 对 於 FTP Server的 档 案 系 统 , 而 是 位 於 Linux档 案 系 统 , 这 点 与 其 它 的 有 所 差 异 。 这 个 范 例 的 原 始 档 案 如 下 :

图 七 /etc/ftp.banner原 始 档 案

  在 这 个 banner讯 息 档 中 , 可 以 包 含 一 些 巨 集 变 数 , 这 些 变 数 将 会 在 显 示 时 由 WU-FTP以 适 当 的 字 串 取 代 。 在 这 里 列 举 常 用 的 变 数 :


%E      : FTP Server管 理 者 的 E-Mail信 箱 。 

%L      : 主 机 名 称 。 

%M      : 最 多 允 许 多 少 使 用 者 连 线 。 

%N      : 目 前 有 几 个 使 用 者 连 线 。 

%T      : 时 间 。 

messages/welcome.msg login
当 使 用 者 成 功 登 录 此 伺 服 器 後 , WU-FTP显 示 " welcome.msg″ 作 为 欢 迎 的 讯 息 。

图 八 /welcome.msg讯 息

messages.message cwd=*
当 使 用 者 在 更 改 目 录 时 , WU-FTP会 显 示 该 目 录 下 的 " .message″ 作 为 辅 助 说 明 。

6、 传 档 即 时 压 缩 、 解 压 缩 的 使 用 设 定
虽 然 WU-FTP提 供 传 档 前 做 压 缩 、 解 压 缩 的 处 理 , 不 过 仍 需 要 在 此 设 定 哪 些 使 用 者 可 以 使 用 这 样 的 功 能 。

7、 anonymous使 用 者 密 码 的 检 查 原 则
使 用 者 可 以 以 匿 名 者 ( anonymous) 的 身 分 登 录 FTP Server, 密 码 的 部 份 一 般 是 输 入 使 用 者 本 身 的 E-Mail 地 址 , 但 是 因 为 我 们 根 本 无 法 确 定 使 用 者 所 输 入 的 信 箱 是 否 有 效 , 在 无 从 考 察 的 情 况 下 , WU-FTP提 供 一 个 选 项 , 由 WU-FTP检 查 使 用 者 所 输 入 的 密 码 是 否 真 的 像 是 个 E-Mail的 格 式 ( user@hostname) , 然 後 对 於 不 太 像 的 使 用 者 是 给 予 一 个 「 警 告 」 的 讯 息 , 或 是 强 制 它 要 输 入 正 确 格 式 的 密 码 。
passwd-check rfc822 warn
如 果 密 码 不 是 E-Mail格 式 时 , 显 示 警 告 讯 息 , 仍 可 登 录 。
passwd-check rfc822 enforce
如 果 密 码 不 是 E-Mail格 式 时 , 请 使 用 者 重 新 输 入 。

图 九 Check Password

8、 设 定 系 统 使 用 记 录 的 内 容 项 目
WU-FTP会 将 指 定 的 记 录 项 目 写 至 位 於 /var/adm或 /var/log目 录 中 的 " xferlog″ 档 案 中 。

9、 指 定 FTP Server关 机 的 讯 息 档
如 果 所 指 定 的 档 案 存 在 , 则 当 使 用 者 要 与 本 伺 服 器 连 线 时 , 会 得 到 系 统 关 机 的 讯 息 , 而 这 讯 息 就 定 义 於 所 指 定 的 档 案 。 这 个 档 案 名 称 目 录 也 是 相 对 於 Linux档 案 系 统 而 非 FTP Server档 案 系 统 。 如 果 要 让 FTP Server恢 复 正 常 运 作 , 则 只 要 将 指 定 的 讯 息 档 案 删 除 即 可 。 而 如 何 让 FTP Server关 机 , WU-FTP 也 另 外 提 供 一 个 小 程 式 让 管 理 者 「 关 机 」 , 我 们 稍 後 会 提 及 。

10、定 义 使 用 权 限
这 些 都 是 在 定 义 使 用 者 对 於 伺 服 器 上 的 档 案 存 取 操 作 的 权 限 。

11、 定 义 FTP Server系 统 管 理 者 的 E-Mail

WU-FTP工 具 小 程 式

WU-FTP除 了 提 供 FTP Server伺 服 程 式 之 外 , 同 时 也 附 上 了 几 个 工 具 程 式 让 系 统 管 理 者 检 视 目 前 FTP Server的 运 作 情 形 。

  1. ftpcount: 显 示 目 前 FTP Server使 用 者 个 数 。
  2. ftpwho: 显 示 目 前 FTP Server使 用 者 连 线 情 形 , 类 似 ftpcount, 但 比 较 详 细 些 。

    图 十 ftpcount/ftpwho讯 息

  3. ftpshut: 对 FTP Server进 行 关 机 动 作 。
    ftpshut now“ Shutdown the FTP Server..”

  这 样 子 , ftpshut会 根 据 ftpaccess中 的 " shutdown″ 设 定 , 将 " Shutdown the..″ 写 入 该 档 案 中 , 然 後 接 下 来 要 连 线 的 使 用 者 就 会 因 为 这 个 档 案 的 存 在 , 而 无 法 登 录 。 如 果 要 恢 复 运 作 , 只 要 把 该 档 案 删 除 就 好 了 !

结 语

  一 路 讲 下 来 希 望 能 给 各 位 一 些 足 够 的 讯 息 来 管 理 自 己 的 FTP Server, 不 论 您 使 用 的 是 Slackware、 RedHat、 Linux-FT等 等 各 个 不 同 公 司 或 团 体 整 理 的 Linux。 基 本 上 FTP Server大 都 已 经 万 事 具 备 , 所 以 如 果 没 有 特 别 需 求 , 您 可 能 都 不 会 改 到 这 里 所 讲 的 内 容 , 但 无 论 如 何 , 了 解 这 些 对 於 管 理 一 个 FTP Server绝 对 有 帮 助 。 最 後 , 感 谢 读 者 的 支 持 , 如 果 文 中 有 疏 失 的 地 方 , 欢 迎 告 知 , 祝 各 位 同 好 经 营 Linux愉 快 !