每个站点应配独立ftp账号,主目录须精确指向其wwwroot子目录(如/www/wwwroot/example.com),禁访问上级目录,目录属主为www:www、权限755,账号名带站点标识,密码需符合pure-ftpd要求。

宝塔面板怎么给每个站点配独立 FTP 账号
宝塔默认的 FTP 服务(Pure-FTPd)支持按目录隔离,但必须手动绑定到具体站点根目录,且不能靠“用户组”自动继承权限——直接在 FTP 管理页新建账号时选错路径或权限,会导致用户能跨站访问甚至删掉其他站点文件。
正确做法是:每个 FTP 账号的主目录必须精确指向某一站点的wwwroot子目录(如 /www/wwwroot/example.com),且勾选禁止访问上级目录;同时确保该目录归属为www:www,FTP 用户权限设为读写即可,不要开删除或重命名(除非真需要)。
- 新建 FTP 账号前,先确认目标站点已创建、目录存在、且未被软链接跨站指向
- 账号名称建议带站点标识,比如
ftp_example_com,避免用admin、user1这类泛化名 - 密码强度要够,宝塔不强制复杂度,但 Pure-FTPd 本身会拒绝纯数字或过短密码
为什么 FTP 用户能进别的站?常见权限配置错误
典型现象是:登录 ftp_example_com 后,执行 cd .. 居然能进入 /www/wwwroot/,再 ls 就看到所有站点目录——这说明禁止访问上级目录没生效,或目录权限太松。
根本原因有两个:Pure-FTPd 的 chroot 依赖目录的 owner 和权限组合;若目标目录 owner 不是 www 或权限含 world-writable(如 777),chroot 会静默失败。
- 检查命令:
ls -ld /www/wwwroot/example.com,输出应类似drwxr-xr-x 5 www www 4096 ... - 如果 owner 是
root或权限是777,运行chown -R www:www /www/wwwroot/example.com && chmod -R 755 /www/wwwroot/example.com - 改完后重启 Pure-FTPd:
bt restart 18(18 是宝塔中 FTP 服务编号)
如何验证 FTP 账号是否真正隔离
别只信宝塔界面上的“已启用”和“路径正确”,得用真实客户端或命令行连进去试行为边界。
推荐用 lftp(Linux/macOS)或 FileZilla(Windows)测试,重点验证三件事:pwd 是否始终卡在设定根目录、cd .. 是否返回 550 Permission denied、ls / 是否报错或为空。
- 命令行快速验证:
lftp -u ftp_example_com,password123 your-server-ip,登录后立即执行pwd和ls .. - 如果
ls ..列出了其他站点,说明 chroot 失效,回退去查目录 owner 和chmod - FileZilla 日志里搜
550或Permission denied,这是隔离成功的信号
多个用户管理同一站点时要注意什么
一个站点配多个 FTP 账号没问题,但所有账号的主目录必须完全一致,且不能共用同一个系统用户(宝塔后台会自动为每个 FTP 账号创建独立系统用户,这点不用干预)。
风险点在于:多人用不同账号上传文件,新文件默认 owner 是各自 FTP 用户,可能导致 PHP 进程(以 www 身份运行)无法读取——比如用户 A 传了 upload.jpg,owner 是 ftp_user_a,PHP 脚本就可能报 failed to open stream。
- 解决方案:在站点根目录下加
.user.ini或修改 PHP 配置,让上传文件自动继承www:www权限(需开启upload_tmp_dir并设对 owner) - 更简单做法:所有 FTP 账号上传后,定期跑一次
chown -R www:www /www/wwwroot/example.com(用宝塔计划任务,每天一次) - 绝对不要手动把 FTP 用户加进
www组——这会绕过 chroot,失去隔离意义
真正的隔离不在界面上,而在目录 owner、chmod、Pure-FTPd chroot 配置三者咬合。少一个,多用户就形同虚设。










