排查步骤:
systemctl status vsftpd检查服务运行状态,若未启动,尝试systemctl start vsftpd启动服务。/var/log/vsftpd.log或/var/log/secure)定位具体错误(如配置文件语法错误、端口冲突)。/etc/vsftpd/vsftpd.conf)是否有语法错误(如缺少引号、无效参数),可通过vsftpd -t命令测试配置文件有效性。排查步骤:
systemctl status vsftpd)。firewall-cmd --list-ports检查21端口(控制连接)及被动模式端口范围(如40000-50000)是否开放;若未开放,执行firewall-cmd --permanent --add-port=21/tcp和firewall-cmd --permanent --add-port=40000-50000/tcp,然后firewall-cmd --reload。setenforce 0);永久解决可配置SELinux策略:setsebool -P ftp_home_dir 1(允许访问家目录)、setsebool -P allow_ftpd_full_access 1(允许完整FTP访问)。ping <服务器IP>检查客户端与服务器的网络连通性;使用netstat -antup | grep vsftpd确认vsftpd是否监听21端口。pasv_enable=YES、pasv_min_port和pasv_max_port,并确保防火墙开放该端口范围。常见原因及解决:
/etc/ftpusers文件,若用户在该文件中,需删除或注释对应行(该文件默认禁止root、ftp等用户登录)。/etc/vsftpd/vsftpd.conf,确保local_enable=YES(允许本地用户登录)、anonymous_enable=NO(若禁止匿名登录)。/etc/pam.d/vsftpd文件,确保没有错误的认证规则(如auth required pam_shells.so会限制无shell访问的用户)。/etc/ftpusers,编辑该文件删除对应行,重启vsftpd服务即可。排查步骤:
chmod 755 /data/ftp,chmod 777 /data/ftp/pub,注意:chmod 777仅用于测试,生产环境建议限制为755或更严格)。setsebool -P ftp_home_dir 1允许访问家目录,或setsebool -P allow_ftpd_full_access 1允许完整FTP访问;若需更细粒度控制,可使用semanage fcontext -a -t public_content_rw_t "/data/ftp(/.*)?"设置目录上下文,然后restorecon -Rv /data/ftp应用更改。chroot_local_user=YES限制用户在家目录,需确保用户主目录存在且所有权正确(如chown -R ftpuser:ftpuser /data/ftp)。777,建议设置为755,上传目录设为777(或更严格的775)。原因:被动模式下,客户端无法连接到服务器的被动端口范围(vsftpd未开放该端口或防火墙拦截)。
解决步骤:
/etc/vsftpd/vsftpd.conf中启用被动模式:pasv_enable=YES。pasv_min_port=40000、pasv_max_port=50000。firewall-cmd --permanent --add-port=40000-50000/tcp,然后firewall-cmd --reload。semanage port -a -t ftp_port_t -p tcp 40000:50000,然后restorecon -Rv /etc/vsftpd。排查步骤:
/etc/vsftpd/vsftpd.conf文件语法:使用vsftpd -t命令测试,若有错误会提示具体行号。anonymous_enable=YES与local_enable=NO同时存在(禁止匿名登录但未允许本地用户登录)。chroot_local_user=YES与allow_writeable_chroot=NO同时存在(限制用户在家目录但未允许写入,会导致“553 Could not create file”错误)。systemctl restart vsftpd。cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak)。排查步骤:
df -h命令检查磁盘空间使用情况,若根分区(/)或用户主目录所在分区空间不足(如使用率超过90%),需清理无用文件(如/var/log下的旧日志、/tmp下的临时文件)。/data/ftp)。df -i检查)。