安全与权限
账号与密码
| 策略 | 默认值 | 在哪改 |
|---|---|---|
| 密码强度 | ≥8 位、不能是纯数字、不能与用户名相同 | 注册 / 建用户 / 改密 / 管理员重置四处统一校验 |
| 登录失败上限 | 5 次 | 系统设置 → 安全 |
| 锁定时长 | 10 分钟 | 系统设置 → 安全 |
| 图形验证码 | 失败 1 次后开始要求 | 系统设置 → 安全 |
| 强制两步验证 | 关闭 | 系统设置 → 安全 |
| 自助注册 | 关闭 | 系统设置 → 站点信息 |
| 登录提醒 | 开启(有邮箱 + 配了邮件渠道才发) | 系统设置 → 安全 |
- 改密成功后会被强制要求重新登录(旧 token 在过期前仍有效,换身份才安全)。
- 忘记密码:系统不带邮件找回。管理员可在 用户管理 → 重置密码 给任何账号重置,支持一键生成 16 位随机强密码;重置会同时清除该账号的失败锁定。
- 两步验证码输错也计入登录失败次数 —— 否则 6 位数字可以被无限爆破。
两步验证(TOTP)
账号安全 → 两步验证,扫码绑定(也支持手动输入密钥),输入一次动态口令即生效。换手机时用同一张二维码再加一台设备。
建议
管理员账号一律开 2FA;公网可达的部署可以在系统设置里打开「强制两步验证」,对所有账号生效。
用户与权限
- 角色两级:管理员(系统设置、用户管理、审计日志、开放接口)+ 普通用户(自己的流水线、证书、授权)。
- 数据按用户隔离:流水线、证书、授权、通知渠道都带
user_id,普通用户互相看不到。 - 用户组可以按功能键授权,例如只给某人
pipelines+certs,不给access(看不到凭据)与settings。
功能权限键与侧边栏一一对应:pipelines / history / certs / access / dns / monitor / notifications,系统类页面(设置、用户、审计、开放接口)仅管理员可见。
凭据怎么存、怎么显示
这是本项目和很多同类系统刻意不同的地方,需要提前知道:
| 环节 | 做法 |
|---|---|
| 数据库 | 凭据、证书私钥用 AES-GCM 加密存储(security.encrypt_json) |
| 接口 | 明文返回,不在接口层打码 —— 排障时能确认到底填了什么 |
| 界面 | 密码框默认星号,点「小眼睛」显示明文 |
| 编辑 | 留空 = 不修改,后端还原旧值,绝不会把密钥写成空串 |
| 日志 | 错误信息只保留主机名,token 不进日志 |
由此带来的责任
因为接口是明文返回,数据库文件与备份文件本身必须当机密文件对待:限制目录权限、不要放进公共网盘 / 公开仓库、备份加密存放。
审计日志
审计日志 记录关键操作:谁、什么时候、对什么做了什么(创建 / 修改 / 删除流水线、授权、用户、重置密码、创建 API 密钥等)。排「这条流水线是谁改坏的」时先看这里。
接口与网络
| 项 | 默认 | 说明 |
|---|---|---|
/api/docs | 关闭 | 只在本机调试时用 CERTD_DOCS=1 打开 |
| CORS | * | 上线改成实际域名(CERTD_CORS_ORIGINS) |
| 请求体上限 | 21 MB | 够导入证书与上传 Logo |
| 安全响应头 | 已内置 | nosniff / SAMEORIGIN / no-referrer / Permissions-Policy,HTTPS 额外发 HSTS |
| CSP | 未启用 | 前端有内联样式与 data: 图片,需要单独联调 |
| 健康检查 | /api/health | 数据库 / 磁盘 / 调度器异常时返回 503 |
开放接口的密钥
开放接口 里可以创建 API 密钥(ck_ 开头 + secret),调用时放在请求头:
bash
curl -H "x-api-key: ck_xxx" -H "x-api-secret: yyy" \
http://127.0.0.1:8000/api/open/v1/pipelines- 密钥只能看到自己账号的数据。
- secret 只在创建时返回一次,之后不可再查 —— 丢了就删掉重建。
- 删除密钥立即失效(
lastUsedTime可以看到是否还在被使用)。
生产加固清单
- 改掉默认密码,管理员开 2FA,公网部署考虑「强制两步验证」。
- 上 HTTPS,反向代理层限制后台访问来源 IP。
CERTD_SECRET_KEY写死并备份;data/secret.key不要删。- 固定数据目录权限(仅服务账号可读),备份文件加密。
- 关闭自助注册(默认就是关的),需要多人协作时再开。
- 云厂商用子账号 AK,只给 DNS / CDN 证书相关权限。
- 盯住
/api/health与磁盘剩余空间。
残余风险(已知)
- 未启用 CSP:前端有内联样式与
data:图片,需要单独联调后再开。 - 凭据接口明文返回是产品设计(便于排障),只能靠数据库与备份文件的访问控制兜底。
- 不带邮件找回密码,忘记密码只能由管理员重置。
