Debian FTP服务器故障排查步骤
一 快速定位流程
sudo systemctl status vsftpd、sudo netstat -tulpen | grep ':21\b'。若未运行,启动并设置开机自启:sudo systemctl start vsftpd、sudo systemctl enable vsftpd。ping <服务器IP> 与 telnet <服务器IP> 21 或 nc -vz <服务器IP> 21,判断网络可达与控制端口连通性。sudo journalctl -u vsftpd -xe、tail -n 50 /var/log/vsftpd.log、tail -f /var/log/syslog,定位启动失败、认证失败等关键信息。二 配置与权限核查
sudo vsftpd -t 检查语法;确保配置文件属主与权限正确,例如:sudo chown root:root /etc/vsftpd.conf、sudo chmod 644 /etc/vsftpd.conf。anonymous_enable=NO、local_enable=YES、write_enable=YES、chroot_local_user=YES、allow_writeable_chroot=YES(若启用 chroot 且需可写,推荐改为在用户目录下建立可写子目录)、listen=YES、listen_ipv6=NO、pam_service_name=vsftpd。userlist_enable=YES、userlist_file=/etc/vsftpd.user_list、userlist_deny=NO 并确保该文件存在且可读。chmod a-w /home/ftpuser,并在其下创建可写目录(如 uploads)供上传。三 防火墙与被动模式
sudo ufw allow 21/tcp、sudo ufw status。sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT,必要时 sudo iptables-save > /etc/iptables.rules。pasv_enable=YES、pasv_min_port=40000、pasv_max_port=50000;防火墙放行该区间:sudo iptables -I INPUT -p tcp --dport 40000:50000 -j ACCEPT。如使用公有云或 NAT,建议同时设置 pasv_address=<服务器公网IP>。四 NAT 与网络连通性
sudo tcpdump -ni any 'tcp port 21 or (tcp portrange 40000-50000)',观察控制连接与数据连接是否建立、是否有丢包或重传。五 常见错误对照表
| 现象 | 高频原因 | 快速修复 |
|---|---|---|
| 连接被拒绝或超时 | 服务未运行/未监听 21 | systemctl start vsftpd;`netstat -tulpen |
| 220/530 登录失败 | 用户被 /etc/ftpusers 拒绝;PAM/密码错误 | 检查黑名单与凭据;查看 /var/log/vsftpd.log |
| “500 OOPS: refusing to run with writable root inside chroot()” | chroot 家目录可写 | chmod a-w ~ftpuser,在子目录(如 uploads)下放可写 |
| “500 OOPS: cannot read user list file” | 用户列表文件缺失或不可读 | 创建 /etc/vsftpd.user_list 并修正权限 |
| 能登录但列目录/传输失败 | 被动端口未放行/未配置 | 配置 pasv_min_port/pasv_max_port 并放行;必要时设 pasv_address |
| 数据连接建立失败 | 防火墙/NAT 未放行数据端口 | 放行 20/tcp(主动)或被动端口范围;检查云安全组与路由 DNAT |