可能原因:服务未启动、防火墙拦截、配置文件错误、网络不通。
解决方法:
systemctl status vsftpd确认vsftpd是否运行,未运行则用systemctl start vsftpd启动。firewalld,执行firewall-cmd --permanent --add-service=ftp添加FTP服务并firewall-cmd --reload重载;若使用iptables,添加规则iptables -A INPUT -p tcp --dport 21 -j ACCEPT。/etc/vsftpd.conf是否有语法错误(如listen=YES需开启监听),修改后用vsftpd -t测试配置有效性。ping <服务器IP>确认客户端与服务器网络通畅,用telnet <服务器IP> 21测试FTP端口是否开放。可能原因:用户名/密码错误、vsftpd.user_list限制、SELinux阻止、PAM配置问题。
解决方法:
/etc/vsftpd.user_list默认拒绝列表中的用户登录,若需允许,修改/etc/vsftpd.conf中的userlist_deny=NO。Enforcing模式,执行setsebool ftpd_disable_trans 1允许FTP传输,或setsebool ftp_home_dir 1允许访问家目录;永久生效需修改/etc/selinux/config中的SELINUX=permissive。/etc/pam.d/vsftpd文件是否存在auth required pam_listfile.so等限制规则,确保未错误拦截用户。可能原因:目录权限不足、chroot限制、SELinux阻止。
解决方法:
chown ftpuser:ftpuser /home/ftpuser(ftpuser为FTP用户名)和chmod 755 /home/ftpuser。chroot与写入权限:若/etc/vsftpd.conf中chroot_local_user=YES(锁定用户在家目录),需添加allow_writeable_chroot=YES允许用户修改家目录内容。setsebool ftpd_disable_trans 1临时解决,或修改SELinux布尔值永久生效。可能原因:配置文件语法错误、SELinux阻止、目录权限问题。
解决方法:
vsftpd -t命令测试/etc/vsftpd.conf的语法正确性,修复如anonymous_enable=YES(允许匿名)与local_enable=NO(禁止本地用户)的矛盾配置。getenforce查看SELinux状态,若为Enforcing,用setsebool ftpd_disable_trans 1允许FTP传输,或setsebool ftp_home_dir 1允许访问家目录。/home/ftpuser),且路径拼写正确。可能原因:防火墙未开放被动模式端口范围、vsftpd.conf中被动模式配置错误。
解决方法:
/etc/vsftpd.conf中添加pasv_enable=YES(开启被动模式)、pasv_min_port=10060(最小端口)、pasv_max_port=10070(最大端口)。firewalld,执行firewall-cmd --permanent --add-port=10060-10070/tcp添加端口范围并firewall-cmd --reload;若使用iptables,添加iptables -A INPUT -p tcp --dport 10060:10070 -j ACCEPT。可能原因:关键参数设置错误(如listen、anonymous_enable)、多余空格或拼写错误。
解决方法:
/etc/vsftpd.conf中listen=YES(启用独立监听)、local_enable=YES(允许本地用户登录)、write_enable=YES(允许上传)、chroot_local_user=YES(锁定家目录,可选)等参数设置正确。listen = YES应改为listen=YES),防止解析错误。vsftpd -t命令测试,无错误后再重启服务(systemctl restart vsftpd)。可能原因:无法确定具体故障原因。
解决方法:
/var/log/vsftpd.log(部分系统可能在/var/log/messages或/var/log/xferlog),使用tail -f /var/log/vsftpd.log实时查看连接、登录、权限等操作的详细错误信息,根据日志提示定位问题。