在 CentOS 系统中部署和使用 vsftpd(Very Secure FTP Daemon)是一项常见的需求,它以其高效、稳定和安全的特性被广泛采用,本文将详细介绍如何在 CentOS 环境下启动并配置 vsftpd 服务,涵盖从安装到基础运行的全过程,并解答一些常见问题,确保您能够顺利搭建起一个功能完善的 FTP 服务器。

安装 vsftpd 服务
在启动 vsftpd 之前,首先需要确保它已经安装在您的系统上,CentOS 提供了强大的包管理工具,可以轻松完成安装。
打开终端,执行以下命令来安装 vsftpd:
sudo yum install vsftpd -y
这里的 yum 是 CentOS 7 及更早版本使用的包管理器,在 CentOS 8 及更新的 Stream 版本中,它是指向 dnf 的一个符号链接,因此该命令同样适用。-y 参数会自动回答“是”,避免在安装过程中出现交互式确认。
安装完成后,vsftpd 服务默认是未启动的,并且也不会在系统重启后自动运行,我们将进行服务的启动与管理。
启动与管理 vsftpd 服务
CentOS 7 及以上版本使用 systemd 作为初始化系统和服务管理器,因此我们将通过 systemctl 命令来管理 vsftpd 服务。
启动 vsftpd 服务
sudo systemctl start vsftpd
执行此命令后,vsftpd 服务会立即在后台开始运行,监听默认的 21 端口。
设置开机自启 为了确保服务器重启后 FTP 服务能自动恢复运行,需要将其设置为开机自启:
sudo systemctl enable vsftpd
检查服务状态
确认服务是否成功启动并正在运行,可以使用 status 命令:

sudo systemctl status vsftpd
如果输出中包含 active (running) 的绿色字样,则表示服务运行正常,您还可以看到进程号(PID)、监听端口等详细信息,如果服务未运行,此命令会提供有用的错误日志,帮助排查问题。
停止与重启服务 在配置更改或维护时,可能需要停止或重启服务:
# 停止服务 sudo systemctl stop vsftpd # 重启服务(推荐在修改配置文件后使用) sudo systemctl restart vsftpd
配置防火墙
服务启动后,如果客户端无法连接,最常见的原因是防火墙阻止了 FTP 端口,CentOS 默认使用 firewalld 作为防火墙管理工具,您需要为 FTP 开放通行权限。
开放 FTP 服务(默认端口 21)
sudo firewall-cmd --permanent --add-service=ftp
--permanent 参数表示此规则永久生效,即使系统重启也不会丢失。
重载防火墙配置
添加规则后,需要重载 firewalld 使其立即生效:
sudo firewall-cmd --reload
配置被动模式端口范围(可选但推荐) FTP 协议有主动和被动两种模式,被动模式(PASV)对客户端的网络环境更友好,因为它由客户端发起数据连接,为了避免防火墙对大量动态端口的干扰,通常会在 vsftpd 中配置一个固定的被动模式端口范围。
编辑 vsftpd 的主配置文件:
sudo vi /etc/vsftpd/vsftpd.conf
在文件末尾添加以下两行,指定一个较窄的端口范围,10000-10100:

pasv_min_port=10000
pasv_max_port=10100
保存文件后,重启 vsftpd 服务:
sudo systemctl restart vsftpd
在 firewalld 中开放这个端口范围:
sudo firewall-cmd --permanent --add-port=10000-10100/tcp sudo firewall-cmd --reload
基础配置文件解析
vsftpd 的所有行为都由其主配置文件 /etc/vsftpd/vsftpd.conf 控制,以下是一些关键参数的说明,您可以根据需求进行调整。
| 参数 | 说明 | 推荐值 |
|---|---|---|
anonymous_enable |
是否允许匿名用户登录 | NO |
local_enable |
是否允许系统本地用户登录 | YES |
write_enable |
是否允许任何形式的写入操作(上传、删除等) | YES |
chroot_local_user |
是否将所有本地用户限制在其主目录内,防止访问其他目录 | YES |
listen |
是否以独立模式运行(推荐) | YES |
listen_ipv6 |
是否监听 IPv6 | NO (如果不需要) |
修改完配置文件后,务必执行 sudo systemctl restart vsftpd 使更改生效。
相关问答 FAQs
Q1: 我已经启动了 vsftpd 并开放了 21 端口,为什么用 FileZilla 等客户端连接时,可以登录但无法列出目录,一直卡在“读取目录列表”阶段?
A1: 这通常是被动模式配置问题,客户端在登录后,会尝试建立被动模式的数据连接,但服务器指定的端口被防火墙阻止了,请按照上文“配置被动模式端口范围”的步骤,在 vsftpd.conf 中设置 pasv_min_port 和 pasv_max_port,然后在 firewalld 中开放对应的 TCP 端口范围,最后重启 vsftpd 和防火墙服务即可解决。
Q2: 我在登录 FTP 时收到了“530 Login incorrect”错误,但我的用户名和密码确定是正确的,这是怎么回事? A2: 这个错误不一定意味着密码错误,请检查以下几点:
- 用户 Shell 限制:检查该 FTP 用户是否被设置了无法登录的 shell,
/sbin/nologin或/bin/false,您可以通过cat /etc/passwd | grep username查看,如果设置了,可以更改为/bin/bash(需权衡安全性)。 - PAM 认证模块:vsftpd 使用 PAM 进行认证,检查
/etc/pam.d/vsftpd文件,确保其中的认证规则没有被错误修改。 - 查看日志:最直接的排查方法是查看系统安全日志,执行
sudo tail -f /var/log/secure或sudo journalctl -u vsftpd,在尝试登录的同时观察日志输出,通常会给出具体的失败原因,如“user not found”、“authentication failure”等。