文档首页/ 弹性云服务器 ECS/ 最佳实践/ 搭建应用/ 构建FTP站点/ 搭建FTP站点(Huawei Cloud EulerOS 2.0)
更新时间:2024-10-16 GMT+08:00

搭建FTP站点(Huawei Cloud EulerOS 2.0)

简介

vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在HCE 2.0上安装并配置vsftpd。

准备工作

  • 准备一台ECS实例,并分配公网IP或者弹性公网IP(EIP)。
  • 安全组的入方向规则已放行21端口。

操作步骤

  1. 安装vsftpd软件并启动。

    1. 执行如下命令安装vsftpd。
      dnf install vsftpd
    2. 执行如下命令启动vsftpd服务。
      systemctl start vsftpd
    3. 执行如下命令查看服务状态。
      systemctl status vsftpd

      如果显示active (running)则表示启动成功,类似效果如下图。

    如果需要将vsftpd设置为开机自启动,则需要再执行如下命令。

    systemctl enable vsftpd

  2. 为FTP服务添加用户。

    1. 执行如下命令为FTP服务创建一个用户。
      adduser ftp
    2. 执行如下命令为ftp用户设置密码。
      passwd ftp

  3. 配置vsftpd服务。

    1. 执行如下命令为FTP服务创建目录和文件(可根据个人需要修改目录)。
      mkdir -p /data/ftp/
      touch /data/ftp/test.txt
    2. 执行如下命令将上述目录的拥有者设置为新用户。
      chown -R ftp:ftp /data/ftp/
    3. 打开“/etc/vsftpd/vsftpd.conf”文件,找到如下参数进行配置。
      # 监听IPv4 sockets。
      listen=YES
      # 根据需要选择是否配置监听IPv6
      listen_ipv6=YES
       
      # 在配置文件的末尾添加下列参数:
      # 设置本地用户登录后所在目录。
      local_root=/data/ftp/hce
      #全部用户被限制在主目录。
      chroot_local_user=YES
      #开启被动模式。
      pasv_enable=YES
      pasv_address=<FTP服务器公网IP地址>
      chroot_list_enable=NO # 是否允许用户访问其他目录
      # 如果chroot_list_enable配置为YES,则需要配置该选项;该配置为一个文件,包含哪些用户可以访问其他目录
      # chroot_list_file=/etc/vsftpd/chroot_list 
      # 设置被动模式下,可使用的端口范围,建议把端口范围设置在一段比较高的范围内,有助于提高访问FTP服务器的安全性。
      # 可使用的端口范围的最小值
      pasv_min_port=<port number>
      # 可使用的端口范围的最大值。
      pasv_max_port=<port number>

      除上述提及的参数,其他参数保持默认值即可。

      无论是否配置chroot_list_enable,都需要创建“/etc/vsftpd/chroot_list”文件。

    4. 执行如下命令重启vsftpd服务。
      systemctl restart vsftpd

  4. 验证。

    1. 执行如下命令查看vsftpd服务所使用的端口。
      netstat -natp | grep vsftpd

      默认情况下所使用的端口是21。

    2. 在安全组界面,入方向放开21端口和上述配置的5000~5010端口。
    3. 在windows文件管理器中输入ftp://<FTP服务器公网IP>:21访问FTP服务,输入密码后效果如下图。

      如果遇到以下错误,需要在“/etc/vsftpd/vsftpd.conf”文件末尾增加allow_writeable_chroot=YES配置,然后再重启vsftpd服务。

      500 OOPS: vsftpd: refusing to run with writable root inside chroot()