首先检查VSFTP服务是否正常运行,若未启动会导致无法连接。使用以下命令查看状态:
sudo systemctl status vsftpd
若未运行,启动服务并设置开机自启:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
CentOS默认使用firewalld管理防火墙,需开放FTP核心端口及被动模式端口范围:
pasv_enable=YES),需开放自定义端口范围(如10060-10070,可根据需求调整)。# 开放21端口(FTP控制端口)
sudo firewall-cmd --permanent --add-port=21/tcp
# 开放被动模式端口范围(示例:10060-10070)
sudo firewall-cmd --permanent --add-port=10060-10070/tcp
# 重新加载防火墙使规则生效
sudo firewall-cmd --reload
注:若使用
iptables防火墙,需执行以下命令:sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 10060:10070 -j ACCEPT sudo service iptables save
若SELinux处于Enforcing模式(默认),需调整以下策略以允许FTP访问:
# 临时允许(立即生效,重启失效)
sudo setsebool -P ftp_home_dir on
sudo setsebool -P allow_ftpd_full_access on
# 永久修改(需重启服务器)
# 编辑/etc/selinux/config,将SELINUX=enforcing改为disabled
确保VSFTP配置文件(/etc/vsftpd/vsftpd.conf)中的关键参数设置正确,避免因配置错误导致连接失败:
anonymous_enable=NO(禁止匿名登录)、local_enable=YES(允许本地用户登录);write_enable=YES(允许用户上传文件);pasv_enable=YES(启用被动模式)、pasv_min_port=10060/pasv_max_port=10070(设置被动模式端口范围)。修改配置文件后,使用以下命令验证语法是否正确:
sudo vsftpd -t
若无错误,重启VSFTP服务使配置生效:
sudo systemctl restart vsftpd
确保FTP用户的主目录存在且权限正确,避免“Permission denied”错误:
sudo useradd -d /data/ftp/mydata ftpadmin # 创建用户并指定主目录
sudo passwd ftpadmin # 设置用户密码
sudo chown -R ftpadmin:ftpadmin /data/ftp/mydata # 修改目录所有者
sudo chmod -R 755 /data/ftp/mydata # 所有者可读写执行,其他用户可读执行(避免777,存在安全风险)
若21端口被其他进程占用,会导致VSFTP无法启动或连接。使用以下命令检查端口占用情况:
sudo netstat -tuln | grep 21
若被占用,可修改VSFTP监听端口(在vsftpd.conf中修改listen_port参数),并在防火墙中开放新端口。
若以上步骤均无法解决,可通过日志文件定位具体错误:
/var/log/vsftpd.log(部分系统可能在/var/log/messages);journalctl -xe。根据日志中的错误信息(如“530 Login incorrect”“Connection timed out”),针对性调整配置。
通过以上步骤,可逐步解决VSFTP与CentOS防火墙的冲突问题。若仍有疑问,建议参考VSFTP官方文档或社区论坛获取进一步支持。