About The FTP
一.FTP
简介
FTP是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一。尽管World Wide Web(WWW)已经替代了FTP的大多数功能,FTP仍然是通过Internet把文件从客户机复制到服务器上的一种途径。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。原来的FTP软件多是命令行操作,有了像CUTEFTP这样的图形界面软件,使用FTP传输变得方便易学。主要使用它进行“上载”。即向服务器传输文件。由于FTP协议的传输速度比较快,我们在制作诸如“软件下载”这类网站时喜欢用FTP来实现,同时我们这种服务面向大众,不需要身份认证,即“匿名FTP服务器”。[1]
FTP是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登陆进程。
FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话会被防火墙断开,传输会产生一些错误。
工作原理
文件传输协议(FTP)是TCP/IP提供的标准机
制。用来将文件从一个主机复制到另一个主机。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进行访问
上传数据文件,验证主动模式下的数据传输端口是20
将传输到20端口的数据包丢弃,看主动模式下是否还能正常传输数据
实验证明将20端口关闭后,主动模式下无法正常传输数据
验证pureftpd被动模式下的传输端口
首先将pureftpd被动模式下的数据传输端口设置为30000到30010,重新启动pureftpd服务
用flashfxp登录ftp(通过被动模式pasv登录),属性->参数选择->数据连接模式(pasv)
通过flashfxp传输数据,查看数据传输端口是否在设定的值的范围内(30000:30010)
强制一个IP地址使用被动响应 (为什么linux命令pftp无法登录ftp,windows是用工具可以登录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