调试 Linux 上的 FTP 服务器(如 vsftpd、ProFTPD、pure-ftpd 等)可以从服务状态、配置、日志、网络、权限、客户端几个层面入手。下面以最常见的 vsftpd 为例,系统说明调试方法,并补充通用思路。
systemctl status vsftpd
# 或
service vsftpd status
如未运行:
systemctl start vsftpd
systemctl enable vsftpd
查看监听端口:
ss -lntp | grep :21
# 或
netstat -lntp | grep 21
通常:
/var/log/vsftpd.log
/var/log/messages
/var/log/syslog
实时查看:
tail -f /var/log/vsftpd.log
常见错误信息:
530 Login incorrect → 认证问题500 OOPS → 配置错误550 Permission denied → 文件系统权限问题vsftpd 主配置:
/etc/vsftpd/vsftpd.conf
常见调试相关配置:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
xferlog_enable=YES
log_ftp_protocol=YES
debug_ssl=YES # 如果用 FTPS
修改后重启:
systemctl restart vsftpd
可用命令检查语法:
vsftpd /etc/vsftpd/vsftpd.conf
getent passwd ftpuser
vsftpd 对权限敏感:
ls -ld /home/ftpuser
常见问题:
chroot 时目录属主不能是用户自己示例安全配置:
chmod 755 /home/ftpuser
firewall-cmd --list-all
# 开放 FTP
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
getenforce
如为 Enforcing:
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
查看相关拒绝:
ausearch -m avc -ts recent
FTP 有:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙需放行:
firewall-cmd --add-port=30000-31000/tcp --permanent
客户端连接超时,多半是 PASV 端口未开放。
ftp localhost
或详细模式:
ftp -d localhost
测试被动模式:
ftp> passive
开启:
ssl_enable=YES
调试:
openssl s_client -connect localhost:21 -starttls ftp
| 现象 | 原因 |
|---|---|
| 530 Login incorrect | 密码错 / PAM 限制 |
| 500 OOPS | 配置错误 |
| 550 Permission denied | 目录权限 |
| 连接超时 | 防火墙 / PASV |
| 能登录不能列目录 | chroot / SELinux |
你可以告诉我:
我可以一步步帮你定位问题。