Ubuntu 与 vsftpd 连接问题排查与修复
一 快速自检清单
sudo systemctl status vsftpd,若未运行执行:sudo systemctl start vsftpd && sudo systemctl enable vsftpd。/etc/vsftpd.conf:确保启用监听(listen=YES)、允许本地登录(local_enable=YES)、允许写入(write_enable=YES)、按需限制主目录(chroot_local_user=YES)。修改后重启:sudo systemctl restart vsftpd。sudo ufw allow 21/tcp、sudo ufw allow 20/tcp、sudo ufw allow 40000:50000/tcp、sudo ufw allow 990/tcp、sudo ufw reload。二 常见症状与对应处理
/etc/ftpusers 黑名单);必要时查看认证日志 /var/log/auth.log。write_enable=YES;检查目标目录属主与权限(如 chown ftpuser:ftpuser /path、chmod 755 /path);确保磁盘未满。pasv_address=<服务器公网IP> 与 pasv_min_port/pasv_max_port(如 40000:50000),并在防火墙放行该端口段;客户端开启被动。ssl_enable=YES,证书路径正确(rsa_cert_file、rsa_private_key_file),必要时开放 990/TCP;客户端选择“显式 FTP over TLS”。三 关键配置示例
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
pasv_enable=YES
pasv_address=<你的公网IP>
pasv_min_port=40000
pasv_max_port=50000
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
修改后执行:sudo systemctl restart vsftpd,并放行相应端口。
四 日志定位与权限修复
sudo tail -f /var/log/auth.logsudo tail -f /var/log/vsftpd.log(若配置了 xferlog_file,也检查该文件)sudo adduser ftpusersudo chown ftpuser:ftpuser /home/ftpuser、sudo chmod 755 /home/ftpusersudo mkdir -p /home/ftpuser/upload && sudo chown ftpuser:ftpuser /home/ftpuser/upload && sudo chmod 755 /home/ftpuser/upload/etc/ftpusers 是否包含该用户;必要时在 /etc/vsftpd.user_list 中按 userlist_enable/userlist_deny 的策略进行放行或封禁。五 网络与安全组要点