FTP简单介绍
FTP是TCP/IP协议组中的协议之一,即文件传输协议,工作在TCP模型的第四层(应用层),使用TCP传输使用交互式的访问,允许客户端指定文件类型和格式,一般为ASCII码和文本格式。
FTP连接模式
FTP有两个端口,一个端口是作为控制连接端口,即21号端口,该端口用于发送指令给服务器以及等待服务器相响应;两一个端口是数据传输端口,端口号为20,用来建立数据传输通道;所以FTP的连接模式有两种,主动和被动,也就是PORT和PASV,这都是相对于服务器而言,类似zabbix的主动与被动。
PORT模式
主动模式FTP客户端把自己的高位端口和FTP服务器的TCP的21端口建立连接通道,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令,告诉服务端,客户端用什么端口接收数据,从而服务端收到客户端的端口信息后,就通过自己的20端口和客户端的指定随机高位端口进行连接,数据链路建立。
PASV模式
被动模式是当客户端发送数据请求后,服务端也会发信息给客户端,告诉客户端,服务端在它本地打开了一个高位端口,让客户端来连吧,当客户端收到服务端的信息后,就去连接服务端的高位随机端口,数据链路建立。
区别
两种模式主要是数据链路建立的不同,主动模式是客户端在本地打开一个高位端口等待服务端建立连接,被动模式是服务端打开一个高位端口等待客户端去建立一个数据连接。
知道这些对于理解FTP就差不多了,下面开始介绍在ubuntu下如何搭建FTP的主动和被动
搭建
安装FTP
1 | sudo apt install vsftpd |
---|
创建FTP跟目录和用户
1 2 3 4 5 | $ sudo mkdir -p /data/storage $ sudo adduser www $ sudo adduser ftpadmin --ingroup www $ sudo chown -R www.www /data/storage $ sudo chmod g w /data/storage |
---|
这里说一下创建的这两个用户的作用:www用户是我们的web普通用户,所有的应用程序都是用此用户控制的;ftpadmin是FTP用户
配置主动模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES #主动模式进行数据传输时是否使用20端口 xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO chroot_local_user=YES allow_writeable_chroot=YES write_enable=YES local_root=/data/storage local_umask=0 file_open_mode=0666 port_enable=YES #主动模式开启 |
---|
配置完成后重启vsftpd即可,主动模式即开启
被动模式配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO chroot_local_user=YES allow_writeable_chroot=YES write_enable=YES local_root=/data/storage local_umask=0 file_open_mode=0666 pasv_enable=YES #开启被动模式 pasv_min_port=10001 pasv_max_port=10250 pasv_promiscuous=YES #关闭被动模式时的安全检查 |
---|
测试
使用filezilla或者浏览器直接访问ftp://ftp地址即可,我们这里使用curl进行上传与下载
1)创建多个文件
1 | for i in `seq 1 100`;do echo "num: $i" > upload_$i.log;done |
---|
2)上传多个文件
1 | for i in `seq 1 100`;do curl -u ftpadmin:Tccm2008 -T upload_$i.log ftp://10.0.3.111 ;done |
---|
3)下载多个文件
1 | for i in `seq 1 100`;do curl ftp://10.0.3.111/upload_$i.log -u ftpadmin:Tccm2008 -o download_$i.log ;done |
---|