Record U3 implementation candidate and close obsolete account help

Why: Operators need the approved no-password initialization and owner-confirmed recovery contract, and stage 6 reviewers need an exact component/evidence map.

Evidence: SELF task-card precheck and make test-governance receipts; component receipts listed in the task card with separate source identities.

Impact: svc rejects obsolete credential commands before storage binding, help points to protected delivery and recovery proposals, and the task card records stage 6 scope with formal pin/CI dependencies still pending.

Refs: IAM U3 r1 Documents c236d309; Backend 3e01614; RDM 265d33e; Frontend a961b19
This commit is contained in:
2026-10-14 05:05:21 +00:00
parent c451fb92b9
commit 1d42933aa1
4 changed files with 95 additions and 26 deletions
File diff suppressed because one or more lines are too long
+6
View File
@@ -1,5 +1,11 @@
# U4 一次性登录凭据与认证限制(规格 v0.1)
> **历史规格,已由 IAM U3 r1(Documents 提交 `c236d309`)替代。** 旧管理员
> `reset-password`、`issue-login-key` 与带初始密码的 `user create` 已关闭,
> 不得照下文旧命令操作。新账号只经可信 owner 初始化/续办并写入保护交付文件;
> 既有账号恢复由管理员建立无秘密提案,目标本人以既有合格密码会话确认。
> 当前命令说明见 `scripts/svc.sh help accounts`;生产操作仍须单独批准。
状态:已启动实施(Backend/Dev 分支 `feature/svc-deploy-u4-login-key`)。主记录:`modules/documents/docs/proposals/2026-10-12-svc-unified-deploy-and-login-key.md` §7 U4 / §8。
上述为历史规格状态,基础已见当前固定源码。本轮 r2 账户事务/帮助/审计增补待评审;运维打开以配套 U1 v0.2 候选和主方案 R15/U7 为准,禁止隐式 migrate。Dev gitlink 未推进本轮 Documents 候选。
本增量在 **Backend**(及必要迁移/CLI)落地;Frontend 兑换与设密页属 **U5**,但 U4 须提供稳定 HTTP 合同供 U5 接线。
+1 -1
View File
@@ -547,7 +547,7 @@ scripts/svc.sh -h # 同上
scripts/svc.sh --help # 完整帮助(全部命令/参数/约束)
scripts/svc.sh help # 分主题清单
scripts/svc.sh help <主题> # 主题详解:model deploy lifecycle accounts db dbops config recovery examples safety
# accounts:实例绑定账户 CLI(create/list/reset-password/issue-login-key/revoke-login-key/bootstrap-admin)
# accounts:实例绑定账户 CLI(create/initialize-account/list/revoke-login-key/bootstrap-admin)
```
## 7. 命令参考:数据库
+18 -8
View File
@@ -202,7 +202,7 @@ svc.sh 分主题帮助(scripts/svc.sh help <主题>;完整 --help;文档 d
model 服务模型:命名、目录布局、svc.env 字段、history 事件、pidcheck
deploy 部署:三来源(local/dev@sha/release@v)、--pick、--dry-run、static --dir
lifecycle 生命周期:start/stop/restart/logs/status、set 变更、rm 注销
accounts 账户 CLI:create/list/reset-password/issue-login-key/revoke-login-key/bootstrap-admin
accounts 账户 CLI:create/initialize-account/list/revoke-login-key/bootstrap-admin
rdm-admin RDM 域管理员台账:查看 / 受信移交(锁死恢复通道)
db 数据库服务:create/start/dsn/ls/set(换端口)
dbops 数据库运维:backup/backups/restore/clone/copy
@@ -400,16 +400,16 @@ EOF
- 与启停互斥(lifecycle flock);无 flock 时拒绝
- mock 档不支持;PG 档须有有效 DSN/dbref
六个子命令(经 scripts/svc.sh <env> user … 转发到实例二进制):
scripts/svc.sh <env> user create --owner <id> [--role user|admin] [--password …]
五个子命令(经 scripts/svc.sh <env> user … 转发到实例二进制):
scripts/svc.sh <env> user create --owner <login> [--role user|admin] --out <0600新文件>
scripts/svc.sh <env> user initialize-account --user-id <稳定ID> --expected-state-version <版本> --expected-generation <代数> --out <0600新文件>
scripts/svc.sh <env> user list
scripts/svc.sh <env> user reset-password --owner <id> [--password …]
scripts/svc.sh <env> user issue-login-key --owner <id> [--purpose activate|recover]
scripts/svc.sh <env> user revoke-login-key --id <key-id>
scripts/svc.sh <env> user bootstrap-admin --owner <id> [--password …]
scripts/svc.sh <env> user bootstrap-admin --owner <login> --out <0600新文件>
凭据只在 stdout 展示一次;日志与 history 只记凭据 ID。后端原子开户/改密/审计
补齐见 Documents 方案 U7(本帮助主题不替代该增量)。
旧 reset-password、issue-login-key 与带初始密码建号已关闭;本人恢复走管理员提案、
目标本人已有可信密码会话确认。凭据只写新建的 0600 交付文件,不回显 stdout。
本帮助描述 U3 代码契约;真实账号操作与生产切换须另行授权。
更完整说明:docs/svc.md、docs/svc-deploy/u1-instance-account-binding.md
EOF
return 0 ;;
@@ -2334,11 +2334,21 @@ materialize_release() {
# 调用 ENV_BIN 对应版本。拒绝调用方覆盖 --data/--dsn/--open-existing。
agent_do_user() {
local a
case "${1:-}" in
reset-password|issue-login-key)
c_err "[$ENV_NAME] RECOVERY_CONTRACT_REPLACED:旧账号重置/签发入口已关闭;使用本人确认的恢复提案"
return 2 ;;
esac
for a in "$@"; do
case "$a" in
--data|--dsn|--open-existing|--data=*|--dsn=*|--open-existing=*)
c_err "[$ENV_NAME] 账户操作禁止覆盖存储绑定(勿传 --data/--dsn/--open-existing;由实例 manifest 决定)"
return 2 ;;
--password|--password=*|--generate-password|--generate-password=*)
if [ "${1:-}" = create ]; then
c_err "[$ENV_NAME] RECOVERY_CONTRACT_REPLACED:本地建号只发可信激活能力,不接受初始密码"
return 2
fi ;;
esac
done
svc_lock wait || { c_err "[$ENV_NAME] 无法获取生命周期锁(账户操作与启停互斥)"; return 1; }