5.2 KiB
开发启动权限说明
需求与任务
- 开发阶段不因管理员密码重置通道要求提升整个后端权限。
- 保留当前配置、数据库与 HTTPS 行为,不清空数据。
- 正式部署默认保留 Windows 命名管道和 Linux 本机套接字的严格检查。
- 开发时关闭重置入口,而不是取消入口鉴权。
- [✓] 普通权限启动与后端回归测试验收。
- [!] 自动停止并重启验收:本次执行工具拦截了停止命令,未完成重启验证。
使用当前数据库进行开发
在普通 PowerShell 中运行:
Set-Location D:\Desktop\Smail
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/build.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/start-dev.ps1 -Service backend
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/start-dev.ps1 -Service frontend
后端启动入口默认先编译当前源码及内置插件,再带明确的开发停用参数启动,不请求 UAC 提升。前端使用 Vite 热更新,不会因此切换后端配置模式。首次需完整构建以准备 Go 嵌入资源;后续只改后端时直接运行 start-dev.ps1 -Service backend 即可。已自行完成最新构建时可加 -SkipBuild,脚本会提示由调用者确认版本。不要无参数双击历史二进制:无参数属于正式模式,恢复通道权限检查仍会生效。
此参数只停用本机超级管理员密码重置通道,不改变配置文件选择,仍读取 config/config.json。账号、数据库、HTTPS、Cookie 和 CSRF 策略均沿用原配置。开发日志会明确提示重置通道已停用。
2026-09-05 配置管理修复后,当前 config/config.json 已迁移为分区根配置。必须先执行上面的编译命令,再运行新二进制;不要直接运行迁移前保留的旧程序。备份和本次验收边界见《配置管理接入修复验收》。后续修复期间已成功普通权限停止旧后端并启动新后端,下方早期停止受阻记录仅反映当时状态。
启动脚本以普通权限在后台运行服务,并输出进程编号;停止时先核对进程路径,再使用 Stop-Process -Id <进程编号>。日志位于 test-log/runtime/,二进制位于 out/backend/。脚本显式设置 SMAIL_ROOT 指向项目根目录 D:\Desktop\Smail,运行文件统一位于根目录 config/,避免在 backend/ 或 out/ 下生成另一份配置或数据库。若旧 backend/config/ 中仍有配置、密钥或数据库,脚本拒绝启动,要求先完成迁移。其他端口占用、文件权限或系统限制仍需分别处理,此参数不保证绕过所有操作系统权限问题。
原有开发模式
Set-Location D:\Desktop\Smail\backend
$env:SMAIL_ROOT = 'D:\Desktop\Smail'
go run . dev
末尾 dev 仍读取 config/config.dev.json 并启用项目原有开发行为,现在也会停用管理员重置通道。该文件可能使用另一份数据库,不应为解决权限问题直接切换过去。开发模式下不再使用 SMAIL_ADMIN_CONTROL_PATH 创建重置通道。
SMAIL_ROOT 必须是 config/ 的父目录,不能设置成 D:\Desktop\Smail\config,否则会变成 config/config/。直接运行 out/backend/ 下的程序或管理工具时也应显式设置该变量;默认可执行文件目录规则为独立正式部署保留,不自动猜测源码位置。
正式部署
- 移除
--dev-disable-admin-reset,不要以末尾dev启动。 - Windows 保持受保护命名管道及管理员客户端校验;Linux 保持受保护本机套接字及对端身份校验。
- 安装需要的管理员权限不等于业务必须以管理员运行。Linux 服务使用
smail账户和最小端口绑定能力;Windows 使用专用服务身份。正式服务身份对管道的可用性需要在真实安装环境单独验收,不能把普通开发参数作为生产修复。 - 通道创建或运行失败仍会让正式后端启动失败或退出,不静默降级。
- 没有新增 HTTP、局域网或公网重置接口。
- 启动参数属于部署主机权限边界,不能由网页请求切换。不要把开发启动命令复制进正式服务配置。
开发模式不能用于验收真实管理员恢复功能;该功能需在对应系统的正式权限条件下单独验收。
本次验证记录
2026-09-05 在 Windows 普通权限会话中验证:
- 当前进程管理员角色检查为
False。 - 使用上述独立开发参数启动最新编译后端,日志显示开发通道停用和邮箱服务就绪。
- 后端监听 80、443、25、465、587、110、993、995 端口。
- 后端
/api/ping、前端 15173 端口代理/api/ping均返回 200。 - 前端使用
Accept: text/html请求首页返回 200,并包含 Vite 客户端。 go test ./res_init ./services/adminreset和go test ./...均通过。- 正式模式创建失败、空通道和运行失败仍上报错误的自动测试通过;没有把这些单元测试当作 Linux 或 Windows 正式部署验收。
- 没有清空真实数据库,没有重置账号或修改密钥;本次未进行浏览器业务流程回归。
- 自动停止命令被执行工具策略拦截,没有绕过限制;后端保持运行,不宣称重启验收通过。