• Linux:云服务器搭建ftp


    安装ftp服务器

    # 安装vsftpd
    yum install -y vsftpd
    # 添加用户名,用作ftp匿名访问用户
    useradd ftpuser
    # 给用户名设置密码
    passwd ftpuser
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改ftp配置文件

    yum install -y vsftpd之后,默认会在/etc/vsftpd/下有ftp的配置文件

    cd /etc/vsftpd/
    vim vsftpd.conf
    
    • 1
    • 2

    注意
    local_enable和anonymous_enable不能同时为NO,否则会报错。因为本地用户和匿名用户都不能访问,那就没有任何用户可以访问了ftp了。

    账号密码访问配置

    使用账号密码登录,就是使用任意ftp服务器所在的linux服务器的任意linux用户登录。登录成功后,该用户默认的ftp根目录为/home/该用户的用户名

    # 允许匿名访问
    anonymous_enable=NO
    # 不允许本地用户访问,如root用户。默认允许
    local_enable=YES
    # 本地用户上传文件权限
    local_umask=022
    # 匿名用户上传文件权限
    anon_umask=022
    # 允许写入操作,否则不能上传文件
    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
    
    # 开启被动模式,并且设置被动模式监听的端口访问
    pasv_enable=YES
    pasv_min_port=30000
    pasv_max_port=50000
    
    • 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

    使用账号密码访问如何免密读取文件

    上传、重命名、删除文件/文件夹可以用账号密码登录ftp,如果读取想不需要登录ftp,可以配置ngnix来读取ftp的文件夹,注意要chmod 755 ftp根目录

    nginx安装参考博客:https://blog.csdn.net/weixin_50093343/article/details/116059305

    nginx配置文件

    cd /usr/local/nginx/conf
    
    location /img {
    	alias  /home/ftpuser/;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    匿名访问配置

    # 允许匿名访问
    anonymous_enable=YES
    # 不允许本地用户访问,如root用户。默认允许
    local_enable=NO
    # 本地用户上传文件权限
    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
    
    # 开启被动模式,并且设置被动模式监听的端口访问
    pasv_enable=YES
    pasv_min_port=30000
    pasv_max_port=50000
    
    • 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
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    启动ftp服务器

    注意ftp服务器默认是监听21端口的,所以要防火墙要放开21端口

    # ftp服务器启动命令
    systemctl start vsftpd
    # 重启vsftpd服务器
    systemctl restart vsftpd.service
    # 最后执行查看状态,以查看重启成功了
    systemctl status vsftpd.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查询是否启动成功

    Linux查询某个端口是否被占用:netstat -anp | grep 端口号
    通过pid查看对应端口使用者:netstat -antup | grep pid
    或者查询管道过滤:ps -ef | grep ftp

    测试ftp能否正常访问

    # 下载ftp工具测试连接:
    yum install -y ftp
    ftp localhost
    
    # 或者cmd连接:
    ftp ip地址
    
    # 或者客户端工具filezilla连接。或者浏览器访问链接:
    ftp://ip地址
    # 如果需要输入密码,但是不想输入密码,就这样访问(重点)
    ftp://ftpuser:ftpuser@ip地址/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    云服务器搭建ftp的坑

     按找上述步骤在局域网内是没有问题的,但是在云服务器上就有坑要填。因为云服务器有一个安全组的机制,然后从这个突破口去寻找解决方案。首先将局域网的配置步骤照搬到服务器上,启动发现无论是浏览器还是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客户端决定数据传输端口,客户端向服务端发出连接请求包含了数据传输端口(重要)

    主动模式相关配置(了解):
    port_enable=YES|NO:数据连接时取消PORT模式,默认为YES
    connetc_from_port_20=YES|NO:控制以PORT模式进行数据传输时是否使用20端口,默认是NO(但实际上我用的RHL-CentOS7.6,vsftpd.conf文件中该配置设为YES,该配置生效前提是工作模式为主动的)
    ftp_data_port=端口号:设置FTP数据传输端口(ftp-data)值,默认值为20。此参数也用于主动模式
    port_promiscuous=YES|NO:取消PORT安全检查,该检查确保外出的数据只能连接到客户端上,默认为NO。小心打开此选项(Don’t care)

    被动模式相关配置:
    pasv_enable=YES|NO:允许数据传输使用PASV模式,默认为YES,且配置文件中没有该配置
    pasv_min_port=端口号、pasv_max_port=端口号:设置在PASV模式下建立数据传输所用端口范围上界和下界,0表示任意,默认为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高,我设置的是30000-50000,这个看你自己的啦
    pasv_promiscuous=YES|NO:此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中,默认值为NO(Don’t care)
    pasv_address=ip地址:此选项为一个数字IP地址,作为PASV命令的响应,默认值为none,地址是从呼入的连接套接字(incoming connectd socket)中获取(Don’t care)
    命令通道端口配置,默认为21
    listen_port=21

    最后一步,修改配置,使云服务器上搭建的FTP服务器可以正常使用:
    也没啥要修改的,主要就是加两个配置(为明确工作模式,我给加上pasv_enable=YES):
    pasv_enable=YES
    pasv_min_port=30000
    pasv_max_port=50000
    打开阿里云服务器30000-50000范围端口

  • 相关阅读:
    俄罗斯方块
    十大经典排序算法之选择排序。
    P6698-[BalticOI 2020 Day2]病毒【AC自动机,dp,SPFA】
    【Docker系列】Docker生产常用命令01
    日期函数DATEDIFF() 计算日期之差
    Java基础教程详解:多线程(1)-----多线程概念
    DL-31/6电流继电器
    UDP 客户端接收数据测试用例
    设计模式 笔记9 | 原型模式 在源码中的应用 | ArrayList 中的原型模式 | clone浅克隆 | 基于二进制流的深克隆实现
    软件设计模式系列之十八——迭代器模式
  • 原文地址:https://blog.csdn.net/Yal_insist/article/details/126474195