本教程适用于以下操作系统版本

  • Debian 12 (Bookworm)
  • Debian 11 (Bullseye)
  • Debian 8 (Jessie)
  • Debian 6 (Squeeze)

本页内容

  • 先决条件
  • 安装 vsftpd
  • 配置 vsftpd
  • 设置防火墙
  • 配置 FTP 虚拟用户
  • 上传文件到 FTP 服务器
  • 结论

vSFTPd(Very Secure FTP Daemon)是一款免费且开源的 FTP 服务器软件。它是面向类 Unix 操作系统的 FTP 守护进程,基于 GNU 通用公共许可证(GNU General Public License)授权。vSFTPd 是使用最广泛的 FTP 守护进程之一,在系统资源占用上快速且轻量,因集成了 PAM 与 SSL 而具备安全性,并且稳定。凭借其成熟可靠,vSFTPd 赢得了 RedHat、SUSE、Debian、Gnome、KDE 等大型公司的信任。

vSFTPd 可运行于 IPv6,并支持虚拟 IP 配置与用户。它可以作为独立守护进程运行,也可通过 inetd 运行。在用户管理方面,vSFTPd 提供了一项允许用户设置自身配置的功能,例如按来源 IP 限制、可重配置以及带宽限制。此外,vSFTPd 支持用于虚拟用户的插件式认证模块(PAM),并提供与 SSL/TLS 的安全集成。

在本教程中,你将学习如何在 Debian 12 服务器上使用 vsftpd 搭建并创建一个安全的 FTP 服务器。在本指南中,你还将学习如何通过 UFW(Uncomplicated Firewall,简易防火墙)保护你的 FTP 服务器安装,以及如何使用 FTP 客户端 FileZilla 连接到 FTP 服务器。

先决条件

在继续之前,请确保你具备以下条件:

  • 一台 Debian 12 服务器。
  • 一个具有 sudo 管理员权限的非 root 用户。
  • 服务器上已安装 openssl 软件包。

安装 vsftpd

vsftpd 是用于 UNIX 和 Linux 操作系统的 FTP 协议实现。vsftpd 软件包在大多数 Linux 发行版(包括 Debian)中都可用。现在你将通过 APT 安装 vsftpd,并验证 vsftpd 服务以确保其正在运行。

在安装 vsftpd 软件包之前,请执行以下命令更新你的 Debian 软件源。

sudo apt update

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

现在使用下面的 apt install 命令安装 vsftpd 软件包。

sudo apt install vsftpd

输入 y 并按下 ENTER 键以确认安装。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

安装 vsftpd 后,vsftpd 服务将自动运行并启用。使用以下命令验证 vsftpd 服务。

sudo systemctl is-enabled vsftpd
sudo systemctl status vsftpd

以下输出确认 vsftpd 服务正在运行且已启用。此外,vsftpd 服务将在系统启动时自动运行。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

配置 vsftpd

在接下来的步骤中,你将配置并使用 vsftpd 创建一个安全的 FTP 服务器。你将生成 SSL/TLS 证书,并修改默认的 vsftpd 配置文件 /etc/vsftpd.conf。

首先,执行下面的 openssl 命令,生成将用于你的 vsftpd 服务器安装的新 TLS 证书。

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

在系统提示时输入你的详细信息。过程完成后,你的 TLS 证书将位于 /etc/ssl/private/vsftpd.pem。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

现在执行以下命令,创建用于存储 FTP 用户的新文件 /etc/vsftpd.userlist。

touch /etc/vsftpd.userlist

之后,运行以下命令备份 vsftpd 配置。然后,使用 nano 编辑器打开 vsftpd 配置文件 /etc/vsftpd.conf。

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
sudo nano /etc/vsftpd.conf

将 anonymous_enable 选项改为 NO,以禁用对 vsftpd 服务器的匿名访问。

anonymous_enable=NO

将 local_enable 选项改为 YES,以允许 /etc/passwd 文件中的本地用户以及 PAM 用户登录 vsftpd 服务器。

local_enable=YES

将 write_enable 选项改为 YES,以允许 FTP 用户向 vsftpd 服务器上传文件。

write_enable=YES

现在通过添加以下选项为 FTP 用户启用 chroot(监禁)。这会将 FTP 用户锁定在 /home/$USER/chroot 目录中。例如,FTP 用户 bob 将被锁定在 /home/bob/chroot 目录中。

chroot_local_user=YES
user_sub_token=$USER
local_root=/home/$USER/chroot

接下来,添加以下配置以设置 vsftpd 虚拟用户。/etc/vsftpd.userlist 文件中的任何用户都将被允许登录 vsftpd 服务器。

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

添加以下行,使用 SSL/TLS 证书保护你的 vsftpd 服务器。这将强制用户登录和数据传输连接使用安全连接。

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

现在添加以下配置,使用 20000 至 25000 之间的端口设置被动模式连接。

pasv_min_port=20000
pasv_max_port=25000

完成后保存并退出文件。

现在运行以下 systemctl 命令以重启 vsftpd 服务并应用你所做的更改。

sudo systemctl restart vsftpd

至此,你的 vsftpd 服务器现在正以新的配置运行。

设置防火墙

在接下来的步骤中,你将在 Debian 服务器上安装 UFW(Uncomplicated Firewall,简易防火墙),并用其保护你的 FTP 服务器安装。你将通过 APT 安装 UFW,开放 FTP 服务器端口 20:21/tcp,以及被动模式数据连接端口 20000:25000/tcp。

使用以下 apt 命令安装 UFW。输入 y 以继续安装。

sudo apt install ufw

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

安装 UFW 后,运行以下 ufw 命令,开放 OpenSSH 服务的端口、vsftpd 服务器的端口 20:21,以及端口 20000 至 25000 之间的被动模式 FTP 连接。

sudo ufw allow OpenSSH
sudo ufw allow 20:21/tcp
sudo ufw allow 20000:25000/tcp

接下来,执行以下 ufw 命令以启动并启用 UFW。

sudo ufw enable

输入以确认,UFW 应该已在你的 Debian 系统上运行并启用。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

使用以下命令验证 UFW 的详细状态。

sudo ufw status

输出中的 active 确认 UFW 正在运行且已启用。此外,OpenSSH 服务已被添加,vsftpd 服务器的一些端口 20:21/tcp 和 20000:25000/tcp 也已添加。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

配置 FTP 虚拟用户

至此,你已完成 vsftpd 服务器配置,现在你将创建一个新 FTP 用户,用于登录 FTP 服务器并向其中上传文件。

执行以下命令创建新文件 /bin/ftponly。然后,通过下面的 chmod 命令使其可执行。文件 /bin/ftponly 将用作 FTP 用户的默认 shell。

echo -e '#!/bin/sh\necho "Shell for FTP users only."' | sudo tee -a  /bin/ftponly
sudo chmod a+x /bin/ftponly

将文件 /bin/ftponly 添加到 /etc/shells,以确保它是一个有效的 shell。

sudo echo "/bin/ftponly" >> /etc/shells

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

现在通过执行以下命令创建新的 FTP 用户 bob 并设置密码。输入你的密码并重复输入。

sudo useradd -m -s /bin/ftponly bob
sudo passwd bob

之后,运行以下命令为用户 bob 创建新的 chroot 目录 /home/bob/chroot。同时,你将确保 chroot 目录 /home/bob/chroot 具有正确的所有权。

sudo -u bob mkdir -p /home/bob/chroot
sudo chown -R bob: /home/bob/chroot

接下来,运行以下命令创建另外两个新目录 data 和 upload,它们将用于存储 FTP 用户数据。请务必为这些目录配置正确的所有权。

sudo -u bob mkdir -p /home/bob/chroot/{data,upload}
sudo chown -R bob: /home/bob/chroot/{data,upload}

现在运行以下命令,将 /home/bob/chroot 目录的权限更改为 550,并将 data 和 upload 两个目录的权限更改为 750。

sudo chmod 550 /home/bob/chroot
sudo chmod 750 /home/bob/chroot/{data,upload}

既然已创建新用户,请执行以下命令将用户 bob 添加到 /etc/vsftpd.userlist 文件。

echo "bob" >> /etc/vsftpd.userlist

最后,运行以下命令重启 vsftpd 服务并应用更改。执行命令后,你的 FTP 用户 bob 即准备就绪。

sudo systemctl restart vsftpd

上传文件到 FTP 服务器

为了验证你的 vsftpd 服务器安装,你将使用新创建的用户通过 FTP 客户端软件连接到 FTP 服务器。然后,你还将上传新文件以确保安装成功。

在你的本地机器上下载并安装 FTP 客户端。你可以使用 FileZilla,它可安装在 Windows、Linux 和 MacOS 上。安装好 FileZilla 后,打开它以连接到你的安全 FTP 服务器。

输入你的 FTP 服务器 IP 地址,以及 FTP 用户的用户名和密码。然后,点击 Quickconnect 进行确认。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

勾选“Always trust this certificate in future sessions(在将来的会话中始终信任此证书)”选项,然后点击 OK 确认。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

连接到 FTP 服务器后,你应该能在 FTP 服务器上看到两个可用的目录 data 和 upload。你可以向 data 和 upload 两个目录上传文件,但无法向受 chroot 保护的这些目录之外的位置上传文件。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

你可以通过拖放文件将其上传到 FTP 服务器。

在 Debian 12 上使用 vsftpd 搭建安全 FTP 服务器

结论

总结一下,你已成功在 Debian 12 服务器上使用 vsftpd 创建了一个安全的 FTP 服务器。你还通过 UFW(Uncomplicated Firewall,简易防火墙)保护了 FTP 服务器安装,并学会了如何创建 FTP 用户。你现在可以将 FTP 服务器用作本地机器与服务器之间的主要数据传输方式,也可以根据自己的喜好寻找其他 FTP 客户端软件。