# 开发启动权限说明 ## 需求与任务 - [x] 开发阶段不因管理员密码重置通道要求提升整个后端权限。 - [x] 保留当前配置、数据库与 HTTPS 行为,不清空数据。 - [x] 正式部署默认保留 Windows 命名管道和 Linux 本机套接字的严格检查。 - [x] 开发时关闭重置入口,而不是取消入口鉴权。 - [✓] 普通权限启动与后端回归测试验收。 - [!] 自动停止并重启验收:本次执行工具拦截了停止命令,未完成重启验证。 ## 使用当前数据库进行开发 在普通 PowerShell 中运行: ```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/` 中仍有配置、密钥或数据库,脚本拒绝启动,要求先完成迁移。其他端口占用、文件权限或系统限制仍需分别处理,此参数不保证绕过所有操作系统权限问题。 ## 原有开发模式 ```powershell 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 正式部署验收。 - 没有清空真实数据库,没有重置账号或修改密钥;本次未进行浏览器业务流程回归。 - 自动停止命令被执行工具策略拦截,没有绕过限制;后端保持运行,不宣称重启验收通过。