宝塔面板子账号不支持真正的只读权限,因其权限模型为“范围隔离+功能继承”,后台无细粒度只读开关,所有被授权站点的操作按钮均可见可用。

宝塔面板的子账号功能不支持真正的只读权限——所有子账号默认拥有其管理范围内站点的全部操作权(包括删除、修改配置、执行命令),无法通过后台开关或勾选实现“仅查看不操作”。
为什么子账号无法设置为只读
宝塔当前(v8.x 及之前版本)的子账号权限模型是「范围隔离 + 功能继承」:子账号只能看到指定网站/数据库/FTP,但一旦进入,文件管理、SSL、防火墙等模块的操作按钮全部可见且可用。后台没有 readonly、view_only 或类似权限粒度控制项。
常见错误现象:
• 勾选“仅允许管理以下网站”后,仍能点击“删除站点”按钮
• 子账号进入文件管理器后可编辑任意被授权站点的 .htaccess 或 nginx.conf
• 后台无“禁止删除”“禁止重启服务”等细项开关
- 该限制源于宝塔底层权限系统未对接 Linux 文件 ACL 或 Web UI 行级权限控制
- 官方文档从未承诺“只读子账号”,相关社区提问均被回复为“暂不支持”
- 如果你看到第三方插件或脚本声称能实现只读,大概率是通过禁用按钮 JS 或隐藏 DOM 实现——可被绕过,不具安全性
替代方案:用 Linux 系统级权限 + 定制入口模拟只读
真正可控的方式是绕过子账号机制,改用系统用户 + 严格目录权限 + 只读 Web 终端入口。适用于需要给运维同事、客户或外包人员“看得到但动不了”的场景。
- 新建系统用户:
useradd -m -s /bin/bash readonly-user - 将目标网站根目录设为只读:
chown -R root:www readonly-user && chmod -R 750 /www/wwwroot/example.com(确保www组无写权限) - 安装
bt-terminal插件(或启用宝塔自带终端),然后在终端里用sudo -u readonly-user ls /www/wwwroot/example.com验证不可写 - 如需 Web 界面浏览日志或配置,可单独部署一个轻量 PHP 脚本(如
/www/wwwroot/read-only-viewer/index.php),仅调用file_get_contents()读取access.log或nginx.conf,不提供表单或 POST 接口
注意:此方式下,该用户无法登录宝塔主界面,也不能使用面板任何功能按钮——只读是系统级强制的,不是界面隐藏。
如果必须用子账号,唯一缓解手段是范围+行为双锁定
虽不能只读,但可通过组合限制降低误操作风险:
- 子账号创建时,务必取消勾选“数据库管理”“FTP 管理”“计划任务”——这些模块误删成本最高
- 仅勾选“网站”并严格限定到 1 个站点;不要勾选“全部网站”或多个域名
- 在该站点的
SSL页面,点击“关闭 SSL”并删除证书(避免子账号误点“续签”触发自动写入) - 进到
网站 > 设置 > 配置文件,手动在location ~ .*\.(php|jsp|cgi|pl|py)?$块里加deny all;(防止子账号上传 WebShell 后执行) - 定期检查
/www/wwwlogs/下该站点日志,监控是否有异常POST或DELETE请求
最易被忽略的一点:子账号密码强度和登录 IP 限制没做的话,只读目标会直接失效——攻击者只要拿到子账号就能进文件管理器,而那里没有任何只读保护逻辑。

















