67 lines
5.2 KiB
Markdown
67 lines
5.2 KiB
Markdown
# 开发启动权限说明
|
||
|
||
## 需求与任务
|
||
|
||
- [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 正式部署验收。
|
||
- 没有清空真实数据库,没有重置账号或修改密钥;本次未进行浏览器业务流程回归。
|
||
- 自动停止命令被执行工具策略拦截,没有绕过限制;后端保持运行,不宣称重启验收通过。
|