在 Linux 上搭建或排查 FTP 服务器(如 vsftpd、proftpd、pure-ftpd 等)时,通常可以按下面这套思路来“排错”。下面以最常见的 vsftpd 为主,也兼顾通用问题。
systemctl status vsftpd
# 或
service vsftpd status
没启动就启动:
systemctl start vsftpd
systemctl enable vsftpd
FTP 默认端口:
查看监听:
netstat -tunlp | grep :21
# 或
ss -tunlp | grep :21
如果没监听:
listen=NO 或端口被改firewall-cmd --list-all
放行 FTP:
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
iptables -L -n
被动模式还需放行被动端口范围(见后文)。
查看状态:
getenforce
如果是 Enforcing,常导致:
常见修复:
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
查看 FTP 相关布尔值:
getsebool -a | grep ftp
主配置文件:
/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=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
pasv_address=公网IP
/etc/vsftpd/user_list 或 ftpusers 中查看:
cat /etc/vsftpd/ftpusers
cat /etc/vsftpd/user_list
ls -ld /home/ftpuser
write_enable=YES/var/log/vsftpd.log
/var/log/messages
/var/log/secure
打开详细日志:
xferlog_enable=YES
log_ftp_protocol=YES
ftp localhost
ftp -p localhost
tcpdump -i any port 21
如果你愿意,可以告诉我:
我可以直接帮你定位问题。