本教程适用于以下操作系统版本
- 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

现在使用下面的 apt install 命令安装 vsftpd 软件包。
sudo apt install vsftpd
输入 y 并按下 ENTER 键以确认安装。

安装 vsftpd 后,vsftpd 服务将自动运行并启用。使用以下命令验证 vsftpd 服务。
sudo systemctl is-enabled vsftpd
sudo systemctl status vsftpd
以下输出确认 vsftpd 服务正在运行且已启用。此外,vsftpd 服务将在系统启动时自动运行。

配置 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。

现在执行以下命令,创建用于存储 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

安装 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 系统上运行并启用。

使用以下命令验证 UFW 的详细状态。
sudo ufw status
输出中的 active 确认 UFW 正在运行且已启用。此外,OpenSSH 服务已被添加,vsftpd 服务器的一些端口 20:21/tcp 和 20000:25000/tcp 也已添加。

配置 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

现在通过执行以下命令创建新的 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 进行确认。

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

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

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

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