vsftpd 安装配置教程

本教程适用于原生 Ubuntu 服务器/桌面版以及 WSL(Windows Subsystem for Linux)环境,详细讲解 vsftpd 的安装、配置、防火墙设置及连接测试,全程采用命令行操作,适配 DevOps 工作流。

一、教程准备

  1. 环境要求

    • Ubuntu 18.04/20.04/22.04 或兼容版本
    • 具备 sudo 权限的用户
    • 网络通畅(用于下载软件包)
  2. 工具说明

    • FTP 服务端:vsftpd(轻量、安全,Ubuntu 官方推荐)
    • 配置工具:vim
    • 测试工具:lftp(命令行客户端)、FileZilla(图形化客户端)

二、步骤 1:安装 vsftpd

  1. 更新软件包索引
   sudo apt update -y
  1. 安装 vsftpd

    sudo apt install vsftpd -y
    
  2. 验证服务状态

    sudo systemctl status vsftpd
    
    • 若输出 active (running),说明服务启动成功;
    • 若未启动,执行 sudo systemctl start vsftpd 手动启动。
  3. 设置开机自启

    sudo systemctl enable vsftpd
    

三、步骤 2:备份并配置 vsftpd

vsftpd 的核心配置文件为 /etc/vsftpd.conf配置前务必备份原文件,防止配置错误无法回滚。

  1. 备份配置文件

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
    
  2. 编辑配置文件

    sudo vim /etc/vsftpd.conf
    
  3. 修改核心配置项
    将文件中原有配置替换为以下内容(注释已标注用途,按需调整):

    # 基础监听配置
    listen=YES                # 启用 IPv4 监听
    listen_ipv6=NO            # 关闭 IPv6 监听(按需开启)
    # 访问权限控制
    anonymous_enable=NO       # 禁止匿名访问(必设,提升安全性)
    local_enable=YES          # 允许本地系统用户登录
    write_enable=YES          # 允许上传文件(若仅需下载,设为 NO)
    local_umask=022           # 上传文件权限掩码(022 → 文件 644/目录 755)
    # 安全禁锢配置
    chroot_local_user=YES     # 将用户限制在主目录,禁止访问系统其他路径
    allow_writeable_chroot=YES # 解决 chroot 后无法写入的问题
    # 被动模式配置(FTP 客户端必备)
    pasv_enable=YES           # 启用被动模式
    pasv_min_port=40000       # 被动模式最小端口
    pasv_max_port=40100       # 被动模式最大端口
    # 日志与其他配置
    dirmessage_enable=YES     # 显示目录欢迎信息
    use_localtime=YES         # 使用本地时间
    xferlog_enable=YES        # 启用传输日志
    connect_from_port_20=YES  # 启用 20 端口(FTP 主动模式数据端口)
    secure_chroot_dir=/var/run/vsftpd/empty
    pam_service_name=vsftpd
    rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    ssl_enable=NO             # 暂不启用 SSL/TLS(进阶配置可开启)
    
  4. 保存并退出 vim
    在 vim 中按下 Esc,输入 :wq 回车保存。

  5. 重启 vsftpd 使配置生效

    sudo systemctl restart vsftpd
    

四、步骤 3:配置防火墙(分环境处理)

Ubuntu 防火墙配置分 原生系统WSL 环境 两种情况,需针对性操作。

情况 1:原生 Ubuntu 系统(物理机/虚拟机)

原生 Ubuntu 默认使用 ufw 防火墙,需开放 FTP 控制端口和被动模式端口范围。

  1. 安装 ufw(若未安装)

    sudo apt install ufw -y
    
  2. 开放端口

    # 开放 21 端口(FTP 控制端口)
    sudo ufw allow 21/tcp
    # 开放被动模式端口范围
    sudo ufw allow 40000:40100/tcp
    
  3. 启用防火墙并查看规则

    sudo ufw enable
    sudo ufw status
    

情况 2:WSL 环境

WSL 依赖 Windows 网络栈,内部 ufw 无法生效,需通过 Windows 高级防火墙 开放端口。

  1. 打开 Windows 高级防火墙

    • 按下 Win + R,输入 wf.msc 回车。
  2. 创建入站规则(开放 21 端口)

    • 右键「入站规则」→「新建规则」;
    • 规则类型选择「端口」→ 下一步;
    • 选择「TCP」→ 勾选「特定本地端口」,输入 21 → 下一步;
    • 选择「允许连接」→ 下一步;
    • 保持默认勾选(域、专用、公用)→ 下一步;
    • 规则命名(如 FTP-21)→ 完成。
  3. 重复步骤 2,创建规则开放被动模式端口范围 40000-40100

    • 特定本地端口输入 40000-40100
    • 规则命名(如 FTP-PASV-40000-40100)。

五、步骤 4:创建 FTP 专用用户(可选)

为避免使用 root 或系统普通用户登录 FTP,建议创建专用 FTP 用户,并限制其仅能通过 FTP 访问。

  1. 创建用户并指定主目录

    # 创建用户 ftpuser,主目录为 /home/ftpuser
    sudo useradd -m ftpuser
    
  2. 设置用户密码

    sudo passwd ftpuser
    
    • 输入两次密码(密码无回显,确保强度足够)。
  3. 限制用户仅能 FTP 登录(禁止 SSH 登录)

    • 首先将 /sbin/nologin 加入系统合法 shell 列表:
      sudo echo "/sbin/nologin" >> /etc/shells
      
    • 修改用户登录 shell:
      sudo usermod -s /sbin/nologin ftpuser
      

六、步骤 5:测试 FTP 连接

方法 1:命令行测试(lftp)

  1. 安装 lftp

    sudo apt install lftp -y
    
  2. 连接 FTP 服务器

    # 替换为你的服务器 IP 和用户名
    lftp ftpuser@服务器IP地址
    
  3. 验证操作权限

    • 查看目录:ls
    • 上传文件:put 本地文件路径
    • 下载文件:get 服务器文件路径
    • 退出连接:exit

方法 2:图形化测试(FileZilla)

  1. 打开 FileZilla,点击「文件」→「站点管理器」

  2. 新建站点,配置如下

    • 协议:选择 FTP - 文件传输协议
    • 主机:输入服务器 IP 地址;
    • 端口:默认 21
    • 登录类型:选择 正常
    • 用户/密码:输入 FTP 用户名和密码。
  3. 点击「连接」,成功后即可可视化管理文件

七、常见问题排查

问题现象 排查方法
无法连接 FTP 1. 检查 vsftpd 服务状态:sudo systemctl status vsftpd
2. 检查防火墙端口是否开放;
3. 确认服务器 IP 可访问。
可以连接但无法上传文件 1. 检查配置文件 write_enable=YES
2. 检查用户对主目录的写入权限:sudo chmod 755 /home/ftpuser
3. 确认 allow_writeable_chroot=YES
WSL 环境无法访问 1. 确认 Windows 防火墙已开放 21 和被动模式端口;
2. 查看 WSL IP 地址:`ip addr

八、安全优化建议

  1. 启用 SSL/TLS 加密:修改 ssl_enable=YES,配置 SSL 证书,使用 FTPS 协议传输,防止数据明文泄露。

  2. 限制用户访问 IP:在 vsftpd.conf 中添加 tcp_wrappers=YES,通过 /etc/hosts.allow/etc/hosts.deny 限制允许登录的 IP。

  3. 定期检查日志:FTP 传输日志默认路径为 /var/log/vsftpd.log,定期查看是否有异常登录记录。