凌峰创科服务平台

Linux FTP服务器搭建步骤有哪些?

第一步:选择并安装 FTP 服务器软件

我们选择 vsftpd,因为它以其安全性、速度和稳定性而闻名。

Linux FTP服务器搭建步骤有哪些?-图1
(图片来源网络,侵删)

在 CentOS / RHEL / Rocky Linux / AlmaLinux 系统上

  1. 更新系统包列表

    sudo dnf update -y  # 对于使用 dnf 的系统 (CentOS 8+, RHEL 8+, Rocky Linux 8+)
    # 或者
    sudo yum update -y  # 对于使用 yum 的旧版系统 (CentOS 7, RHEL 7)
  2. 安装 vsftpd

    sudo dnf install vsftpd -y
    # 或者
    sudo yum install vsftpd -y

在 Ubuntu / Debian 系统上

  1. 更新系统包列表

    sudo apt update
    sudo apt upgrade -y
  2. 安装 vsftpd

    Linux FTP服务器搭建步骤有哪些?-图2
    (图片来源网络,侵删)
    sudo apt install vsftpd -y

第二步:启动并设置开机自启

安装完成后,需要启动服务并设置为开机自动启动,这样服务器重启后 FTP 服务也能自动运行。

# 启动 vsftpd 服务
sudo systemctl start vsftpd
# 设置开机自启
sudo systemctl enable vsftpd
# 检查服务状态,确保正在运行
sudo systemctl status vsftpd

如果看到 active (running),说明服务已成功启动。


第三步:配置防火墙

为了能让外部计算机访问 FTP 服务,必须开放相应的端口,FTP 默认使用 21 端口进行控制连接。

对于 CentOS / RHEL / Rocky Linux / AlmaLinux (使用 firewalld)

# 永久开放 21 端口
sudo firewall-cmd --permanent --add-service=ftp
# 重新加载防火墙规则以使更改生效
sudo firewall-cmd --reload

对于 Ubuntu / Debian (使用 ufw)

# 允许 FTP 流量
sudo ufw allow ftp
# 重新加载防火墙(可选,ufw 通常会自动处理)
sudo ufw reload

第四步:创建 FTP 用户

出于安全考虑,不建议使用 root 用户或系统用户来管理 FTP,我们创建一个专用的 FTP 用户。

Linux FTP服务器搭建步骤有哪些?-图3
(图片来源网络,侵删)
  1. 创建新用户 假设我们创建一个名为 ftpuser 的用户,并将其主目录设置为 /home/ftpuser

    sudo useradd -m -s /sbin/nologin ftpuser
    • -m: 自动创建用户主目录 /home/ftpuser
    • -s /sbin/nologin: 禁止该用户通过 SSH 或控制台登录系统,增强安全性。
  2. 设置用户密码

    sudo passwd ftpuser
    # 系统会提示你输入并确认新密码
  3. 为用户设置密码(可选但推荐) 如果用户是通过 adduser 命令创建的,可能需要单独设置密码。

    sudo passwd ftpuser

第五步:配置 vsftpd

这是最关键的一步,决定了 FTP 服务器的行为。

  1. 备份原始配置文件

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

    sudo vi /etc/vsftpd/vsftpd.conf
  3. 修改关键配置项 将以下配置项的值进行修改或取消注释(去掉前面的 ),这是一个安全且功能完善的配置示例:

    # 禁止匿名用户登录
    anonymous_enable=NO
    # 允许本地用户登录
    local_enable=YES
    # 允许 FTP 用户上传文件
    write_enable=YES
    # 允许对 FTP 目录执行更改所有者、更改组、更改模式等操作
    # 如果用户需要创建、删除目录,此项需要开启
    chroot_local_user=YES
    # 当用户被限制在其主目录时,是否允许写入
    # 重要:为了安全,当 chroot_local_user=YES 时,此项必须为 NO
    # 否则用户可能通过 `chmod` 等命令 "越狱"
    allow_writeable_chroot=NO
    # 设置用户只能访问其自己的主目录,不能切换到其他目录
    # 这是 chroot 的一种更安全的实现方式
    # 如果你的系统是较新的(如 CentOS 7+, Ubuntu 18.04+),推荐使用这个
    # chroot_list_enable=YES
    # chroot_list_file=/etc/vsftpd/chroot_list
    # (注释掉上面两行,改用下面的方式)
    user_sub_token=$USER
    local_root=/home/$USER
    # 启用用户列表,只有列表中的用户才能登录
    # 这是最安全的用户控制方式
    userlist_enable=YES
    userlist_file=/etc/vsftpd/user_list
    userlist_deny=NO  # NO 表示只允许 user_list 文件中的用户登录
    # 启用数据端口连接
    # PASV 模式是被动模式,可以解决大部分防火墙和 NAT 的问题
    pasv_enable=YES
    pasv_min_port=10020
    pasv_max_port=10220

    配置解释:

    • anonymous_enable=NO: 必须关闭匿名登录,否则任何人都可以访问你的服务器。
    • chroot_local_user=YES: 将用户限制在其主目录内,防止他们浏览系统其他文件。
    • allow_writeable_chroot=NO: 非常重要!chroot 环境下禁止写入,防止安全漏洞。
    • userlist_deny=NO: 结合 userlist_enable=YES,这是一种白名单机制,只有 /etc/vsftpd/user_list 文件中列出的用户才能登录。
    • pasv_enable=YES 和相关端口:启用被动模式,并指定一个端口范围,这有助于客户端穿过防火墙连接到你的服务器。
  4. 创建用户白名单文件 根据上面的配置,我们需要创建 user_list 文件,并将我们之前创建的 ftpuser 添加进去。

    # 创建或编辑用户白名单文件
    sudo vi /etc/vsftpd/user_list

    在文件中添加你的用户名,每行一个:

    ftpuser
  5. 确保用户目录权限正确 为了让 ftpuser 能正常上传文件,其主目录的权限设置要正确,所有者应该是 ftpuser,组也应该是 ftpuser,并且权限不能是 777

    # 设置主目录所有者和组
    sudo chown -R ftpuser:ftpuser /home/ftpuser
    # 设置主目录权限为 755 (所有者可读写执行,组和其他用户可读和执行)
    sudo chmod -R 755 /home/ftpuser

第六步:重启 vsftpd 服务

保存并关闭配置文件后,重启 vsftpd 服务以使所有新配置生效。

sudo systemctl restart vsftpd

第七步:客户端连接测试

你的 FTP 服务器已经搭建完成!可以使用 FTP 客户端软件进行测试。

使用命令行 FTP 客户端

在你的本地电脑或另一台服务器上,打开终端,输入以下命令:

ftp <你的服务器IP地址>
#  ftp 192.168.1.100

然后输入你创建的用户名 (ftpuser) 和密码。

使用图形化 FTP 客户端

推荐使用 FileZilla,它支持 FTP, SFTP, FTPS 等多种协议。

  1. 打开 FileZilla。
  2. 在主机栏输入你的服务器 IP 地址。
  3. 在用户名栏输入 ftpuser
  4. 在密码栏输入你设置的密码。
  5. 端口保持 21
  6. 点击“快速连接”。

如果连接成功,你应该能看到服务器上的文件列表,并且可以上传、下载文件。


常见问题排查

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

  1. 防火墙问题:再次确认 21 端口和被动模式端口范围(如 10020-10220)已在防火墙中开放。

  2. SELinux (仅限 CentOS/RHEL):这是一个常见的问题,如果开启了 SELinux,可能会阻止 FTP 访问。

    • 临时关闭(用于测试)

      sudo setenforce 0
    • 永久解决(推荐):为 FTP 设置正确的 SELinux 上下文。

      # 安装 selinux-policy-devel 包
      sudo dnf install -y selinux-policy-devel
      # 创建一个 SELinux 策略模块,允许 vsftpd 写入用户目录
      # 创建文件 /tmp/vsftpd.te,内容如下:
      cat > /tmp/vsftpd.te << EOF
      module vsftpd 1.0;
      require {
          type user_home_dir_t;
          type usr_t;
          type var_t;
          type ftpd_log_t;
          type ftpd_t;
          class file { write read getattr open };
          class dir { write add_name remove_name read };
      }
      #============= ftpd_t ==============
      allow ftpd_t user_home_dir_t:dir { write add_name remove_name };
      allow ftpd_t user_home_dir_t:file { write read getattr open };
      allow ftpd_t usr_t:file { write read getattr open };
      allow ftpd_t var_t:dir { write add_name remove_name };
      allow ftpd_t var_t:file { write read getattr open };
      allow ftpd_t ftpd_log_t:file { write read getattr open append };
      EOF
      # 编译并加载策略
      checkmodule -M -m -V /tmp/vsftpd.te -o /tmp/vsftpd.mod
      semodule_package -o /tmp/vsftpd.pp -m /tmp/vsftpd.mod
      sudo semodule -i /tmp/vsftpd.pp
  3. 用户名或密码错误:确认输入的用户名和密码完全正确。

  4. 用户列表问题:确认 /etc/vsftpd/user_list 文件中包含了你的用户名。

  5. 文件权限问题:确认 /home/ftpuser 目录的权限和所有者设置正确。


进阶:使用更安全的 FTPS

为了数据传输的安全性,强烈建议使用 FTPS (FTP over SSL/TLS),它对用户名、密码和传输的数据都进行加密。

  1. 安装 SSL 证书 你可以使用免费的 Let's Encrypt 证书,或者生成一个自签名证书用于测试。

    # 生成自签名证书 (仅用于测试)
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
  2. 修改 vsftpd.conf 在配置文件中添加以下内容:

    # 启用 SSL/TLS
    ssl_enable=YES
    # 指定证书文件
    rsa_cert_file=/etc/vsftpd/vsftpd.pem
    # 强制客户端使用加密连接
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    # 要求客户端提供证书 (可选)
    require_ssl_reuse=NO
  3. 重启 vsftpd 服务

    sudo systemctl restart vsftpd

在 FileZilla 中连接时,需要在“协议”下拉菜单中选择“FTP-文件传输协议”,然后在“加密”选项中选择“如果可用,使用显式 FTP over TLS”。

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

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