在 CentOS 上排查 FTP Server(通常是 vsftpd) 问题,可以按下面步骤系统性排错。
rpm -qa | grep vsftpd
或
which vsftpd
systemctl status vsftpd
若未启动:
systemctl start vsftpd
systemctl enable vsftpd
firewall-cmd --list-all
放行 FTP:
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
⚠️ 若使用 被动模式(PASV),还需放行被动端口范围(见下文)
getenforce
setenforce 0
如果关闭后能连,说明是 SELinux 限制。
setsebool -P ftpd_full_access on
若 FTP 目录不是 /var/ftp:
semanage fcontext -a -t public_content_t "/data/ftp(/.*)?"
restorecon -Rv /data/ftp
配置文件:
/etc/vsftpd/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_min_port=30000
pasv_max_port=31000
修改后重启:
systemctl restart vsftpd
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
firewall-cmd --add-port=30000-31000/tcp --permanent
firewall-cmd --reload
tail -f /var/log/vsftpd.log
(若未开启,在配置中加:)
xferlog_enable=YES
journalctl -u vsftpd -f
ftp localhost
ftp -p ip_address
| 现象 | 原因 |
|---|---|
| 能连但不能列目录 | 防火墙 / PASV 端口 |
| 530 Login incorrect | 用户被禁 / PAM 问题 |
| 500 OOPS: chroot | chroot 目录权限 |
| 访问被拒 | SELinux |
| 超时 | 被动端口未放行 |
如果你愿意,可以把 具体报错信息 / vsftpd.conf / CentOS 版本 发出来,我可以直接帮你精确定位。