Debian FTPServer故障排除
小樊
34
2025-12-18 02:55:16
Debian FTP Server 故障排除手册
一 快速定位流程
- 服务状态与自启
- 检查运行状态:systemctl status vsftpd
- 启动/重启/开机自启:systemctl start|restart|enable vsftpd
- 日志优先
- 服务日志:journalctl -u vsftpd -xe
- FTP 专用日志:tail -n 100 /var/log/vsftpd.log
- 监听与连通
- 监听端口:ss -ltnp | grep ‘:21|:20’
- 连通性测试:控制通道 nc -vz your_ip 21;数据通道(被动)可先测端口范围如 nc -vz your_ip 40000-50000
- 防火墙与 NAT
- 防火墙放行:ufw allow 21/tcp 或 iptables -I INPUT -p tcp --dport 21 -j ACCEPT
- 被动端口范围放行(示例):iptables -I INPUT -p tcp --dport 40000:50000 -j ACCEPT
- NAT/云主机:在网关或安全组做 21/TCP 及被动端口段 的端口转发
二 常见故障与修复
- 服务未启动或配置错误
- 现象:连接被拒绝或超时
- 处理:查看 journalctl -u vsftpd 与 /var/log/vsftpd.log 的错误行;修正 /etc/vsftpd.conf 后执行 systemctl restart vsftpd
- 用户列表文件问题
- 现象:500 OOPS: cannot read user list file:/etc/vsftpd.user_list
- 处理:创建文件并赋权,例如:
- echo “ftpuser” | sudo tee -a /etc/vsftpd.user_list
- chmod 644 /etc/vsftpd.user_list
- 配置项:userlist_enable=YES、userlist_file=/etc/vsftpd.user_list、userlist_deny=NO
- chroot 可写根目录限制
- 现象:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- 处理(二选一):
- 给可写目录单独授权:chmod a-w /home/ftpuser;mkdir /home/ftpuser/uploads;chown ftpuser:ftpuser /home/ftpuser/uploads
- 允许可写根(安全性较低):在 vsftpd.conf 中加入 allow_writeable_chroot=YES
- 被动模式失败(登录成功但列目录/传输卡住)
- 现象:PORT 命令成功但数据通道不通
- 处理:启用被动并固定端口范围,例如:
- pasv_enable=YES;pasv_min_port=40000;pasv_max_port=50000
- 公网出口 IP(云主机/有 NAT 时必需):pasv_address=你的公网IP
- 防火墙放行 21/TCP 与 40000-50000/TCP
- 登录失败或权限不足
- 现象:Login incorrect、Permission denied
- 处理:核对用户名/密码;检查 /etc/ftpusers 是否禁止该用户;确认家目录与上传目录的属主与权限(如 chown ftpuser:ftpuser、目录可写)
三 配置与防火墙要点
- 最小可用 vsftpd 配置示例(本地用户 + 被动模式)
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- local_umask=022
- chroot_local_user=YES
- allow_writeable_chroot=YES # 若采用“可写根”方案
- pasv_enable=YES
- pasv_min_port=40000
- pasv_max_port=50000
- pasv_address=你的公网IP
- userlist_enable=YES
- userlist_file=/etc/vsftpd.user_list
- userlist_deny=NO
- listen=YES
- listen_ipv6=NO
- pam_service_name=vsftpd
- tcp_wrappers=YES
- 防火墙与云安全组
- 放行控制端口:ufw allow 21/tcp 或 iptables -I INPUT -p tcp --dport 21 -j ACCEPT
- 放行被动端口范围:iptables -I INPUT -p tcp --dport 40000:50000 -j ACCEPT
- 云主机:在控制台安全组同时放行 21/TCP 与 40000-50000/TCP
- 端口转发(NAT 场景)
- 路由器/防火墙将 21/TCP → 内网服务器IP:21
- 将 40000-50000/TCP → 内网服务器IP:40000-50000
- vsftpd 配置 pasv_address=公网IP 以告知客户端正确数据通道地址
四 客户端验证与抓包
- 命令行快速验证
- 连接与登录:ftp your_ip(或使用 lftp)
- 被动端口连通性:nc -vz your_ip 40000-50000
- 图形化客户端
- 使用 FileZilla,协议选 FTP - 显式 FTP over TLS(若启用 TLS) 或普通 FTP;加密选择要与服务器一致;被动模式端口范围填写 40000-50000
- 抓包定位
- 在服务器抓包:tcpdump -ni any ‘port 21 or (portrange 40000-50000)’ -w ftp.pcap
- 分析是否有 TCP 重传、重复 ACK、数据通道未建立 等异常