在 Debian 上调试 vsftpd(Very Secure FTP Daemon) 时,一般从 日志、配置、权限、网络、SELinux/AppArmor 几个方面入手。下面给你一个比较系统的调试流程(从最常见到进阶)。
dpkg -l | grep vsftpd
systemctl status vsftpd
如果没启动:
systemctl start vsftpd
systemctl enable vsftpd
查看是否监听端口(默认 21):
ss -lntp | grep :21
sudo nano /etc/vsftpd.conf
# 打开日志
xferlog_enable=YES
log_ftp_protocol=YES
debug_ssl=YES
⚠️ 注意
log_ftp_protocol=YES会记录所有 FTP 命令,只建议在调试时开启。
sudo systemctl restart vsftpd
Debian 下通常是:
/var/log/vsftpd.log
如果没看到,检查一下:
ls /var/log | grep ftp
grep ftp /var/log/syslog
或:
journalctl -u vsftpd
local_enable=YES
userlist_enable=YES
userlist_deny=YES
查看用户列表:
cat /etc/vsftpd.user_list
✅ 解决方法:
userlist 移除userlist_deny=NO常见原因:
查看 PAM:
cat /etc/pam.d/vsftpd
测试本地登录是否正常:
su - 用户名
ls -ld /home/ftp
write_enable=YES
如果是匿名用户:
anon_upload_enable=YES
anon_mkdir_write_enable=YES
chown ftpuser:ftpuser /home/ftp
chmod 755 /home/ftp
客户端卡在 LIST 或超时。
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙放行:
ufw allow 30000:31000/tcp
云服务器还要放行 安全组。
ftp localhost
或:
lftp localhost
测试步骤:
pwdlsputget⚠️ 如果 ls 失败,90% 是被动模式问题。
查看是否被限制:
aa-status
临时测试:
systemctl stop apparmor
systemctl restart vsftpd
如果恢复正常,说明是 AppArmor 限制。
解决方式:
/etc/apparmor.d/usr.sbin.vsftpd✅ 是否启动
✅ 是否监听 21
✅ 是否开启日志
✅ 是否允许 local_enable
✅ 是否 write_enable
✅ 是否被动端口 + 防火墙
✅ 是否 AppArmor
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
xferlog_enable=YES
log_ftp_protocol=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
如果你愿意,可以把 具体报错信息(如 530 / 500 / 425)或 vsftpd.log 内容贴出来,我可以帮你精确定位问题。