feat(M2): SSH 密钥管理 — 公钥上传/重命名/吊销、authorized_keys 原子同步与吊销即时失效
- KeyService:crypto/ssh 解析校验(单行/类型/长度/去重指纹,拒 ssh-dss 与 RSA<2048), Create/Rename/Revoke/List,变更后以 DB 状态全量重写 authorized_keys(同步失败回滚) - system 层:SyncAuthorizedKeys 完善 —— sudo 模式经白名单命令(mkdir/chown/chmod/install) 落位并修正属主(sshd StrictModes),direct 模式 root 时同样修正属主;dry-run 计划日志 - API:GET/POST /me/keys、PATCH/DELETE /me/keys/:id(user 会话)、GET /users/:id/keys(admin), 密钥操作带审计;deploy/sudoers.example 补充密钥同步白名单 - 版本 0.3.0-m2;测试:service 单元(校验/生命周期/回滚/权限)、system 直写落盘、 API 全流程集成;容器 E2E 32 项 PASS(真实 useradd/authorized_keys/吊销即时失效/禁用清空/删除回收)
This commit is contained in:
+3
-2
@@ -82,9 +82,10 @@ func cmdServe(args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
sys := system.New(cfg.System)
|
||||
sys := system.New(cfg.System, log)
|
||||
adminSvc := service.NewAdminService(db)
|
||||
userSvc := service.NewUserService(db, sys, cfg)
|
||||
keySvc := service.NewKeyService(db, sys, cfg)
|
||||
auditSvc := service.NewAuditService(db)
|
||||
|
||||
// 认证依赖:DB OTP/会话/重置令牌存储 + 内存图形验证码/登录限速器 + 邮件
|
||||
@@ -108,7 +109,7 @@ func cmdServe(args []string) error {
|
||||
sched.Start()
|
||||
defer sched.Stop()
|
||||
|
||||
h := api.New(cfg, authSvc, userSvc, auditSvc)
|
||||
h := api.New(cfg, authSvc, userSvc, keySvc, auditSvc)
|
||||
r := router.New(cfg, h, sessions, log)
|
||||
|
||||
srv := server.New(cfg.Server.Listen, r, log)
|
||||
|
||||
@@ -48,7 +48,7 @@ func userOTP(args []string) error {
|
||||
}
|
||||
|
||||
// 校验用户存在(不存在时返回友好错误,避免暴露账号是否存在的枚举)
|
||||
if _, err := service.NewUserService(db, system.New(cfg.System), cfg).GetByUsername(context.Background(), name); err != nil {
|
||||
if _, err := service.NewUserService(db, system.New(cfg.System, log), cfg).GetByUsername(context.Background(), name); err != nil {
|
||||
return fmt.Errorf("用户不存在或不可用: %w", err)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user