下面给你一套在 Debian 上调试 vsftpd(Very Secure FTP Daemon) 的实用思路和步骤,从“看日志 → 查配置 → 测连接 → 排常见坑”逐步来。
dpkg -l | grep vsftpd
启动 / 重启 / 查看状态:
sudo systemctl status vsftpd
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
如果没装:
sudo apt update
sudo apt install vsftpd
编辑:
sudo nano /etc/vsftpd.conf
确保有以下内容(没有就加上):
listen=YES
log_ftp_protocol=YES
xferlog_enable=YES
xferlog_std_format=NO
debug_ssl=YES
log_ftp_protocol=YES会记录非常详细的 FTP 命令,非常适合调试
重启:
sudo systemctl restart vsftpd
sudo tail -f /var/log/vsftpd.log
如果你用的是 systemd(Debian 默认):
sudo journalctl -u vsftpd -f
sudo tail -f /var/log/auth.log
常见错误:
PAM authentication failedlogin failedftp localhost
或:
ftp 127.0.0.1
如果连不上:
telnet localhost 21
应看到:
220 (vsFTPd x.x.x)
可能原因:
nopriv_user)/etc/shells检查:
grep ftp /etc/passwd
用户 shell:
getent passwd 用户名
如果在 /sbin/nologin 或 /bin/false,但你想允许登录:
sudo usermod -s /bin/bash 用户名
或允许 nologin(推荐):
# vsftpd.conf
local_enable=YES
local_enable=YES
write_enable=YES
防火墙或云服务器常见:
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=41000
防火墙放行:
sudo ufw allow 20:21/tcp
sudo ufw allow 40000:41000/tcp
云服务器还要在安全组放行。
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决:
allow_writeable_chroot=YES
或把用户主目录改为只读:
chmod a-w /home/用户名
启用 FTPS:
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
调试:
openssl s_client -connect localhost:21 -starttls ftp
sudo systemctl restart vsftpd
sudo journalctl -u vsftpd -f
另开终端:
ftp localhost
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
log_ftp_protocol=YES
xferlog_enable=YES
debug_ssl=YES
如果你愿意,可以把 具体报错信息(比如 530 / 500 OOPS / 超时)或你的 vsftpd.conf 贴出来,我可以直接帮你定位问题。