凌峰创科服务平台

虚拟机FTP服务器配置步骤是什么?

核心步骤概览

  1. 准备工作:在虚拟机中获取静态 IP 地址,确保虚拟机和宿主机(你的物理电脑)可以互相通信。
  2. 安装 FTP 服务器软件:在虚拟机中安装 vsftpd
  3. 基本配置:修改 vsftpd 的配置文件,使其能正常工作。
  4. 配置防火墙和 SELinux:开放 FTP 服务所需端口。
  5. 创建 FTP 用户:为文件传输创建专用的系统用户。
  6. 测试连接:使用宿主机的 FTP 客户端连接虚拟机进行测试。
  7. 进阶配置(可选):如启用 SSL/TLS 加密、限制用户访问目录等。

第一步:准备工作(获取虚拟机静态 IP)

这一步至关重要,因为如果虚拟机 IP 地址会变,你每次连接时都需要重新查找 IP。

虚拟机FTP服务器配置步骤是什么?-图1
(图片来源网络,侵删)

在 Ubuntu/Debian 中配置静态 IP (使用 Netplan)

  1. 查看你的网络接口名称:ip a,通常是 ens33eth0
  2. 编辑 Netplan 配置文件,通常位于 /etc/netplan/ 目录下,01-netcfg.yaml
    sudo nano /etc/netplan/01-netcfg.yaml
  3. 修改文件内容,设置一个与你的宿主机在同一网段的静态 IP,如果你的宿主机 IP 是 168.1.100,你可以给虚拟机设置 168.1.101
    network:
      version: 2
      renderer: networkd
      ethernets:
        ens33: # 替换成你的网卡名
          dhcp4: no
          addresses: [192.168.1.101/24] # 你的静态IP和子网掩码
          gateway4: 192.168.1.1 # 你的网关地址,通常是路由器地址
          nameservers:
              addresses: [8.8.8.8, 1.1.1.1] # DNS服务器地址
  4. 应用配置:sudo netplan apply
  5. 验证 IP:ip a,你应该能看到你设置的静态 IP 已经生效。

在 CentOS/RHEL 中配置静态 IP (使用 NetworkManager)

  1. 查看网络接口:ip a
  2. 编辑网络配置文件,ifcfg-ens33 (根据你的网卡名修改)。
    sudo nano /etc/sysconfig/network-scripts/ifcfg-ens33
  3. 修改或添加以下配置:
    TYPE=Ethernet
    BOOTPROTO=static # 设置为静态IP
    NAME=ens33
    DEVICE=ens33
    ONBOOT=yes # 开机自启
    IPADDR=192.168.1.101 # 你的静态IP
    NETMASK=255.255.255.0 # 子网掩码
    GATEWAY=192.168.1.1 # 网关
    DNS1=8.8.8.8
    DNS2=1.1.1.1
  4. 重启网络服务:sudo systemctl restart network
  5. 验证 IP:ip a

第二步:安装 FTP 服务器 (vsftpd)

在虚拟机的终端中执行以下命令。

对于 Ubuntu/Debian:

虚拟机FTP服务器配置步骤是什么?-图2
(图片来源网络,侵删)
sudo apt update
sudo apt install vsftpd -y

对于 CentOS/RHEL:

sudo dnf install vsftpd -y # 对于 CentOS 8/RHEL 8 及以上
# 或者
sudo yum install vsftpd -y # 对于 CentOS 7/RHEL 7 及以下

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


第三步:基本配置 vsftpd

vsftpd 的主配置文件是 /etc/vsftpd.conf

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

    虚拟机FTP服务器配置步骤是什么?-图3
    (图片来源网络,侵删)
    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
  2. 编辑配置文件:

    sudo nano /etc/vsftpd.conf
  3. 修改或取消注释以下关键配置项(确保它们没有被 注释掉):

    # 允许匿名用户登录(默认是允许的,为了安全,我们建议禁用)
    anonymous_enable=NO
    # 允许本地用户登录
    local_enable=YES
    # 允许本地用户有写权限(上传、创建目录等)
    write_enable=YES
    # 用户只能被限制在自己的家目录下,这是非常重要的安全设置!
    chroot_local_user=YES
    # 当用户被限制在家目录后,能否写入?默认为 NO,因为可能带来安全风险。
    # 如果需要用户上传文件,可以设置为 YES,但需要配合下面的配置。
    allow_writeable_chroot=YES
    # 设置欢迎信息
    ftpd_banner=Welcome to my FTP service.
  4. 保存并退出文件 (在 nano 中是 Ctrl+X, 然后按 Y, 再按 Enter)。

  5. 重启 vsftpd 服务使配置生效:

    sudo systemctl restart vsftpd

第四步:配置防火墙和 SELinux

防火墙配置

Ubuntu/Debian (使用 UFW):

# 开放 FTP 服务(UFW会自动处理21端口和被动模式的端口范围)
sudo ufw allow ftp
# 或者直接开放 21 端口
sudo ufw allow 21/tcp
# 重新加载防火墙规则
sudo ufw reload

CentOS/RHEL (使用 Firewalld):

# 添加 FTP 服务到防火墙规则(Firewalld会自动处理被动端口)
sudo firewall-cmd --permanent --add-service=ftp
# 重新加载防火墙规则
sudo firewall-cmd --reload

SELinux 配置 (仅限 CentOS/RHEL)

如果你的系统开启了 SELinux (默认是开启的),它会阻止 vsftpd 写入文件,导致上传失败。

有两种方法处理:

方法 A:临时关闭(不推荐,仅用于测试)

sudo setenforce 0

重启后 SELinux 会重新开启。

方法 B:设置正确的 SELinux 策略(推荐)

# 安装 SELinux 管理工具
sudo dnf install selinux-policy-devel -y # CentOS 8+
# sudo yum install selinux-policy-devel -y # CentOS 7
# 安装 vsftpd 的 SELinux 策略包
sudo dnf install vsftpd-selinux -y
# sudo yum install vsftpd-selinux -y
# 这会自动设置正确的布尔值,允许 ftpd 在家目录中写入

第五步:创建 FTP 用户

为了安全,不要使用 root 用户登录,我们创建一个专门的 FTP 用户 ftpuser

  1. 创建新用户:

    sudo useradd -m -s /sbin/nologin ftpuser
    • -m: 自动创建用户的主目录 /home/ftpuser
    • -s /sbin/nologin: 禁止此用户通过 SSH 或控制台登录系统,仅用于 FTP。
  2. 为该用户设置密码:

    sudo passwd ftpuser

    根据提示输入两次密码。

  3. (可选)将一些文件放入 /home/ftpuser 目录,用于测试下载。


第六步:测试连接

你可以从你的宿主机(物理电脑)上测试了。

  1. 获取虚拟机的 IP 地址: 在虚拟机终端运行 ip a,找到你设置的静态 IP,168.1.101

  2. 使用 FTP 客户端连接

    • Windows: 打开“文件资源管理器”,在地址栏输入 ftp://192.168.1.101,然后输入用户名 ftpuser 和密码。
    • macOS: 打开“访达”,在菜单栏选择“前往” -> “连接服务器”,输入 ftp://192.168.1.101,然后输入用户名和密码。
    • 命令行: 在宿主机的终端或命令提示符中输入:
      ftp 192.168.1.101

      然后输入用户名 ftpuser 和密码。

如果连接成功,你就可以看到 /home/ftpuser 目录下的文件了,并且可以上传、下载、删除文件。


第七步:进阶配置(可选)

A. 启用 SSL/TLS 加密(推荐)

不加密的 FTP 是不安全的,密码和文件内容都以明文传输。

  1. 生成 SSL 证书

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

    这会一路回车生成一个自签名证书,在生产环境中,你应该使用由受信任的 CA 签发的证书。

  2. 修改 vsftpd 配置文件

    sudo nano /etc/vsftpd.conf

    添加或修改以下几行:

    ssl_enable=YES
    allow_anon_ssl=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1_2=YES # 强使用 TLS v1.2 或更高版本
    # 指定证书位置
    rsa_cert_file=/etc/vsftpd/vsftpd.pem
    rsa_private_key_file=/etc/vsftpd/vsftpd.pem
  3. 重启 vsftpd

    sudo systemctl restart vsftpd
  4. 测试: 在 FTP 客户端连接时,你需要选择使用 "FTP over SSL/TLS (Explicit)" 或 "FTPS" 模式进行连接。

B. 限制用户访问特定目录

如果你想创建一个只允许访问 /var/www/html 这样的目录的用户,而不是他的家目录。

  1. 创建用户并设置家目录

    sudo useradd -d /var/www/html -s /sbin/nologin webftpuser
    sudo passwd webftpuser
    • -d /var/www/html: 指定用户的主目录。
  2. 修改 vsftpd 配置: 在 /etc/vsftpd.conf 中,确保 chroot_local_user=YES 是开启的。vsftpd 会自动将用户限制在他指定的家目录中。

  3. 设置目录权限: 为了让 webftpuser 能写入 /var/www/html,需要设置正确的所有权。

    sudo chown -R webftpuser:webftpuser /var/www/html
    sudo chmod -R 755 /var/www/html

常见问题排查

  • 连接被拒绝 (Connection refused)

    • 检查 vsftpd 服务是否正在运行:sudo systemctl status vsftpd
    • 如果没运行,启动它:sudo systemctl start vsftpd,并设置开机自启:sudo systemctl enable vsftpd
    • 检查宿主机和虚拟机的防火墙是否放行了 21 端口。
  • 用户名或密码错误

    • 确认用户名和密码输入正确。
    • 检查用户是否被锁定:sudo passwd -S ftpuser
  • 无法上传/写入文件 (553 Could not create file)

    • 检查 write_enable=YES 是否在配置文件中。
    • 检查目标目录的权限,特别是 chroot 目录(如 /home/ftpuser)的权限。vsftpd 要求 chroot 目录不能有 w 权限给用户本身,否则 allow_writeable_chroot=YES 必须设置为 YES
    • 检查 SELinux 是否是问题所在(针对 CentOS/RHEL)。
  • 被动模式连接失败

    • 如果客户端连接成功但列出目录或传输数据时卡住,通常是被动模式问题。

    • /etc/vsftpd.conf 中设置被动端口范围,并在防火墙中开放这个范围:

      pasv_min_port=10020
      pasv_max_port=10040
    • 然后在防火墙中开放这个端口范围:

      # UFW (Ubuntu)
      sudo ufw allow 10020:10040/tcp
      # Firewalld (CentOS)
      sudo firewall-cmd --permanent --add-port=10020-10040/tcp
      sudo firewall-cmd --reload

遵循以上步骤,你应该就能成功在虚拟机中配置好一个功能完善的 FTP 服务器了。

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