发布时间:2026-09-20 05:00 更新时间:2026-09-20 05:00 阅读量:0
用宝塔面板建站,很多人习惯用FTP上传文件。但装好Pure-FTPd之后,客户端经常卡在“正在连接”“读取目录列表失败”,或者能登录却看不到文件。这类问题九成出在三个地方:被动模式的端口范围没放行、防火墙或云安全组拦了数据连接、FTP用户的目录归属与权限不对。下面按排查顺序讲清楚每一步该看什么、改什么。
FTP和普通服务不一样,它用两条连接:一条控制连接(默认21端口)发命令,一条数据连接传文件。主动模式(PORT)下由服务器主动回头连客户端,客户端在NAT后面基本连不上;被动模式(PASV)下服务器告诉客户端“你连我这个端口”,端口是随机的,范围不固定就会被防火墙当成陌生流量丢掉。所以现代客户端默认都走被动模式,而服务器必须明确一段被动端口范围并在防火墙放行,这是FTP连不上的头号原因。
宝塔面板的Pure-FTPd默认没有开被动模式,需要手动在配置里加一段。打开宝塔面板 → 软件商店 → Pure-FTPd → 设置 → 配置修改,找到配置文件(通常是 /www/server/pure-ftpd/etc/pure-ftpd.conf),加入或修改以下几行,具体以实际版本生成的配置文件为准:
# 开启被动模式并指定端口范围
PassivePortRange 39000 40000
服务器公网IP,让服务器在PASV应答里返回正确地址
ForcePassiveIP 你的公网IP
改完保存,回到宝塔软件管理里重载或重启Pure-FTPd。只改配置不放行端口,等于白改,下一步就是防火墙。
很多人只放行了21端口,结果能登录、一到列表或上传就失败。控制连接走21,数据连接走的是上面设置的39000-40000。需要在三个层面依次确认:服务器本机防火墙、云厂商安全组、以及宝塔面板自带的防火墙插件(如果启用了)。
以常见的firewalld为例,放行21和被动端口段:
# 放行FTP控制端口
firewall-cmd --permanent --add-port=21/tcp
放行被动模式端口段
firewall-cmd --permanent --add-port=39000-40000/tcp
firewall-cmd --reload
查看已放行端口,确认生效
firewall-cmd --list-ports
如果系统用的是iptables或ufw,命令写法不同,按当前系统实际规则处理。别忘了云服务器控制台里的安全组——它和系统防火墙是两套独立规则,只放行一边仍然连不上。阿里云、腾讯云等控制台里添加入方向规则:21/tcp 以及 39000-40000/tcp,授权对象按需填写,测试阶段可先放开自己的IP。
排查时可以用一条命令快速判断端口是否真的通:在本地电脑执行 telnet 服务器IP 21,能连上说明控制连接没问题;再用客户端开被动模式试传一个小文件。如果21通、传文件失败,基本就是被动端口段没放行。部分客户端还能关闭被动模式试试,但多数家用网络下主动模式走不通,还是老实放行端口更稳。
端口都通了,还是“读取目录列表失败”或登录后目录为空,就要看FTP用户本身。宝塔创建的FTP账号默认会被限制在对应网站的目录里,用户和目录归属必须匹配,否则连目录都进不去。
先确认FTP用户是否存在、家目录指向哪里。宝塔里可以在面板 → FTP 页面查看,也可以用命令查系统用户:
# 查看FTP用户信息(宝塔通常以网站名或自定义名建用户)
grep ftp用户名 /etc/passwd
查看网站目录归属,宝塔Web目录一般是www用户
ls -ld /www/wwwroot/你的站点目录
常见坑有这几个:目录属主是root而FTP用户不是root,导致无法写入;目录权限被设成700,同组用户也进不去;宝塔FTP账号绑定的目录写错,指向了不存在的路径。正确做法是让目录属主为www、权限保持755,FTP用户加入www组即可读写,具体取舍参考站点自身需求。若你手动改过目录权限,可用chown和chmod修正:
# 把站点目录交给www用户与组
chown -R www:www /www/wwwroot/你的站点目录
目录755、文件644是较通用的安全设置
find /www/wwwroot/你的站点目录 -type d -exec chmod 755 {} \;
find /www/wwwroot/你的站点目录 -type f -exec chmod 644 {} \;
另外,Pure-FTPd日志能直接告诉你失败原因,位置一般在 /www/server/pure-ftpd/var/log/ 或通过面板日志查看,出现“550”“530”这类返回码时对照官方文档判断是权限还是认证问题。
FTP连不上,按“被动端口是否配置并放行 → 云安全组与本机防火墙是否一致 → FTP用户与目录归属权限是否正确”三步走,基本能覆盖绝大多数情况。改完配置记得重启Pure-FTPd,只重载面板不重启服务有时不生效。如果你只是偶尔传几个文件,也可以考虑用宝塔面板自带的文件管理器或SFTP替代FTP,少一层端口放行的麻烦,安全性也更好一些。
| 📑 | 📅 |
|---|---|
| WordPress邮件发不出去:wp_mail走SMTP还是sendmail与SPF/DKIM检查 | 2026-09-20 |
| 宝塔面板SSL证书部署后HTTP/2没生效:协议开启、ALPN检查与Nginx版本差异 | 2026-09-19 |
| WordPress改域名后打不开:siteurl与home改错的救援步骤 | 2026-09-19 |
| Cloudflare 后真实访客 IP 丢失:CF-Connecting-IP 与 Nginx real_ip 配置 | 2026-09-19 |
| Nginx日志按天切割实操:logrotate配置与不生效排查 | 2026-09-19 |
| robots.txt写错导致整站被屏蔽:误写排查与sitemap配合 | 2026-09-20 |
| WordPress后台上传图片报错:权限、临时目录与尺寸限制逐项定位 | 2026-09-20 |
| Nginx缓存与浏览器缓存协同:expires、Cache-Control与强刷不生效的原因 | 2026-09-20 |
| Nginx try_files 到底怎么走:root/alias 差异与伪静态失效排查 | 2026-09-21 |
| 宝塔面板 open_basedir、禁用函数与上传目录协同配置 | 2026-09-21 |