Linux 上的 FTP 服务器无法访问 原因很多,通常可以从 服务、端口、防火墙、SELinux、用户权限、被动模式 等几个方面排查。下面按最常见原因给你一份 系统排查清单。
systemctl status vsftpd
# 或 proftpd
systemctl status proftpd
如果没运行:
systemctl start vsftpd
systemctl enable vsftpd
FTP 默认端口是 21
ss -lntp | grep 21
# 或
netstat -lntp | grep 21
✅ 应看到 0.0.0.0:21 或 :::21
❌ 没监听 → 配置文件问题
firewall-cmd --list-all
放行 FTP:
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
iptables -L -n
如有限制,可临时关闭测试:
systemctl stop firewalld
查看状态:
getenforce
如果是 Enforcing,尝试:
setenforce 0
如果关闭后 FTP 能访问,说明就是 SELinux 问题。
✅ 正确做法(允许 FTP):
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
Entering Passive Mode 后卡住pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙放行:
firewall-cmd --add-port=30000-31000/tcp --permanent
firewall-cmd --reload
cat /etc/vsftpd/user_list
cat /etc/vsftpd/ftpusers
被加入黑名单会被拒绝。
ls -ld /home/username
推荐权限:
chmod 755 /home/username
检查:
cat /etc/vsftpd/vsftpd.conf
常见正确配置:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
ftp localhost
telnet 服务器IP 21
✅ 看到 220 说明端口通
❌ 连接失败 → 网络 / 防火墙问题
tail -f /var/log/vsftpd.log
# 或
journalctl -u vsftpd
客户端无法访问
↓
21 端口是否监听?
↓
防火墙是否放行?
↓
SELinux 是否阻止?
↓
FTP 模式是否正确?
↓
用户/目录权限是否正常?
vsftpd.conf我可以 直接帮你精确定位问题 ✅