准备工作:选择 FTP 服务器软件
在开始之前,你需要选择一个 FTP 服务器,对于绝大多数 Linux 发行版,vsftpd 是默认且最推荐的选择,因为它非常安全、稳定且配置简单。

- vsftpd (Very Secure FTP Daemon): 我们将重点介绍这个。
- Pure-FTPd: 另一个优秀的选择,功能丰富,易于管理。
使用 vsftpd(推荐)
vsftpd 是 "Very Secure FTP Daemon" 的缩写,是目前最流行、最安全的 FTP 服务器之一。
步骤 1:安装 vsftpd
登录到你的 Linux 服务器(建议使用 SSH),然后根据你的发行版选择以下命令之一:
对于 Debian / Ubuntu:
sudo apt update sudo apt install vsftpd
对于 CentOS / RHEL / Rocky Linux / AlmaLinux:

sudo yum install vsftpd # 或者使用 dnf (较新版本) sudo dnf install vsftpd
安装完成后,vsftpd 服务通常不会自动启动。
步骤 2:启动并设置开机自启
# 启动 vsftpd 服务 sudo systemctl start vsftpd # 设置 vsftpd 服务开机自启 sudo systemctl enable vsftpd
你可以检查服务状态是否正常:
sudo systemctl status vsftpd
如果看到绿色的 active (running),说明服务已成功启动。
步骤 3:配置防火墙
FTP 服务默认使用 21 端口,为了能让外部客户端访问,你需要开放这个端口。

对于使用 ufw (Uncomplicated Firewall) 的系统 (如 Ubuntu):
# 开放 21 端口 sudo ufw allow 21/tcp # (可选) 如果你需要被动模式,还需要开放一个端口范围,60000-61000 sudo ufw allow 60000:61000/tcp
对于使用 firewalld 的系统 (如 CentOS/RHEL):
# 添加永久规则,开放 21 端口 sudo firewall-cmd --permanent --add-service=ftp # (可选) 如果需要被动模式,开放一个端口范围 sudo firewall-cmd --permanent --add-port=60000-61000/tcp # 重新加载防火墙使配置生效 sudo firewall-cmd --reload
步骤 4:配置 vsftpd
这是最关键的一步,默认的配置文件是 /etc/vsftpd.conf,建议先备份原文件,然后进行修改。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak sudo nano /etc/vsftpd.conf
打开文件后,根据你的需求修改或取消注释以下关键配置项:
# 禁止匿名用户登录 (强烈建议) anonymous_enable=NO # 允许本地用户登录 (系统用户) local_enable=YES # 允许写操作 (上传、创建目录等) write_enable=YES # 启用 chroot 功能,将用户限制在其家目录中 (非常重要,用于安全) # 这意味着用户登录后只能看到自己的家目录,无法访问系统其他文件。 chroot_local_user=YES # chroot_local_user=YES,下面这行可以防止 chroot 时出现 500 错误 allow_writeable_chroot=YES # 设置被动模式端口范围 (强烈建议,避免防火墙问题) # 这个范围需要和防火墙中开放的端口范围一致 pasv_min_port=60000 pasv_max_port=61000 # 用户黑名单 (可选) # 如果你希望某些系统用户不能登录FTP,可以将他们加入这个文件 # userlist_file=/etc/vsftpd.userlist # userlist_enable=YES # userlist_deny=NO # NO表示列表中的用户允许登录,YES表示列表中的用户禁止登录
保存并关闭文件(在 nano 中是 Ctrl+X,然后按 Y,再按 Enter)。
步骤 5:创建 FTP 用户
FTP 服务通常使用系统用户来登录,为了安全,建议为 FTP 创建专用的用户,而不是使用 root 或其他系统管理账户。
假设我们要创建一个名为 ftpuser 的用户,并设置其家目录为 /home/ftpuser:
# 创建用户 ftpuser,并设置家目录 sudo useradd -m -d /home/ftpuser ftpuser # 为 ftpuser 设置密码 sudo passwd ftpuser
ftpuser 就可以通过 FTP 访问其家目录 /home/ftpuser 了。
步骤 6:重启 vsftpd 服务
让新的配置生效:
sudo systemctl restart vsftpd
使用 Pure-FTPd
如果你更喜欢 Pure-FTPd,步骤如下:
步骤 1:安装 Pure-FTPd
对于 Debian / Ubuntu:
sudo apt update sudo apt install pure-ftpd
对于 CentOS / RHEL / Rocky Linux / AlmaLinux:
sudo yum install pure-ftpd # 或者使用 dnf sudo dnf install pure-ftpd
步骤 2:启动并设置开机自启
sudo systemctl start pure-ftpd sudo systemctl enable pure-ftpd
步骤 3:配置防火墙
与 vsftpd 相同,需要开放 21 端口和被动模式端口范围。
步骤 4:配置 Pure-FTPd
配置文件通常在 /etc/pure-ftpd/conf/ 目录下,由多个小文件组成,每个文件代表一个配置项。
要禁止匿名登录:
echo "NoAnonymous" | sudo tee /etc/pure-ftpd/conf/NoAnonymous
要启用被动模式并设置端口范围:
echo " passiveports 60000 61000" | sudo tee /etc/pure-ftpd/conf/PassivePortRange
创建 FTP 用户(与 vsftpd 相同):
sudo useradd -m -d /home/ftpuser ftpuser sudo passwd ftpuser
步骤 5:重启 Pure-FTPd 服务
sudo systemctl restart pure-ftpd
安全注意事项
-
强烈建议使用 SFTP:FTP 协议在传输数据时是明文的,包括用户名和密码,非常不安全,在现代网络环境中,强烈建议使用 SFTP (SSH File Transfer Protocol),SFTP 使用 SSH 加密通道,安全性高得多,并且大多数现代 FTP 客户端(如 FileZilla, WinSCP)都支持 SFTP,SFTP 通常是 Linux 服务器上 SSH 服务的一部分,无需额外安装。
-
限制用户访问:使用
chroot功能将用户限制在其家目录内,这是最基本的安全措施。 -
使用强密码:为你的 FTP 用户设置复杂且不易猜测的密码。
-
考虑虚拟用户:如果你不希望 FTP 用户拥有系统 shell 访问权限,可以配置
vsftpd或Pure-FTPd使用虚拟用户(即数据库中的用户,而不是系统用户),这提供了更高的隔离性和安全性,配置虚拟用户比本地用户要复杂一些。
如何连接?
-
使用 FTP 客户端:
- 主机/服务器: 你的服务器 IP 地址 (
168.1.100或ftp.yourdomain.com) - 端口:
21 - 用户名: 你创建的 FTP 用户名 (
ftpuser) - 密码: 你设置的密码
- 主机/服务器: 你的服务器 IP 地址 (
-
使用浏览器:
- 在浏览器地址栏输入
ftp://你的服务器IP,然后按回车。 - 浏览器会弹出对话框,要求输入用户名和密码。
- 注意:通过浏览器访问 FTP 同样是不安全的,因为密码是明文传输的。
- 在浏览器地址栏输入
故障排查
如果连接失败,请检查以下几点:
- 服务状态:确认
vsftpd或pure-ftpd服务正在运行。sudo systemctl status vsftpd
- 防火墙:确认服务器的防火墙(以及云服务商的安全组,如 AWS, Azure, 阿里云)已经开放了 21 端口和被动模式的端口范围。
- SELinux:如果你的系统开启了 SELinux(如 CentOS/RHEL 默认开启),可能会阻止 FTP 服务,可以尝试临时关闭 SELinux 来测试:
sudo setenforce 0
如果可以连接了,说明是 SELinux 策略问题,你需要为 FTP 服务配置正确的 SELinux 策略,而不是永久关闭它。
- 日志文件:查看日志文件是排查问题的最佳方式。
- vsftpd:
/var/log/vsftpd.log - Pure-FTPd:
/var/log/pure-ftpd.log或/var/log/messages
- vsftpd:
- 被动模式:确保客户端和服务器都配置了被动模式,并且端口范围一致,这是最常见的连接失败原因之一。
