关于ftp(在Linux中为vsftpd)



文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。

FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。


</blockquote>

安装ftp


注意:此处例子的演示机为Centos6.8
    1.yum install vsftp -y #从yum源下载vsftp
    2.vi /etc/vsftpd/vsftpd.conf #修改vsftp配置文件
    3.在配置文件中将anonymous_enable=NO改为YES
    4.service vsftpd start #开启vsftp
    5.service iptables stop #关闭防火墙
    这样别的电脑就可以访问vsftp了

服务器安装ftp


注意:演示机为Centos7.4

按找上述步骤在局域网内是没有问题的,但是在云服务器上就有坑要填。因为云服务器有一个安全组的机制,然后从这个突破口去寻找解决方案。首先将局域网的配置步骤照搬到服务器上,启动发现无论是浏览器还是filezilla客户端都访问不了。在解决这个问题之前要了解ftp的两个工作模式:Port和Pasv。FTP连接一般会有两个连接,也就是会需要用到两个端口。一个服务器与客户端跟进行命令交互的,一个是进行数据传送的。那两种工作模式跟两个连接是怎么搭配起来工作的呢?


假设客户端为C,服务器端为S(以下简称C和S):
  • Port模式:当客户端C和服务端S连接起来后,C会发送一条命令告诉S:“我在本地打开了一个端口N等你进行数据连接”,当S收到这个Port命令后就会向C打开的那个端口N进行数据连接。S主动向C的某个端口进行数据连接,此乃主动模式
  • Pasv模式:当客户端C和服务端S连接起来后,S会发送一条命令告诉C:“我再本地打开了一个端口M你来连接我吧”,当C收到这个消息后就会向S的M端口发起数据连接。S打开端口被C主动连接,此乃被动模式

  • 那我们应该使用哪种工作模式呢?答案是被动(默认工作模式就是被动)。为什么?很简单,你是在局域网内,你可以连接到云服务器的某个端口(前提是这个端口放开了),但是云服务器连接不到你的


    FTP模式与数据端口:无论是哪一种工作模式,首先在建立控制连接时候操作是一样的,都是由客户端(首先随机选取一个大于1024以上的端口)和FTP服务器的控制端口21建立连接,并通过该连接传输操作指令。两种工作模式的区别是什么呢?在于使用数据传输端口(ftp-data)方式。port mode由FTP服务器指定数据传输所使用的端口,默认值为20。pasv mode由FTP客户端决定数据传输端口,客户端向服务端发出连接请求包含了数据传输端口


    服务器安装ftp其实与普通安装ftp没太大差异,主要区别在服务器要多加两个配置,在vftpd.conf中增加以下内容:

  • pasv_enable=YES
  • pasv_min_port=30000
  • pasv_max_port=50000
  • 最后在服务器的防火墙中放行30000-50000范围端口就欧克了



  • 附:vsftp配置文件说明


    # 允许匿名访问
    anonymous_enable=YES
    # 不允许本地用户,如root用户登陆。默认允许
    local_enable=NO
    #设置本地用户登录所在的目录。默认配置文件中没有该配置项,本地用户登录FTP服务器后所在的目录为所登录用户的主目录,如:对于root用户,则为/root目录
    # local_root=/home/ftpuser
    # 本地用户上传文件权限
    local_umask=022
    # 匿名用户上传文件权限
    anon_umask=022
    # 允许写入操作,否则不能上传文件
    write_enable=YES
    # 允许匿名用户上传文件,需要配合write_enable=yes
    anon_upload_enable=YES
    # 控制匿名用户对文件和文件夹的删除和重命名(自己添加,没有该配置)
    anon_other_write_enable=YES
    # 允许匿名用户创建目录
    anon_mkdir_write_enable=YES
    # ftp工具连接成功提示
    ftpd_banner=Welcome to blah FTP service.
    # 所有用户均不能切换到上级目录
    chroot_local_user=YES
    # 是否启动限制用户的名单。YES为启用,NO禁用。默认禁用
    chroot_list_enable=NO
    # /etc/vsftpd/user_list文件不生效
    userlist_enable=NO
    #坑,添加以下配置。不添加此项,文件无法上传。报错:550 Permission denied。新版本vsftpd加入了安全需求,切根不允许写,要添加这个配置并设置为YES才可以
    allow_writeable_chroot=YES
    #匿名用户的根目录。这个非常重要
    anon_root=/usr/local/ftpdir
    #匿名用户不要密码就靠这个
    no_anon_password=YES
    # 匿名登录后的使用者
    ftp_username=ftpuser