首先确认VSFTP服务是否正在运行,使用以下命令查看服务状态:
systemctl status vsftpd
若服务未启动,执行以下命令启动并设置开机自启:
systemctl start vsftpd systemctl enable vsftpd
服务未运行是连接失败的常见原因,需优先排查。
CentOS的防火墙(firewalld)可能阻止FTP流量(默认21端口)。需开放21端口及被动模式端口范围(如10060-10070):
# 开放21端口(控制连接) firewall-cmd --permanent --add-port=21/tcp # 开放被动模式端口范围(数据传输) firewall-cmd --permanent --add-port=10060-10070/tcp # 重新加载防火墙规则 firewall-cmd --reload
若使用iptables,可执行:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 10060:10070 -j ACCEPT service iptables save
防火墙拦截会导致“连接被拒绝”或“无法建立数据连接”。
若SELinux处于Enforcing
模式(默认),可能限制VSFTP操作。需调整以下布尔值:
# 允许FTP访问用户主目录 setsebool -P ftp_home_dir on # 允许FTP完全访问(若仍无法解决) setsebool -P allow_ftpd_full_access on
可通过getenforce
命令查看SELinux状态,临时关闭测试(不推荐生产环境):
setenforce 0
SELinux策略错误常导致“500 OOPS: cannot change directory”等错误。
VSFTP的主配置文件为/etc/vsftpd/vsftpd.conf
,需确保关键参数设置正确:
local_enable=YES
write_enable=YES
(若需上传文件)chroot_local_user=YES
(可选,若需限制用户只能访问主目录)pasv_enable=YES
(若使用被动模式)pasv_min_port=10060
、pasv_max_port=10070
(需与防火墙开放端口一致)修改配置文件后,需重启服务使更改生效:
systemctl restart vsftpd
配置文件错误(如参数拼写错误、缺少等号)会导致服务无法启动或功能异常。
VSFTP的日志文件通常位于/var/log/vsftpd.log
或/var/log/secure
(认证日志),通过以下命令查看最新错误信息:
tail -f /var/log/vsftpd.log # 实时查看VSFTP日志 tail -f /var/log/secure # 查看认证相关日志
常见错误及含义:
/etc/vsftpd.user_list
中未包含该用户。/etc/vsftpd.user_list
文件不存在或权限错误。chmod 755
主目录)。id ftpuser
确认用户已创建。/home/ftpuser
):mkdir -p /home/ftpuser chown ftpuser:ftpuser /home/ftpuser chmod 755 /home/ftpuser
/etc/vsftpd.user_list
:若配置文件中userlist_enable=YES
,需将允许登录的用户添加到/etc/vsftpd.user_list
中(每行一个用户名)。使用ping
命令测试客户端与服务器之间的网络连通性:
ping <服务器IP>
若无法ping通,需检查网络配置(如防火墙、路由器)或服务器IP是否正确。网络不通会导致“连接超时”。
确保21端口未被其他进程占用,使用以下命令查看:
sudo netstat -tuln | grep 21
若端口被占用,可修改VSFTP的监听端口(在/etc/vsftpd.conf
中设置listen_port=新端口
),并在防火墙中开放新端口。
通过以上步骤逐一排查,可解决大部分CentOS上VSFTP连接失败的问题。若仍无法解决,建议结合日志信息进一步分析或参考VSFTP官方文档。