凌峰创科服务平台

Linux虚拟机如何安装配置FTP服务器?

核心概念:FTP vs. SFTP

在开始之前,请务必理解一个重要区别:

Linux虚拟机如何安装配置FTP服务器?-图1
(图片来源网络,侵删)
  • FTP (File Transfer Protocol): 是一种传统的文件传输协议,它最大的问题是所有数据(包括用户名和密码)都以明文形式传输,非常不安全。强烈建议使用 FTPS (FTP over SSL/TLS) 来加密连接。
  • SFTP (SSH File Transfer Protocol): 它是 SSH (Secure Shell) 协议的一部分,通过加密的 SSH 通道进行文件传输,它不是 FTP,但通常被用作安全的文件传输替代方案,如果只是需要安全地传输文件,SFTP 通常是更好的选择。

本指南将重点介绍如何安装和配置 安全的 vsftpd (FTPS)


安装和配置 vsftpd (Very Secure FTP Daemon)

vsftpd 是一个在 Linux 上最流行、最安全、最稳定的 FTP 服务器软件,我们将以 Ubuntu/DebianCentOS/RHEL 为例进行说明。

第一步:更新系统包

在安装任何新软件之前,最好先更新系统包列表。

对于 Ubuntu/Debian:

Linux虚拟机如何安装配置FTP服务器?-图2
(图片来源网络,侵删)
sudo apt update
sudo apt upgrade -y

对于 CentOS/RHEL (使用 dnf):

sudo dnf update -y

第二步:安装 vsftpd

对于 Ubuntu/Debian:

sudo apt install vsftpd -y

对于 CentOS/RHEL:

sudo dnf install vsftpd -y

安装完成后,vsftpd 服务通常会自动启动,我们可以检查其状态:

Linux虚拟机如何安装配置FTP服务器?-图3
(图片来源网络,侵删)
sudo systemctl status vsftpd

如果看到 active (running),说明服务正在运行。

第三步:创建 FTP 用户

为了安全,我们不建议使用 root 用户或系统已有的用户来登录 FTP,我们创建一个专门的用户 ftpuser

# 创建新用户
sudo adduser ftpuser
# 为用户设置密码 (系统会提示你输入并确认密码)
sudo passwd ftpuser

这个用户的主目录(/home/ftpuser)将是它的 FTP 默认根目录。

第四步:配置 vsftpd

这是最关键的一步。vsftpd 的主配置文件是 /etc/vsftpd.conf

  1. 备份原始配置文件(这是一个好习惯):

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

    sudo nano /etc/vsftpd.conf

    (或者使用 vim

  3. 修改以下关键配置项

    • 允许匿名用户登录? (默认不允许,更安全)

      anonymous_enable=NO
    • 允许本地用户登录? (我们刚刚创建的 ftpuser 就是本地用户)

      local_enable=YES
    • 允许用户上传文件? (默认只允许下载)

      write_enable=YES
    • 限制用户在自己的主目录内 (非常重要!防止用户通过 cd .. 浏览系统文件)

      chroot_local_user=YES
    • 启用 SSL/TLS 加密 (强烈推荐,实现 FTPS)

      # 启用 SSL
      ssl_enable=YES
      # 强制所有数据连接使用加密
      force_local_data_ssl=YES
      force_anon_data_ssl=YES
      # 强制所有控制连接使用加密
      force_local_logins_ssl=YES
      force_anon_logins_ssl=YES
      # 指定 SSL 证书和私钥文件
      # 如果没有,可以自己生成一个 (见下一步)
      rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
      rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

      注意: 上述证书路径是 Ubuntu/Debian 系统自带的测试证书,CentOS/RHEL 系统可能没有,你需要自己生成。

    • 允许被动模式 (由于防火墙和 NAT 的存在,被动模式通常是必须的)

      pasv_enable=YES
      pasv_min_port=10020
      pasv_max_port=10040

      这里我们指定了被动模式的端口范围,方便在防火墙中放行。

  4. 保存并退出 (在 nano 中是 Ctrl+X,然后按 Y,再按 Enter)。

第五步:处理防火墙和 SELinux

为了让外部机器能够访问 FTP 服务器,必须开放相应的端口。

对于 Ubuntu/Debian (使用 UFW):

# 开放 21 端口 (FTP控制端口)
sudo ufw allow 21/tcp
# 开放我们配置的被动模式端口范围
sudo ufw allow 10020:10040/tcp
# 重新加载防火墙规则
sudo ufw reload

对于 CentOS/RHEL (使用 FirewallD):

# 开放 21 端口
sudo firewall-cmd --permanent --add-service=ftp
# 开放我们配置的被动模式端口范围
sudo firewall-cmd --permanent --add-port=10020-10040/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload

如果使用的是 CentOS/RHEL,还需要处理 SELinux: SELinux 默认可能会阻止 FTP 服务的文件写入。

# 设置 SELinux 布局,允许 FTP 用户写入其主目录
setsebool -P ftpd_full_access on

第六步:重启 vsftpd 服务

应用所有配置更改:

sudo systemctl restart vsftpd

第七步:测试连接

  1. 获取虚拟机的 IP 地址

    ip addr

    找到你的网络接口(如 ens33eth0),其 inet 后面的地址就是 IP 地址。

  2. 使用 FTP 客户端连接

    • 在你的 Windows/macOS 主机上打开一个 FTP 客户端(如 FileZilla, WinSCP 等)。
    • 主机: 填入虚拟机的 IP 地址。
    • 端口: 21
    • 用户名: ftpuser
    • 密码: 你为 ftpuser 设置的密码。
    • 加密: 选择 "要求显式 FTP over TLS" (Explicit FTPS),这是对应 force_local_logins_ssl=YES 的设置。

    如果连接成功,并且能够看到文件,就说明配置成功了!


安装和配置 ProFTPD

ProFTPD 是另一个功能强大且配置灵活的 FTP 服务器,有些人更喜欢它的配置语法。

第一步:安装 ProFTPD

对于 Ubuntu/Debian:

sudo apt install proftpd -y

安装过程中可能会弹出一个对话框,询问是作为独立服务器还是从 inetd 运行,选择 "standalone" 并点击 OK

对于 CentOS/RHEL:

sudo dnf install proftpd -y

第二步:配置 ProFTPD

ProFTPD 的配置文件是 /etc/proftpd/proftpd.conf

  1. 备份并编辑文件

    sudo cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak
    sudo nano /etc/proftpd/proftpd.conf
  2. 修改关键配置

    • 服务器名称 (可选)

      ServerName "My FTP Server"
    • 监听地址 (可选,默认监听所有)

      # DefaultAddress 0.0.0.0
    • 允许匿名用户?

      <Anonymous ~ftp>
          User                ftp
          Group               nogroup
          # ...
          UserAlias          anonymous ftp
          <Limit LOGIN>
              DenyAll
          </Limit>
      </Anonymous>

      <Anonymous> 部分注释掉或删除,以禁用匿名登录。

    • 允许本地用户

      DefaultRoot ~

      这行配置和 vsftpdchroot_local_user=YES 类似,限制用户在自己的主目录。

    • 启用 TLS/SSL

      <IfModule mod_tls.c>
          TLSEngine on
          TLSProtocol TLSv1.2 TLSv1.3
          TLSRequired on
          TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
          TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
          TLSCACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
      </IfModule>

      确保这些配置没有被注释掉,并指向正确的证书文件。

  3. 保存并退出

第三步:防火墙和 SELinux

配置与 vsftpd 类似。

对于 Ubuntu/Debian (UFW):

sudo ufw allow 21/tcp
sudo ufw allow 60000:61000/tcp # ProFTPD 默认被动端口范围
sudo ufw reload

对于 CentOS/RHEL (FirewallD):

sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=60000-61000/tcp
sudo firewall-cmd --reload
setsebool -P ftpd_full_access on

第四步:重启并测试

sudo systemctl restart proftpd

然后使用与 vsftpd 相同的方法进行测试。


总结与排错

  • 首选 vsftpd:对于绝大多数用户,vsftpd 是简单、安全且稳定的选择。
  • 安全第一:始终使用 FTPS 或 SFTP,避免使用明文 FTP。
  • 端口问题:如果连接超时,首先检查防火墙是否开放了 21 端口和被动模式的端口范围。
  • 权限问题:如果用户无法上传或下载文件,检查目录和文件的权限,确保 FTP 用户对其主目录有读写执行 (rwx) 权限。
  • SELinux:在 CentOS/RHEL 系统上,SELinux 是排错时必须考虑的因素,使用 setsebool -P ftpd_full_access on 是一个快速解决权限问题的方法。
  • 日志:如果遇到问题,查看日志文件是关键。
    • vsftpd 日志通常在 /var/log/vsftpd.log
    • proftpd 日志通常在 /var/log/proftpd/proftpd.log
    • 系统日志也可能包含相关信息:/var/log/syslog (Ubuntu) 或 /var/log/messages (CentOS)。
分享:
扫描分享到社交APP
上一篇
下一篇