Linux:云服务器搭建ftp

悠悠 2024-04-08 10:57 147阅读 0赞

安装ftp服务器

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

修改ftp配置文件

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

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

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

账号密码访问配置

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

  1. # 允许匿名访问
  2. anonymous_enable=NO
  3. # 不允许本地用户访问,如root用户。默认允许
  4. local_enable=YES
  5. # 本地用户上传文件权限
  6. local_umask=022
  7. # 匿名用户上传文件权限
  8. anon_umask=022
  9. # 允许写入操作,否则不能上传文件
  10. write_enable=YES
  11. # ftp工具连接成功提示
  12. ftpd_banner=Welcome to blah FTP service.
  13. # 所有用户均不能切换到根目录的上级目录
  14. chroot_local_user=YES
  15. # 是否启动限制用户的名单。YES为启用,NO禁用。默认禁用
  16. chroot_list_enable=NO
  17. # /etc/vsftpd/user_list文件不生效
  18. userlist_enable=NO
  19. #坑,添加以下配置。不添加此项,文件无法上传。报错:550 Permission denied。新版本vsftpd加入了安全需求,切根不允许写,要添加这个配置并设置为YES才可以
  20. allow_writeable_chroot=YES
  21. # 开启被动模式,并且设置被动模式监听的端口访问
  22. pasv_enable=YES
  23. pasv_min_port=30000
  24. pasv_max_port=50000

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

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

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

nginx配置文件

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

匿名访问配置

  1. # 允许匿名访问
  2. anonymous_enable=YES
  3. # 不允许本地用户访问,如root用户。默认允许
  4. local_enable=NO
  5. # 本地用户上传文件权限
  6. local_umask=022
  7. # 匿名用户上传文件权限
  8. anon_umask=022
  9. # 允许写入操作,否则不能上传文件
  10. write_enable=YES
  11. # 允许匿名用户上传文件,需要配合write_enable=yes
  12. anon_upload_enable=YES
  13. # 控制匿名用户对文件和文件夹的删除和重命名(自己添加,没有该配置)
  14. anon_other_write_enable=YES
  15. # 允许匿名用户创建目录
  16. anon_mkdir_write_enable=YES
  17. # ftp工具连接成功提示
  18. ftpd_banner=Welcome to blah FTP service.
  19. # 所有用户均不能切换到根目录的上级目录
  20. chroot_local_user=YES
  21. # 是否启动限制用户的名单。YES为启用,NO禁用。默认禁用
  22. chroot_list_enable=NO
  23. # /etc/vsftpd/user_list文件不生效
  24. userlist_enable=NO
  25. #坑,添加以下配置。不添加此项,文件无法上传。报错:550 Permission denied。新版本vsftpd加入了安全需求,切根不允许写,要添加这个配置并设置为YES才可以
  26. allow_writeable_chroot=YES
  27. #匿名用户的根目录,这个非常重要!
  28. anon_root=/usr/local/ftpdir
  29. #匿名用户不要密码就靠这个
  30. no_anon_password=YES
  31. # 匿名登录后的使用者
  32. ftp_username=ftpuser
  33. # 开启被动模式,并且设置被动模式监听的端口访问
  34. pasv_enable=YES
  35. pasv_min_port=30000
  36. pasv_max_port=50000

启动ftp服务器

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

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

查询是否启动成功

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

测试ftp能否正常访问

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

云服务器搭建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范围端口

发表评论

表情:
评论列表 (有 0 条评论,147人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux ftp服务器

     Linux ftp服务器搭建     Linux ftp服务器一般和Linux http 服务器搭建在同一台,前者是主要提供下载后者是提供访问。     默认情况下,存储