FTP登录成功但无法列出目录,根本原因是被动模式下数据端口未放通;需同步配置云安全组(21/21和39000/40000)、宝塔防火墙(21和39000:40000)、Pure-FTPd的PassivePortRange与ForcePassiveIP(设为公网IP)并重启服务。

FTP能登录但“无法检索目录列表”基本就是端口没放通
这不是客户端问题,也不是账号权限问题,而是数据通道被拦在半路。FTP被动模式下,21端口只管发命令,真正传目录、传文件走的是另一批高位端口——如果这些端口没在服务器最外层放行,客户端连上就卡在“正在列出目录...”不动。
云厂商安全组必须同时放行 21 和被动端口范围(如 39000/40000)
很多用户只开了 21,以为就够了。其实 Pure-FTPd 默认用 39000 40000 这个范围开数据端口,但安全组规则里写成 39000-40000 会失败——云平台要求用斜杠 / 分隔起止端口,不是短横线。
- 进腾讯云/阿里云控制台 → 安全组 → 添加入站规则
- 第一条:协议 TCP,端口
21/21,源 IP0.0.0.0/0(或按需限制) - 第二条:协议 TCP,端口
39000/40000,源 IP 同上 - 保存后别忘了点击“应用”或“生效”,部分平台需要手动触发
宝塔面板内置防火墙也要同步放行,它和安全组不互通
宝塔的防火墙是独立运行的,即使云安全组全开了,这里没放行照样拦截。尤其容易漏掉的是端口范围规则——面板里输入 39000-40000 会被识别为单个端口,必须手动输成 39000:40000(注意是英文冒号)才能生效。
- 宝塔左侧菜单 → 安全 → 防火墙
- 点“放行端口”,输
21,提交 - 再点“放行端口”,输
39000:40000,提交(不是短横,不是斜杠) - 确认列表里两项都显示“已启用”,状态图标为绿色
Pure-FTPd 配置里的 PassivePortRange 和 ForcePassiveIP 必须匹配且生效
配置文件里写的端口范围,得和你前面两步放行的一致;而 ForcePassiveIP 如果还指向内网地址(比如 192.168.0.1 或 127.0.0.1),客户端拿到这个IP去连数据端口,根本连不上公网服务器。
- 软件管理 → Pure-Ftpd → 设置 → 配置修改
- 搜
PassivePortRange,确认是未注释的39000 40000(中间空格,不是符号) - 搜
ForcePassiveIP,删掉行首#,把等号后改成你的服务器真实公网IP - 保存 → 返回设置页 → 点“重启服务”,不是“重载配置”
最容易被忽略的是:改完配置不重启服务,或者重启了但没验证 ForcePassiveIP 是否真生效。Pure-FTPd 日志里一旦出现 EPRT failed 或 Connection refused by server,八成就是这儿没对上。

















