About The FTP

一.FTP

简介

FTPTCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一。尽管World Wide Web(WWW)已经替代了FTP的大多数功能,FTP仍然是通过Internet把文件从客户机复制到服务器上的一种途径。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。原来的FTP软件多是命令行操作,有了像CUTEFTP这样的图形界面软件,使用FTP传输变得方便易学。主要使用它进行“上载”。即向服务器传输文件。由于FTP协议的传输速度比较快,我们在制作诸如“软件下载”这类网站时喜欢用FTP来实现,同时我们这种服务面向大众,不需要身份认证,即“匿名FTP服务器”。[1]

FTP应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIMEUnicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登陆进程。

 About The FTP

FTP服务一般运行在2021两个端口。端口20用于在客户端服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话会被防火墙断开,传输会产生一些错误。

工作原理

文件传输协议(FTP)是TCP/IP提供的标准机

 About The FTP

制。用来将文件从一个主机复制到另一个主机。FTP使用TCP的服务。

主要功能

提供文件的共享(计算机程序 数据); 支持间接使用远程计算机; 使用户不因各类主机文件存储器系统的差异而受影响; 可靠且有效的传输数据。

FTP ,尽管可以直接被终端用户使用,但其应用主要还是通过程序实现。

FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。

二.FTP的主被动模式

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的 XXXX端口发送连接请求,建立一条数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口 发送连接请求,建立一条数据链路来传送数据。 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。而FTP的复杂性就在于此。

三.Ubuntu下pureftpd的搭建

利用apt-get搭建pureftpd

首先,安装pureftp

1 Sudo apt-get install pure-ftpd

第二步,用#号注释掉/etc/inetd.conf中任何包含ftp的行。

第三步,将/etc/default/pure-ftpd-common中的STANDALONE_OR_INETD=inetd改为STANDALONE_OR_INETD=standalone。

第四步,为pureftp添加用户。其中alice_ftp是登录ftp的用户名,alice_unix是对应的linux系统中的用户名,/home/alice是登录ftp后的根目录。

1 Sudo pure-pw useradd alice_ftp -u alice_unix -d  /home/alice

第五步,创建pureftp用户数据库。

1 sudo pure-pw mkdb

第六步,创建一些符号链接。

1 sudoln-s/etc/pure-ftpd/pureftpd.passwd/etc/pureftpd.passwd
2 
3 sudoln-s/etc/pure-ftpd/pureftpd.pdb/etc/pureftpd.pdb
4 
5 sudoln-s/etc/pure-ftpd/conf/PureDB/etc/pure-ftpd/auth/PureDB

第七步,更改一些配置文件。

 1 cd/etc/pure-ftpd/conf
 2 
 3 su
 4 
 5 echo"*,21"> Bind
 6 
 7 echo"UTF-8"> FSCharset
 8 
 9 echo"1000"> MinUID
10 
11 echo"yes"> NoAnonymous
12 
13 echo"no"> PAMAuthentication
14 
15 echo"/etc/pure-ftpd/pureftpd.pdb"> PureDB
16 
17 echo"no"> UnixAuthentication

这里有一点需要说明,如果希望我们的ftp链接是明文的话,/etc/pure-ftpd/conf下的TLS文件的内容应该为0。否则,如果我们希望我们的ftp链接建立在tls之上,我们可以把TLS文件的内容设置为2或者3。其中,2代表控制链接加密但数据链接不加密;3代表所有链接都加密。另外,如果决定要进行加密,我们还应该执行下面的命令生成证书。

1 sudo mkdir -p/etc/ssl/private
2 
3 openssl req -x509 -nodes -newkey rsa:1024 -days 3650 -keyout/etc/ssl/private/pure-ftpd.pem -out/etc/ssl/private/pure-ftpd.pem
4 
5 chmod600/etc/ssl/private/pure-ftpd.pem

最后,重启pureftp

1 sudo/etc/init.d/pure-ftpdrestart

至此,一个简单而又安全的ftp服务器就搭建完成了。pureftp还有许多高级功能,例如限速、限流量、结合mysql进行用户管理等等,有兴趣的朋友可以参看pureftp的文档

通过编译源码搭建pureftpd

 1 * Step 1 (optional but recommended):
 2 
 3 Create a specific, unprivileged user and group called _pure-ftpd, without any
 4 
 5 valid shell. Don't use this for anything else, including FTP virtual users.
 6 
 7 groupadd _pure-ftpd
 8 
 9 useradd -g _pure-ftpd -d /var/empty -s /etc _pure-ftpd
10 
11 If having a user whose name begins with an underscore is a no-go for you,
12 
13 you can also call it pure-ftpd, without the underscore.
14 
15 * Step 2:
16 
17 If you have Cdialog or Xdialog installed on your system, try the following
18 
19 command to build and install Pure-FTPd:
20 
21 make -f Makefile.gui
22 
23 If you don't have Cdialog or if you prefer the conventional way, here it is:
24 
25 ./configure
26 
27 make install-strip
28 
29 Et voila! The software is now installed in /usr/local/sbin/pure-ftpd
30 
31 * Step 3:
32 
33 To launch the server, just type the following command:
34 
35  
36 
37 /usr/local/sbin/pure-ftpd &
38 
39 If you installed a binary package (RPM, SLP, Debian), maybe use the
40 
41 following command instead:
42 
43 /usr/sbin/pure-ftpd &
44 
45 Your server is ready. Just type 'ftp localhost' to test it. If you want to
46 
47 automatically run the server when the system boots, add the previous command
48 
49 to /etc/rc.d/rc.local or /etc/rc.d/boot.local . Don't forget the '&' sign.
50 
51 Note 1:
52 
53 To compile under Irix, you have to issue this before typing ./configure:
54 
55 export CC=cc
56 
57 export CFLAGS=-I/usr/freeware/include
58 
59 export LDFLAGS=-L/usr/freeware/lib32
60 
61 To compile under Solaris, use GNU Make, not Solaris make. Then do:
62 
63 export PATH=/usr/ccs/bin:$PATH
64 
65 export MAKE=gmake
66 
67 Nota 2:
68 
69 To deinstall Pure-FTPd (no, do you really want to do this?), use:
70 
71 ./configure
72 
73 make uninstall

相关资料可查看下面站点:

http://www.pureftpd.org/project/pure-ftpd/doc

http://wiki.ubuntu.org.cn/Pure-ftpd

四.Pureftpd常见问题分析:

验证pureftpd主动模式下的传输端口

首先,通过windows下的doc命令对ftp进行访问

 About The FTP

上传数据文件,验证主动模式下的数据传输端口是20

 About The FTP

 About The FTP

将传输到20端口的数据包丢弃,看主动模式下是否还能正常传输数据

 About The FTP

 About The FTP

实验证明将20端口关闭后,主动模式下无法正常传输数据

验证pureftpd被动模式下的传输端口

首先将pureftpd被动模式下的数据传输端口设置为3000030010,重新启动pureftpd服务

 About The FTP

用flashfxp登录ftp(通过被动模式pasv登录),属性->参数选择->数据连接模式(pasv

 About The FTP

 About The FTP

通过flashfxp传输数据,查看数据传输端口是否在设定的值的范围内(3000030010

 About The FTP

 About The FTP

强制一个IP地址使用被动响应  (为什么linux命令pftp无法登录ftp,windows是用工具可以登录ftp)

从传输的数据及监听的端口进行分析

 About The FTPAbout The FTP

结论:都是强制一个IP地址使用被动响应 惹的祸

可以通过设置该参数解决问题

1 # 强制一个IP地址使用被动响应( PASV/EPSV/SPSV replies)。 - for NAT.
2 
3 # Symbolic host names are also accepted for gateways with dynamic IP
4 
5 # addresses.
6 
7  
8 
9 # ForcePassiveIP 192.168.0.1(该参数是配置被动模式下服务器传输数据的ip地址)

转载于:https://www.cnblogs.com/sky-of-chuanqingchen/p/pureftpd.html