FTP(文件传输控制协议),可以使文件通过网络从一台主机传送到同一网络的另一台主机上,而不受计算机类型和操作系统类型的限制。只要通信双方都支持FTP协议,就可以通过FTP方便地传送文件。

FTP的工作原理

212009563.jpg

FTP服务的具体工作过程如下。

FTP客户端发出请求时,系统将动态分配一个端口(通常是1024以上,比如1351)。

FTP服务器在端口21侦听到该请求,则在FTP客户端的端口1351FTP服务器的端口21之间建立起一个FTP会话连接。

当需要传输数据时,FTP客户端再动态打开一个连接到FTP服务器的端口20的第2个端口(如1352),这样就可在这两个端口之间进行数据的传输。当数据传输完毕后,这两个端口会自动关闭。

FTP客户端断开与FTP服务器的连接时,客户端上动态分配的端口将自动释放掉。

ftp的特殊性部仅仅表现在需要使用两个端口,而且还表现在其工作的两种模式:主动模式和被动模式

在主动模式中,FTP客户端随机开启一个大于1024的端口X向服务器的21号端口发起控制连接请求,然后开放X+1号端口进行监听;FTP服务器接受请求并建立控制连接会话。如果客户端在控制会话中发送数据连接请求,那么服务器在接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口X+1进行数据传输。

在被动模式中,控制连接和数据传输连接都是由FTP客户端发起的。首先FTP客户端随机开启一个大于1024的端口X向服务器的21端口发起连接,同时会开启X+1端口,然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口Y进行监听,然后用PORTY命令通知客户端,自己的数据端口是Y。客户端收到命令后,会通过X+1号端口连接服务器的端口Y,然后在两个端口之间进行数据传输。这种方式便于数据穿越防火墙,可以使防火墙知道用于数据连接的端口号Y,而使数据连接得以建立。

简单的说这两种模式的区别在于数据传输连接的发起方不同。

pureftp是这篇文章的重点:

pureftpd的基本原理简单的说就是使用php页面来管理mysql数据库,在数据库中添加虚拟账号,当ftp客户端访问ftp服务器时,将mysql数据库中的虚拟账号映射为本地的一个处于锁定状态的账号进而登录ftp服务器。这样不仅实现了ftp验证身份登录而且提高了系统的安全性,即使ftp帐号丢失,对于服务器影响也不大。

下面整个pureftp服务的实现是基于lamp环境,lamp环境的实现参考《lamp环境搭建以及应用--以rpm方式实现

pureftp还需要mysql-devel的支持

205646689.jpg

pureftp的安装较为繁琐,在安装之前先捋顺一下思路:

安装pureftpd---à处理pure-ftpWEB管理页面---à新建存放虚拟帐号的数据库---à处理pureftp的管理页面与数据库结合---à处理pureftp访问mysql

1)安装pureftpd

205654347.jpg

以上四个为需要用到的两个源码包,一个创建数据库的文件和pureftp连接mysql的配置文件

tar-zxvfpure-ftpd-1.0.36.tar.gz-C/usr/local/src/

205700117.jpg

205711701.jpg

205727129.jpg

213514922.jpg

205743816.jpg

205759885.jpg

205805705.jpg

205812773.jpg

205815285.jpg

205824958.jpg

205845711.jpg

205851800.jpg

205912952.jpg

205924905.jpg

205932554.jpg

205935912.jpg

205946356.jpg

2)处理pure-ftpWEB管理页面

210003828.jpg

210042236.jpg

3)新建存放虚拟帐号的数据库

210051374.jpg

210103440.jpg

210117753.jpg

210133846.jpg

210143602.jpg

210152489.jpg

210219566.jpg

4)处理pureftp的管理页面与数据库结合

210235593.jpg

210244579.jpg

5)处理pureftp访问mysql

210301431.jpg

210313736.jpg

6)验证

211118607.jpg

211132633.jpg

211149803.jpg

211158983.jpg

211222160.jpg

211233402.jpg

211252269.jpg

211306684.jpg

211335202.jpg