FREEBSD6.0 架设FTP 服务器
ftp (file transfer protocol) 是常用的网络协议,主要的功能是用来传输档案,我们时常从 ftp 站台下载档案。本章将介绍如何使用 freebsd 架设 ftp 服务器,并说明各种 ftp 服务器的管理技巧。本章除了 freebsd 内附的 ftp 服务器软件外,并将介绍笔者开发的 smbftpd。读完本章后,您将进一步了解下列主题:
15.1 ftp 概论
ftp 是一个历史悠久的网络通讯协议,和大多数的网络协议一样,它采用 client/server 架构,各地的使用者可以经由网络连到服务器上传或下载档案。ftp 协议比较特别的地方在于它在使用时必须建立二个联机:一个用来传输指令、一个用来传输档案。
图 15-1
当我们使用 ftp 软件连到 ftp 服务器时,客户端会先连到服务器的连接埠 21,并建立一条「控制联机」(control stream)。接下来,您会输入账号、密码等指令,这些指令及 ftp 的响应都是使用都是使用「控制联机」。当您要下载档案时,或者是执行 ls 以列出目录中的档案时,档案或目录列表的下载是经另一个联机「数据联机」(data stream)。「数据联机」和「控制联机」不同的是数据联机所传输的数据比较大,而控制联机只是用来传输指令及简单的响应。
基本上,一个完整的 ftp 联机建立过程为:
- 客户端打开自已机器大于 1024 的连接埠,并连到服务器的连接埠 21,建立「控制联机」。
- 客户端开始对服务器下指令,告诉服务器客户端用来传输档案的连接埠为何。
- 服务器从连接埠 20 连到客户端所开放的埠号 (大于 1024),以建立「数据联机」。
上述这种联机建立的方式是由服务器主动建立「数据联机」,我们称之为「主动模式」(active mode)。基本上主动模式的运作在没有防火墙或 nat 的情形下没有什么问题,但若客户端有防火墙,则可能会无法建立联机。
图 15-2
因为「控制联机」是由客户端主动连到服务器,所以在客户端有防火墙或 nat 时,还是可以连到服务器。接下来在建立「数据联机」时,客户端会从「控制联机」中告诉服务器它的 ip 及埠号,请服务器连过来。但是由于客户端有防火墙,所以服务器要连到客户端时会失败,而无法建立联机。
基本上,如果客户端使用的是 freebsd 的 nat 不会有这种问题,freebsd 会自动做转换,但若是使用其它的防火墙就不一定可以支持 ftp 的 active mode。
何谓 passive mode
要解决 ftp active mode 的问题,可以在联机时改用「被动模式」(passive mode)。所谓的被动模式就是由服务器打开一个连接埠,被动地等客户端连过来建立「数据联机」。被动模式的联机建立过程为:
- 客户端打开自已机器大于 1024 的连接埠,并连到服务器的连接埠 21,建立「控制联机」。
- 客户端开始对服务器下指令,告诉服务器进入「被动模式」。
- 服务器打开一个大于 1024 的连接埠,等待客户端的联机。
- 客伺端打开自已机器大于 1024 的连接埠,并连到服务器以建立「数据联机」。
图 15-3
由于控制联机及数据联机都是由客户端主动连过去服务器,如此即可避开防火墙及 nat 的问题。我们来看看如何判断联机失败是否因为主动模式的原因:
# ftp ftp.freebsd.org trying 204.152.184.73... connected to ftp.freebsd.org (204.152.184.73). 220 welcome to freebsd.isc.org. name (ftp.freebsd.org:alex): anonymous 331 please specify the password. password: 230- 230-you have reached the freebsd.isc.org ftp server, serving the 230-full freebsd ftp archive over ipv4 (204.152.184.73) and ipv6 230-(2001:4f8:0:2::e) networks. this server is also known as: 230- 230- ftp.freebsd.org 230- ftp4.freebsd.org 230- ftp4.us.freebsd.org 230- 230-this server is operated by internet systems consortium (isc), 230-on behalf of the freebsd project, with hardware donations from 230-apple, intel and iron systems. 230- 230-questions about this service can be sent to: freebsd@isc.org. 230- 230 login successful. remote system type is unix. using binary mode to transfer files. ftp> ls ^c ftp> passive passive mode on ftp> ls 227 entering passive mode (204,152,184,73,54,200) 150 here comes the directory listing. drwxrwxr-x 3 0 0 512 apr 17 2003 pub 226 directory send ok. ftp>
当您登入一台 ftp 服务器后,如果您输入 ls,却等了很久都没有响应,您可以输入 <ctrl>+c 以中断命令。接着输入 passive 以进入被动模式,再打 ls 就可以看到目录内容,则无法联机的问题一定是主动模式的原故。
15.2 设定 ftp 服务器
freebsd 内建有 ftp 服务器的功能,如果您要使用内建的 ftpd,我们不需要特别进行任何安装的动作,只要做好设定即可。本小节中,我们将介绍如何设定启动 ftp 服务器的功能,并进行一些基本的配置。
15.2.1 启动 ftp 服务器