本教程将以 Ubuntu/DebianCentOS/RHEL 两大主流 Linux 发行版为例,并重点讲解如何配置用户隔离和 SSL/TLS 加密,以确保安全。

server u搭建ftp教程
(图片来源网络,侵删)

目录

  1. 第一步:准备工作
    • 更新系统
    • 获取服务器信息
  2. 第二步:安装 vsftpd
    • Ubuntu/Debian
    • CentOS/RHEL
  3. 第三步:基本配置
    • 备份原始配置文件
    • 编辑 vsftpd.conf
    • 核心配置项详解
  4. 第四步:创建 FTP 用户
    • 创建系统用户
    • 设置密码
    • 设置用户主目录和权限
  5. 第五步:配置防火墙
    • Ubuntu/Debian (使用 UFW)
    • CentOS/RHEL (使用 Firewalld)
  6. 第六步:启动并测试 FTP 服务
    • 启动并设置开机自启
    • 使用 FTP 客户端测试
  7. 第七步(可选但推荐):配置 SSL/TLS 加密(安全传输)
    • 生成 SSL 证书
    • 修改 vsftpd.conf 启用加密
    • 测试加密连接
  8. 第八步:常见问题排查
    • 连接被拒绝 (530 Login incorrect)
    • 连接超时或无法列出目录 (500 OOPS)
    • 权限问题 (550 Permission denied)

第一步:准备工作

你需要一台已经安装好 Linux 发行版(如 Ubuntu 20.04+ 或 CentOS 7/8)的服务器,并且拥有 sudoroot 权限。

  1. 登录服务器

    ssh your_user@your_server_ip
  2. 更新系统包管理器 确保所有软件包都是最新的。

    • 对于 Ubuntu/Debian:

      server u搭建ftp教程
      (图片来源网络,侵删)
      sudo apt update && sudo apt upgrade -y
    • 对于 CentOS/RHEL:

      sudo yum update -y
  3. 获取服务器信息 记录下你的服务器 IP 地址,后面会用到。

    ip a

第二步:安装 vsftpd

vsftpd 是一个轻量级、高性能且非常安全的 FTP 服务器软件,是 Linux 下的首选。

  • 对于 Ubuntu/Debian:

    server u搭建ftp教程
    (图片来源网络,侵删)
    sudo apt install vsftpd -y
  • 对于 CentOS/RHEL:

    sudo yum install vsftpd -y

安装完成后,vsftpd 服务通常不会自动启动。


第三步:基本配置

这是最关键的一步,我们将配置 vsftpd 以实现安全、独立的用户访问。

  1. 备份原始配置文件

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
  2. 编辑配置文件 使用你喜欢的文本编辑器(如 nanovim)打开配置文件。

    sudo nano /etc/vsftpd.conf
  3. 修改核心配置项 将以下配置项取消注释(去掉 )或修改为如下值,我会解释每个选项的作用。

    # 禁止匿名登录
    anonymous_enable=NO
    # 允许本地用户登录
    local_enable=YES
    # 允许写入文件
    write_enable=YES
    # 将用户限制在其主目录中(非常重要!)
    chroot_local_user=YES
    # 当 chroot_local_user=YES 时,此项允许写入 chroot 目录
    # 否则,用户无法上传文件
    allow_writeable_chroot=YES
    # 启用用户列表功能
    userlist_enable=YES
    # 指定用户列表文件,只有在此文件中的用户才能登录
    userlist_file=/etc/vsftpd.userlist
    # 指定用户列表文件中的用户是“允许”还是“禁止”
    # NO 表示只有在此列表中的用户才被允许登录
    userlist_deny=NO
    # 使用 UTF-8 编码,避免中文文件名乱码
    utf8_filesystem=YES
    # 日志记录
    xferlog_enable=YES
    xferlog_file=/var/log/vsftpd.log
    dual_log_enable=YES
    vsftpd_log_file=/var/log/vsftpd.log
  4. 保存并退出

    • nano 中,按 Ctrl + X,然后按 Y,最后按 Enter

第四步:创建 FTP 用户

我们创建一个专门用于 FTP 访问的用户。

  1. 创建系统用户 我们将创建一个名为 ftpuser 的用户。-m 参数会自动为其创建主目录。

    sudo useradd -m -s /bin/false ftpuser
    • -m: 创建用户的主目录。
    • -s /bin/false: 禁用该用户的 shell 登录,增强安全性,它只能用于 FTP,无法通过 SSH 登录服务器。
  2. 为用户设置密码

    sudo passwd ftpuser

    系统会提示你输入并确认密码。

  3. 将用户添加到允许列表 根据我们之前的配置,只有 /etc/vsftpd.userlist 文件中的用户才能登录。

    • 创建用户列表文件并添加用户:
      echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist
    • 检查文件内容:
      cat /etc/vsftpd.userlist

      你应该能看到 ftpuser 这一行。

  4. 设置用户主目录权限(非常重要!)chroot_local_user=YES 时,vsftpd 会将用户锁定在其主目录,为了让用户能够上传文件,其主目录的权限设置必须遵循一个原则:用户对其主目录必须有执行(x)权限,但其上级目录不能有写入(w)权限,否则 chroot 会失败。

    # 设置 ftpuser 主目录的所有者为 ftpuser
    sudo chown -R ftpuser:ftpuser /home/ftpuser
    # 设置主目录权限为 755 (rwxr-xr-x)
    sudo chmod 755 /home/ftpuser

第五步:配置防火墙

为了能从外部访问 FTP 服务器,必须在防火墙上开放端口,FTP 默认使用 21 端口进行控制连接。

  • 对于 Ubuntu/Debian (使用 UFW):

    # 开放 21 端口
    sudo ufw allow 21/tcp
    # 如果需要开放被动模式的端口范围 (见第七步)
    # sudo ufw allow 60000:61000/tcp
    # 重新加载防火墙规则
    sudo ufw reload
  • 对于 CentOS/RHEL (使用 Firewalld):

    # 添加永久规则,开放 21 端口
    sudo firewall-cmd --permanent --add-service=ftp
    # 如果需要开放被动模式的端口范围
    # sudo firewall-cmd --permanent --add-port=60000-61000/tcp
    # 重新加载防火墙以应用新规则
    sudo firewall-cmd --reload

第六步:启动并测试 FTP 服务

  1. 启动 vsftpd 服务并设置开机自启

    # 启动服务
    sudo systemctl start vsftpd
    # 设置开机自启
    sudo systemctl enable vsftpd
  2. 检查服务状态

    sudo systemctl status vsftpd

    你应该看到绿色的 active (running) 字样。

  3. 使用 FTP 客户端测试 在你的本地电脑上,使用 FileZilla、WinSCP 或命令行 FTP 客户端进行连接。

    • 主机: 你的服务器 IP 地址
    • 用户名: ftpuser
    • 密码: 你设置的密码
    • 端口: 21

    如果连接成功并能看到 /home/ftpuser 目录下的文件,说明基本配置已经完成!


第七步(可选但推荐):配置 SSL/TLS 加密

默认的 FTP 传输是明文的,非常不安全,配置 SSL/TLS 可以对数据进行加密,防止信息泄露。

  1. 生成自签名 SSL 证书 在生产环境中,你应该使用受信任的 CA 签发的证书,这里我们生成一个自签名证书用于测试。

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

    过程中会要求你填写一些信息,如 Country Name, Common Name 等,可以随意填写,但 Common Name 建议填你的服务器域名或 IP。

  2. 修改 vsftpd.conf 文件 再次打开配置文件,添加或修改以下选项:

    # 启用 SSL/TLS
    ssl_enable=YES
    # 强制所有非匿名用户使用安全连接
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    # 指定 SSL 证书文件路径
    rsa_cert_file=/etc/vsftpd/vsftpd.pem
  3. 重启 vsftpd 服务

    sudo systemctl restart vsftpd
  4. 测试加密连接 在你的 FTP 客户端(如 FileZilla)中,连接时需要选择 "Require explicit FTP over TLS" 模式(有时也叫 "FTPES")。

    • 主机/用户名/密码/端口 不变。
    • 加密: 选择 "Require explicit FTP over TLS"。

    如果连接成功,说明你的 FTP 服务器已经可以安全地传输数据了。


第八步:常见问题排查

  • 问题:连接被拒绝,提示 530 Login incorrect

    • 原因1: 用户名或密码错误。
    • 原因2: 用户不在 /etc/vsftpd.userlist 文件中。
    • 原因3: 用户密码为空(虽然我们设置了密码,但可以检查一下)。
    • 解决: 检查以上三点。
  • 问题:连接超时或无法列出目录,提示 500 OOPS: vsftpd: cannot locate user specified in 'ftp_username': ftpuser500 OOPS: chroot

    • 原因: 通常是 chroot 配置导致的权限问题,用户主目录或其父目录的权限不正确。
    • 解决: 严格按照第四步的权限设置操作,确保 /home/ftpuser 目录权限为 755,且其父目录(/home)没有 777 权限。
  • 问题:用户无法上传或创建文件,提示 550 Permission denied

    • 原因: write_enable 未开启,或者用户对目标目录没有写权限。
    • 解决:
      1. 检查 vsftpd.confwrite_enable=YES 是否存在。
      2. 确保用户对其操作的目录有写权限(chmod 755 /home/ftpuser/my_upload_folder)。

恭喜!至此,你已经成功搭建了一个功能完善且相对安全的 FTP 服务器。