用户体系
v1.1.1 起,NPS 使用独立的 User 模型管理普通用户。一个用户可以关联多个客户端,登录后可以看到并管理自己名下的所有客户端、普通隧道和域名规则。管理员可以为每个用户设置客户端上限;普通用户可在上限内自行创建客户端,也可以使用管理员预先分配的客户端。
角色
| 角色 | 来源 | 权限 |
|---|---|---|
| 管理员 | conf/nps.conf 中的 web_username / web_password | 全部权限 |
| 普通用户 | Web 面板「用户管理」创建,保存到 conf/users.json | 在客户端配额内创建/管理自己的客户端和资源 |
管理员可以访问用户管理和全局设置;普通用户不能访问用户管理和全局设置。用户管理列表会显示每个用户当前关联的客户端数和隧道数,其中隧道数包含普通隧道与 Host 域名规则,与用户级配额使用同一统计口径。
数据关系
User
└── Client
├── Tunnel
└── Host
User:登录账号、密码、状态、备注、到期时间、最大客户端数、用户级隧道上限。Client:客户端连接实体,保存VerifyKey、限速、流量限制、连接数、客户端级隧道上限、所属用户。Tunnel:TCP、UDP、SOCKS5、HTTP 代理、Secret、P2P、文件访问等普通隧道。Host:HTTP/HTTPS 域名代理规则。
管理员推荐流程
- 进入「用户管理」创建普通用户。
- 设置用户状态、备注、到期时间、最大客户端数和最大隧道数。客户端数填
0表示不限。 - 进入「客户端」新增客户端,选择所属用户;已有客户端也可在编辑页重新选择所属用户。服务端会校验用户确实存在和客户端配额,避免保存一个不可见的归属 ID。
- 普通用户登录后即可看到已分配的客户端,并可在剩余客户端配额内点击「新增」自行创建客户端。
管理员仍可统一创建和分配客户端;两种方式使用同一套归属、配额和到期校验。
这种方式适合客户、团队、门店、设备组等场景。管理员可以统一分配已有客户端,也可以把创建权交给普通用户;普通用户始终只管理自己名下资源。
登录兼容
系统优先使用 User 表登录。为了兼容旧版本,仍保留旧客户端登录方式。客户端新增/编辑页中的“旧版客户端登录兼容”是一个可选的高级设置,不是“所属用户”的替代品:
- 如果客户端设置了
WebUserName和WebPassword,旧账号仍可登录。 - 如果客户端未设置用户名密码,也保留
user + VerifyKey的兼容登录方式。 - 编辑客户端时密码不会回显;密码输入框留空表示保持原值,管理员可以显式清除旧版凭据。
新部署建议使用「用户管理」创建普通用户,不再把 Web 登录账号写在客户端上。
权限边界
普通用户登录后:
- 只能看到自己名下的客户端。
- 只能查看、创建、修改、删除自己客户端下的普通隧道。
- 只能查看、创建、修改、删除自己客户端下的 Host 域名规则。
- 可以新增自己的客户端,但不能修改客户端 ID、验证密钥、所属用户、客户端级配额、独立到期时间或旧版 Web 登录凭据。
- 新客户端可填写备注、Basic 认证用户名/密码、压缩、加密、IP 白名单/黑名单和 IP 授权密码;这些字段只影响新客户端本身。
- 不能访问用户管理。
- 不能访问全局设置。
配额规则
客户端级配额
客户端 MaxTunnelNum 限制单个客户端下的资源数量。
计数范围:
- 普通隧道(TCP、UDP、SOCKS5、HTTP 代理、Secret、P2P、文件访问)
- Host 域名规则
用户级配额
用户 MaxTunnelNum 限制该用户所有客户端下的资源数量。
例如用户 A 有 3 个客户端,用户级最大隧道数为 10,则这 3 个客户端下的普通隧道和 Host 规则总数不能超过 10。
0 表示不限制。
客户端创建配额
用户 MaxClientNum 限制该用户名下客户端数量。管理员可以在「用户管理」新增或编辑用户时设置,0 表示不限制。管理员分配的客户端和普通用户自行创建的客户端使用同一个计数;已停用、已到期的客户端仍占用名额,只有删除或重新分配后才会释放。
客户端新增和重新分配由服务端原子校验,因此并发请求不会突破上限。普通用户不能通过 API 或 NPC 配置文件伪造所属用户、配额或验证密钥。
到期和停用
用户和客户端都支持到期时间。
- 用户到期时间是名下资源的硬上限。客户端独立到期时间只能早于或等于用户到期时间;管理员缩短用户到期时间前,需要先处理晚于新日期的客户端。
- 客户端到期时间留空表示跟随所属用户;用户也未设置到期时间时,客户端视为永不过期。用户没有到期时间时,管理员可为客户端设置独立的较早日期。
- 客户端的实际有效期取客户端独立日期和用户日期中较早者,列表会同时显示配置日期和实际有效期。
- 客户端到期后,系统会自动停用该客户端,断开连接,并清理该客户端下的隧道和 Host 运行资源。
- 用户到期后,系统会自动停用该用户,断开并清理其名下所有客户端资源;用户恢复后仍需检查客户端自身状态。
- 到期检查在服务启动时立即执行一次,之后每分钟执行一次。
到期时间支持常见格式,最终会保存为:
2006-01-02 15:04:05
迁移说明
从旧版本升级后,系统会自动扫描 clients.json:
- 旧客户端如果有
WebUserName/WebPassword,会自动创建对应User。 - 同名同密码会合并为同一个用户。
- 同名不同密码会生成
用户名_客户端ID,避免账号冲突。 - 迁移后客户端会写入
UserId。
如果客户端已有失效的旧 UserId,但旧用户名和密码与现有用户完全匹配,启动迁移会自动修复绑定。若 users.json 已存在且账号已被删除,则不会凭旧客户端字段重新创建账号;管理员可在客户端编辑页手动选择新的所属用户。
迁移不删除旧字段,因此旧登录方式仍可兼容。详细步骤见升级迁移。
