更新时间:2025-06-13 GMT+08:00
分享

搭建FTP站点

简介

FTP(File Transfer Protocol,文件传输协议)是一种在计算机之间通过网络传输文件的标准协议。它采用客户端-服务器架构,允许用户从远程服务器上传、下载、重命名、删除、查看文件和目录结构等。FTP有两种传输模式:

  • 主动模式(Active):服务器主动连接客户端的某个端口传输数据。
  • 被动模式(Passive):客户端主动连接服务器开放的端口,适用于防火墙限制较多的网络环境。

FTP支持以下的三种认证模式 :

  • 匿名认证
    • 无需用户名和密码,使用anonymous或ftp登录。
    • 通常用于公开资源下载,例如开源软件镜像站。
    • 安全性较低,只能访问受限目录(如 /pub),且通常只读。
  • 本地用户认证
    • 使用Linux系统中的本地用户登录。
    • 通常用于内网资源共享或在开发测试环境中使用。
    • 用户名和密码来源于/etc/passwd和/etc/shadow。权限等同于系统用户,具有一定的操作风险。
  • 虚拟用户认证
    • 用户不是真实的系统用户,独立建立账号数据库。通常设置统一的宿主账户(如vsftpd)进行访问控制。
    • 常结合gdbm或 libdb实现认证。
    • 更安全,权限可精细控制,不依赖系统用户。

vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在HCE 2.0上安装并配置vsftpd,主要包括本地用户认证和虚拟用户认证两种方式。

准备工作

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

前置条件

已完成yum源的配置,可参考HCE的REPO源配置与软件安装进行公网yum源的配置。

安装vsftpd软件

  1. 执行如下命令安装vsftpd:

    dnf install vsftpd

  2. 执行如下命令启动vsftpd服务:

    systemctl start vsftpd

  3. 执行如下命令查看服务状态:

    systemctl status vsftpd

    如果显示active (running)则表示启动成功,示例如图1

    图1 vsftpd状态示例

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

    systemctl enable vsftpd

配置FTP服务器为本地用户认证方式

  1. 为FTP服务添加用户

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

  2. 配置vsftpd服务

    1. 执行如下命令为FTP服务创建目录和文件(可根据个人需要修改目录):
      mkdir -p /data/ftp/
      touch /data/ftp/test.txt
    2. 执行如下命令将上述目录的拥有者设置为新用户:
      chown -R ftpuser:ftpuser /data/ftp/
    3. 打开“/etc/vsftpd/vsftpd.conf”文件,找到如下参数进行配置:
      # 监听IPv4 sockets。
      listen=YES
      # 根据需要选择是否配置监听IPv6
      listen_ipv6=NO

      在该配置文件的末尾添加下列参数,其中“pasv_address”参数为“准备工作”中的公网IP或者弹性公网IP(EIP):

      # 设置本地用户登录后所在目录。
      local_root=/data/ftp
      #全部用户被限制在主目录。
      chroot_local_user=YES
      #开启被动模式。
      pasv_enable=YES
      pasv_address=<FTP服务器公网IP地址>
      # 是否允许用户访问其他目录
      chroot_list_enable=NO
      allow_writeable_chroot=YES
      # 如果chroot_list_enable配置为YES,则需要配置该选项;该配置为一个文件,包含哪些用户可以访问其他目录
      # chroot_list_file=/etc/vsftpd/chroot_list
      # 设置被动模式下,可使用的端口范围,建议把端口范围设置在一段比较高的范围内,有助于提高访问FTP服务器的安全性。
      # 可使用的端口范围的最小值,此例中是5000,请根据实际情况修改。
      pasv_min_port=5000
      # 可使用的端口范围的最大值,此例中是5010,请根据实际情况修改。
      pasv_max_port=5010

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

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

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

  3. 验证

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

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

    2. 在安全组界面,入方向放开21端口和5000~5010端口。
    3. 在客户端执行以下命令安装ftp客户端:
      yum install ftp
    4. 在客户端执行以下命令:
      ftp <FTP服务器公网IP地址>
    5. 按照提示输入账号和密码。
    6. 登录成功后,执行“ls”命令后可以看到test.txt文件表示配置成功。
      图2 验证示例

配置FTP服务器为虚拟用户认证方式

  1. 创建虚拟用户账号并禁用shell登录

    useradd vsftpd -s /bin/false

    这是虚拟用户的映射账号,用于访问系统资源,但不能登录系统。

  2. 创建GDBM数据库

    gdbmtool /etc/vsftpd/login.pag store ftpuser 123456
    • ftpuser:虚拟用户名示例
    • 123456:示例密码
    • login.pag:账户密码存储文件

  3. 配置 PAM 模块,编辑/etc/pam.d/vsftpd文件,删除已有内容并写入以下内容:

    auth    required    pam_userdb.so db=/etc/vsftpd/login
    account required    pam_userdb.so db=/etc/vsftpd/login

    db=/etc/vsftpd/login实际指的是login.pag,无需扩展名。

  4. 设置vsftpd配置文件,编辑/etc/vsftpd/vsftpd.conf文件,添加以下内容:

    guest_enable=YES
    guest_username=vsftpd
    user_config_dir=/etc/vsftpd/user_conf
    #开启被动模式。
    pasv_enable=YES
    pasv_address=<FTP服务器公网IP地址>
    # 是否允许用户访问其他目录
    chroot_list_enable=NO
    allow_writeable_chroot=YES
    # 设置被动模式下,可使用的端口范围,建议把端口范围设置在一段比较高的范围内,有助于提高访问FTP服务器的安全性。
    # 可使用的端口范围的最小值,此例中是5000,请根据实际情况修改。
    pasv_min_port=5000
    # 可使用的端口范围的最大值,此例中是5010,请根据实际情况修改。
    pasv_max_port=5010

  5. 配置虚拟用户访问权限

    1. 创建用户权限配置目录
      mkdir -p /etc/vsftpd/user_conf
    2. 在/etc/vsftpd/user_conf/ftpuser文件写入以下内容:
      # 允许写操作(上传、改名、删除等)
      write_enable=YES
      # 允许本地系统用户(包括虚拟用户)登录 FTP 服务器
      local_enable=YES
      # 本地用户创建文件/目录时使用的权限掩码
      local_umask=077
      # 匿名用户创建文件/目录时的权限掩码
      anon_umask=022
      # 设置虚拟用户或本地用户登录后的根目录,限制用户只能访问该目录及其子目录
      local_root=/home/vsftpd/ftp
      # 允许匿名用户上传文件
      anon_upload_enable=YES
      # 允许匿名用户创建目录
      anon_mkdir_write_enable=YES
      # 允许匿名用户执行其他写操作,如删除或改名文件等
      anon_other_write_enable=yes

      在vsftp中,虚拟用户虽然通过本地用户映射实现,但其权限控制沿用了匿名用户的配置方式,因此需依赖匿名用户相关选项来启用写操作。

  6. 准备FTP根目录并赋权

    mkdir -p /home/vsftpd/ftp/pub
    chmod 777 /home/vsftpd/ftp/pub

  7. 重启vsftpd服务

    systemctl restart vsftpd

  8. 验证

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

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

    2. 在安全组界面,入方向放开21端口和5000~5010端口。
    3. 在客户端执行以下命令安装ftp客户端:
      yum install ftp
    4. 在客户端执行以下命令:
      ftp <FTP服务器公网IP地址>
    5. 按照提示输入账号和密码。
    6. 登录成功后,执行“ls”命令后可以看到test.txt文件表示配置成功。
      图3 验证示例

相关文档

    http://www.vxiaotou.com