凌峰创科服务平台

Ubuntu如何安装配置FTP服务器?

vsftpd 是一个在 Linux/Unix 系统上非常流行的 FTP 服务器软件,它的特点是高速、安全和稳定。

Ubuntu如何安装配置FTP服务器?-图1
(图片来源网络,侵删)

第一步:更新系统并安装 vsftpd

打开终端(快捷键 Ctrl+Alt+T),然后执行以下命令。

  1. 更新软件包列表: 这是一个好习惯,确保你获取的是最新的软件信息。

    sudo apt update
  2. 安装 vsftpd: 使用 apt 包管理器来安装。

    sudo apt install vsftpd -y

    安装完成后,vsftpd 服务会自动启动,你可以通过以下命令检查其状态:

    Ubuntu如何安装配置FTP服务器?-图2
    (图片来源网络,侵删)
    sudo systemctl status vsftpd

    如果看到绿色的 active (running) 字样,说明服务正在运行。


第二步:配置防火墙(重要!)

为了能让外部计算机访问你的 FTP 服务,必须允许 FTP 端口通过防火墙。

Ubuntu 默认使用 ufw (Uncomplicated Firewall)。

  1. 允许 FTP 流量: FTP 协议比较特殊,它使用两个端口:一个控制端口(默认 21)和一个数据端口(范围较广)。ufw 有一个预设规则可以方便地开启 FTP。

    Ubuntu如何安装配置FTP服务器?-图3
    (图片来源网络,侵删)
    sudo ufw allow ftp
  2. 重新加载防火墙规则(如果之前有修改)并启用防火墙:

    sudo ufw reload
    sudo ufw enable

    在启用时,输入 y 确认。


第三步:配置 vsftpd

这是最核心的一步,我们将修改 vsftpd 的配置文件来设置匿名访问、本地用户访问、权限等。

  1. 打开配置文件: 使用 nanovim 等文本编辑器打开配置文件。

    sudo nano /etc/vsftpd.conf
  2. 修改关键配置项: 打开文件后,找到或添加/修改以下行,我会解释每一项的作用。

    # --- 基本设置 ---
    listen=YES                      # 让 vsftpd 以独立模式监听,而不是由 xinetd 管理
    anonymous_enable=NO             # 【重要】禁止匿名用户登录,出于安全考虑
    local_enable=YES                # 允许本地用户登录
    write_enable=YES                # 允许本地用户上传文件(需要配合下面的权限设置)
    local_umask=022                 # 本地用户上传文件后的默认权限掩码 (644 for files, 755 for dirs)
    # --- 访问控制 ---
    chroot_local_user=YES           # 【非常重要】将本地用户限制在其主目录中,防止他们访问系统其他文件
    allow_writeable_chroot=YES      # 【重要】允许被 chroot 的用户拥有写权限,新版本 vsftpd 需要
    user_sub_token=$USER            # 定义用户目录的变量
    local_root=/home/$USER/ftp      # 【关键】为每个用户指定一个独立的 FTP 目录,这样更安全!
                                    # 用户 'testuser' 的 FTP 根目录将是 /home/testuser/ftp
    # --- 日志设置 ---
    xferlog_enable=YES              # 启用上传/下载日志
    xferlog_std_format=YES          # 使用标准日志格式
    log_ftp_protocol=YES             # 记录所有的 FTP 协议命令
    # --- 安全性增强 ---
    pasv_min_port=40000             # 被动模式使用的最小端口
    pasv_max_port=50000             # 被动模式使用的最大端口

    配置解释

    • anonymous_enable=NO: 强烈建议禁止匿名登录,否则任何人都可以访问你的服务器。
    • local_root=/home/$USER/ftp: 这条配置是最佳实践,它为每个登录 FTP 的用户创建了一个“沙盒”目录,用户 alice 登录后,她看到的根目录就是 /home/alice/ftp,她无法访问 /home/alice 下的其他文件(如 .ssh 目录),也无法访问 /home/bob 目录,这极大地提高了安全性。
    • allow_writeable_chroot=YES: 当你使用 chroot 并且用户需要有写入权限时(比如上传文件),这个选项是必需的。
  3. 保存并退出: 在 nano 编辑器中,按 Ctrl + X,然后按 Y,最后按 Enter 键保存文件。


第四步:为 FTP 用户创建专用目录

上一步我们配置了 local_root=/home/$USER/ftp,现在需要为每个 FTP 用户创建这个目录并设置正确的权限。

假设你要为用户 testuser 创建 FTP 目录:

  1. 创建 FTP 目录

    sudo mkdir -p /home/testuser/ftp
  2. 设置目录所有者: 必须确保 FTP 用户拥有这个目录的所有权。

    sudo chown -R testuser:testuser /home/testuser/ftp
  3. 设置目录权限: 目录权限必须是 755(所有者可读/写/执行,组和其他用户可读/执行),否则用户可能无法进入。

    sudo chmod -R 755 /home/testuser/ftp
  4. (可选)在目录中放一个测试文件

    echo "Hello, this is a test file for FTP." | sudo tee /home/testuser/ftp/test.txt

注意:你需要为每一个需要 FTP 访问的 Linux 用户重复第四步的操作。


第五步:重启 vsftpd 服务并测试

  1. 重启 vsftpd 服务: 让新的配置生效。

    sudo systemctl restart vsftpd
  2. 测试连接

    • 使用文件管理器: 在你的电脑上(Windows, macOS, 或另一台 Linux),打开文件管理器。 在地址栏输入:ftp://你的服务器IP地址

      • ftp://192.168.1.100
      • 系统会提示你输入用户名和密码,输入你刚刚配置的用户(如 testuser)和密码。
      • 登录成功后,你应该能看到 /home/testuser/ftp 目录下的内容。
    • 使用命令行: 在你的电脑上打开终端,输入:

      ftp 你的服务器IP地址

      然后输入用户名和密码进行交互式操作。


第六步:排错指南

如果连接失败,请检查以下几点:

  1. 检查服务状态

    sudo systemctl status vsftpd

    确保服务是 active (running) 状态。

  2. 检查防火墙规则

    sudo ufw status

    确保能看到 ALLOW INFTP 规则。

  3. 检查 SELinux: Ubuntu 默认不启用 SELinux,所以通常可以忽略,但如果你的系统有特殊配置,可能需要运行 setsebool -P ftpd_full_access on

  4. 查看日志文件: 日志是排错的最佳工具,vsftpd 的日志通常在 /var/log/ 目录下。

    sudo tail -f /var/log/vsftpd.log

    在另一个终端尝试连接,然后观察这个日志文件的输出,它会告诉你连接和认证过程中的详细信息。

  5. 检查被动模式端口: 如果使用文件管理器连接时卡在 "列出目录" 步骤,很可能是被动模式的端口被防火墙阻隔了,确保你的防火墙(无论是服务器上的 ufw 还是客户端的防火墙/路由器)允许了我们配置的 40000-50000 端口范围。


安全建议

  • 使用 SFTP:对于新项目,强烈建议使用 SFTP (SSH File Transfer Protocol),它通过 SSH 连接传输文件,是加密的,并且端口单一(通常是 22),比 FTP 更安全、更易于管理,如果你只是需要文件传输功能,SFTP 通常是更好的选择。
  • 创建专门的 FTP 用户:不要使用 root 或其他有系统权限的用户来登录 FTP,最好创建一些专门用于 FTP 传输的、权限受限的用户。
  • 定期更新:保持你的系统和 vsftpd 软件包是最新版本,以修复已知的安全漏洞。

按照以上步骤,你就可以成功地在 Ubuntu 上搭建一个安全、可用的 FTP 服务器了。

分享:
扫描分享到社交APP
上一篇
下一篇