宝塔面板FTP功能仅支持Pure-FTPd,添加账号前须确保服务运行、根目录属网站子路径且权限正确、用户名不与系统用户冲突、密码符合强度规则,并开放21端口及被动端口段。

宝塔面板里添加 FTP 账号用的是 Pure-FTPd,不是 vsftpd 或 ProFTPD
宝塔默认只集成 Pure-FTPd,哪怕你装过其他 FTP 服务,面板的「FTP」菜单也只管 Pure-FTPd。如果手动改过配置或卸载重装过,Pure-FTPd 服务没起来,点「添加」会卡住或报错 pure-ftpd: no process found。
实操建议:
- 先在终端执行
systemctl status pure-ftpd,确认服务是 active (running) - 如果没启动,运行
bt 17(宝塔命令行快捷入口),选「Pure-FTPd」重启;或直接systemctl start pure-ftpd - 旧版宝塔(如 7.4 以下)可能默认关闭 Pure-FTPd,需在「软件商店」→「Pure-FTPd」里启用并设置开机自启
添加 FTP 账号时,“根目录”必须是网站根目录的子路径,不能跨站或写绝对路径
面板强制校验:填的路径必须属于某个已创建的网站,比如网站 /www/wwwroot/example.com 存在,那 FTP 根目录只能填 /www/wwwroot/example.com 或它的子目录(如 /www/wwwroot/example.com/upload)。填 /www/wwwroot、/home 或 ../ 会直接提示“目录不存在”。
常见错误现象:
- 填了
/www/wwwroot/example.com却提示“目录不可写”,其实是该目录属主不是www用户,Pure-FTPd 默认以www身份运行 - 想给多个网站共用一个账号?不行。每个 FTP 账号绑定唯一根目录,且仅限一个网站范围内
- 路径末尾加不加
/没影响,但不能包含空格或中文(会导致登录失败,错误信息类似530 Login authentication failed)
FTP 用户名不能和系统用户重名,密码强度受宝塔全局设置限制
宝塔会检查你输的用户名是否已存在于 /etc/passwd,比如你服务器上已有系统用户 admin,再在面板里建同名 FTP 账号会失败,报错 User already exists。这不是 Bug,是 Pure-FTPd 的安全机制——它底层用系统用户模拟 FTP 登录。
实操建议:
- 用户名建议用小写字母+数字组合,避开
root、www、mysql等常见系统用户 - 密码必须满足宝塔后台「面板设置」→「安全」里的「密码强度规则」,比如要求含大小写字母+数字+符号,少一项就提交不了
- 别用「一键生成」后不看就保存——生成的密码可能含
$或!,某些 FTP 客户端(如 FileZilla 旧版)解析会出错,建议手动删掉特殊字符再保存
FTP 连不上?优先查端口、被动模式和防火墙三处
Pure-FTPd 默认用 21 端口(控制连接)+ 随机高端口(数据连接),而宝塔默认只放行 20–21 和 39000–40000 端口段。如果你改过被动端口范围,或用了云厂商安全组,这里最容易漏配。
排查步骤:
- 用
netstat -tlnp | grep :21确认Pure-FTPd在监听 21 端口 - 进宝塔「安全」页面,确认放行了 20–21 和你设的被动端口(默认是 39000–40000);阿里云/腾讯云还要去控制台开对应安全组规则
- FTP 客户端必须开启被动模式(PASV),FileZilla 右键站点 → 编辑 → 传输设置 → 勾选“被动模式”;命令行
ftp工具默认主动模式,基本连不上 - 本地测试可用
telnet your-server-ip 21,通了说明端口和防火墙没问题,不通就回头查上面两点
被动端口范围一旦改过,记得同步更新宝塔「FTP 设置」→「被动端口范围」,否则客户端连上控制连接后,卡在“等待数据连接”就是这个原因。










