create-dwy 0.16.1 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/bin/index.js +23 -19
  3. package/package.json +1 -1
  4. package/src/cli-help.js +44 -0
  5. package/src/sync-all.js +303 -59
  6. package/src/sync-global-skills.js +167 -0
  7. package/src/sync.js +21 -11
  8. package/templates/ai-tools/CHANGELOG.md +134 -0
  9. package/templates/ai-tools/VERSION +1 -1
  10. package/templates/ai-tools/rules/Android/dwy-android-core.md +65 -1
  11. package/templates/ai-tools/rules/Python/dwy-python-core.md +47 -0
  12. package/templates/ai-tools/rules/Vue/dwy-vue-core.md +55 -0
  13. package/templates/ai-tools/rules/iOS/dwy-swift-core.md +46 -0
  14. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-oss-commercial-license.md +128 -0
  15. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/SKILL.md +65 -0
  16. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/assets/appstore-submission.yaml +43 -0
  17. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/references/api-workflow.md +17 -0
  18. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/references/in-app-purchase-review.md +16 -0
  19. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/references/screenshot-workflow.md +16 -0
  20. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/scripts/appstore_config.sh +140 -0
  21. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/SKILL.md +11 -8
  22. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/android.md +2 -1
  23. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/backend-deploy.md +2 -1
  24. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/changelog.md +24 -4
  25. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/frontend-deploy.md +2 -1
  26. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/generic-release.md +2 -1
  27. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/git-tag.md +82 -0
  28. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/harmony.md +2 -1
  29. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/ios.md +3 -2
  30. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/monitor-notify.md +2 -2
  31. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-semver/SKILL.md +1 -1
  32. package/templates/ai-tools/skills//345/237/272/347/241/200/345/272/223/dwy-eapi/references/tasks-integration-guide.md +2 -2
  33. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/README.md +57 -0
  34. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/SKILL.md +147 -0
  35. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/references/api.md +43 -0
  36. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/references/config.example.yaml +33 -0
  37. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/scripts/global_config.py +89 -0
  38. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/scripts/setup_config.py +175 -0
  39. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/scripts/synthesize.py +339 -0
  40. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/media-platform-packaging/SKILL.md +127 -0
  41. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/media-platform-packaging/assets/cover-style-master-v1.png +0 -0
  42. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/media-platform-packaging/references/platform-copy-examples.md +37 -0
  43. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/media-platform-packaging/references/platform-posting-times.md +193 -0
  44. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0005-ideation/SKILL.md +42 -0
  45. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0005-ideation/templates/topic-backlog.template.md +50 -0
  46. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0005-ideation/templates//351/200/211/351/242/230/346/261/240.template.md +16 -0
  47. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0010-product/SKILL.md +106 -0
  48. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0010-product/templates/channel-profile.template.md +52 -0
  49. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0010-product/templates//344/272/247/345/223/201/345/215/241.template.md +132 -0
  50. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0030-facts/SKILL.md +60 -0
  51. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0030-facts/scripts/build_facts_html.py +430 -0
  52. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0030-facts/scripts/generate_html.py +1287 -0
  53. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0030-facts/scripts/generate_report.py +189 -0
  54. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0030-facts/templates//344/272/213/345/256/236/350/265/204/346/226/231/345/272/223.template.md +55 -0
  55. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0040-script/SKILL.md +36 -0
  56. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0040-script/templates/README.md +10 -0
  57. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0040-script/templates//344/272/213/345/256/236.template.md +82 -0
  58. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0040-script/templates//345/215/225/351/233/206/346/226/207/346/241/243.template.md +175 -0
  59. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0040-script/templates//350/204/232/346/234/254.template.md +69 -0
  60. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0040-script/templates//351/252/250/346/236/266-v1.1.md +174 -0
  61. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0050-design/SKILL.md +55 -0
  62. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0060-assets/SKILL.md +29 -0
  63. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0070-package/SKILL.md +42 -0
  64. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0070-package/scripts/validate_shots.py +207 -0
  65. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0070-package/shots.schema.json +186 -0
  66. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0070-package//344/272/272/345/256/241/345/214/205.template.md +1 -0
  67. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0070-package//344/272/272/345/256/241/350/257/264/346/230/216.md +15 -0
  68. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0070-package//346/210/220/347/211/207/345/214/205.template.md +49 -0
  69. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-0080-factory/SKILL.md +58 -0
  70. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-comic-kit/SKILL.md +424 -0
  71. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-comic-kit/evals.md +41 -0
  72. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-flow/CONTRACT.md +123 -0
  73. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-flow/SKILL.md +81 -0
  74. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-flow//346/211/247/350/241/214/346/270/205/345/215/225.template.md +60 -0
  75. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/SKILL.md +78 -0
  76. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/agents/openai.yaml +4 -0
  77. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/assets/knowledge-town-paper-film-v1.json +80 -0
  78. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/assets/remotion/AudioTracks.tsx +20 -0
  79. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/assets/remotion/CaptionLayer.tsx +18 -0
  80. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/assets/remotion/CueTimeline.ts +24 -0
  81. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/assets/remotion/KnowledgeTownComposition.tsx +21 -0
  82. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/references/cinematic-direction.md +73 -0
  83. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/references/sticker-asset-production.md +30 -0
  84. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/references/style-guide.md +43 -0
  85. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/scripts/build_cue_timeline.py +75 -0
  86. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/scripts/validate_cue_timeline.py +68 -0
  87. package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/uc-media-knowledge-town/scripts/validate_style_preset.py +22 -0
  88. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/SKILL.md +0 -511
  89. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/references/checks-data.md +0 -126
  90. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/references/checks-network.md +0 -88
  91. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/references/checks-runtime.md +0 -195
  92. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/references/security-doc-search.md +0 -179
  93. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_base.sh +0 -39
  94. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_capacity.sh +0 -278
  95. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_db.sh +0 -147
  96. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_docker.sh +0 -230
  97. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_env.sh +0 -64
  98. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_https.sh +0 -60
  99. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_logs.sh +0 -209
  100. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_nginx.sh +0 -100
  101. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_resilience.sh +0 -157
  102. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_secrets.sh +0 -265
  103. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_services.sh +0 -94
  104. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_ssh.sh +0 -56
  105. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/run_all.sh +0 -105
@@ -1,511 +0,0 @@
1
- ---
2
- name: uc-deploy-audit
3
- description: "部署后线上环境基础安全巡检:远程 SSH 到目标服务器,逐项核对 SSH/Nginx/数据库/HTTPS/Docker/环境变量等基础环境配置,输出分级安全报告,只报告不修复。触发条件:用户说'部署巡检'、'上线检查'、'基础环境检查'、'部署审计'、'线上安全检查'、'生产环境审计' 时。"
4
- ---
5
-
6
- # 部署后基础环境巡检 (uc-deploy-audit)
7
-
8
- 对**已部署上线**的服务器执行只读式安全合规审计,逐项核对基础环境配置,输出分级报告。
9
-
10
- **本工具边界:** 白盒只读配置审计——仅 SSH 登录读取配置文件与运行状态,不做主动扫描、漏洞利用、暴力破解等渗透行为。如需渗透测试请使用专用渗透工具。
11
-
12
- **脚本目录:** `./scripts/`(以下简称 `{scripts}`)
13
-
14
- **详细检查规则索引:**
15
-
16
- | 文件 | 何时读 | 覆盖 |
17
- |------|--------|------|
18
- | `references/checks-network.md` | 即将运行 4.1 / 4.2 / 4.4 / 4.7 类检查或解读其输出时 | SSH / Nginx / HTTPS / 依赖服务连通性 |
19
- | `references/checks-data.md` | 即将运行 4.3 / 4.5 / 4.11 类检查或解读其输出时 | 数据库暴露 / 环境变量 / 凭证强度 |
20
- | `references/checks-runtime.md` | 即将运行 4.6 / 4.8 / 4.9 / 4.10 类检查或解读其输出时 | Docker / 自愈 / 日志防爆 / 资源推荐 |
21
- | `references/security-doc-search.md` | 本地 checks 不够判定、需要查官方安全文档、需要按版本追 CVE、或需要把新规则沉淀回 skill 时 | 权威文档检索策略 / 官方来源清单 / 沉淀规则 |
22
-
23
- ---
24
-
25
- ## 强制原则
26
-
27
- 1. **只读不写** — 所有检查只读取配置和状态,**禁止**执行任何修改命令(`sed -i`、`systemctl restart`、`iptables -A` 等)
28
- 2. **远程 SSH 执行** — 不在本地猜测,所有结论必须基于目标服务器的真实配置
29
- 3. **明确目标** — 用户必须显式提供 SSH 连接信息(host、user、端口、key),未提供则停止并询问
30
- 4. **不修复** — 发现问题只输出报告 + 修复建议,**禁止**自动修复或建议用户立即执行修复命令
31
- 5. **分级输出** — 所有问题必须按 critical / high / medium / low / info 五级分类
32
- 6. **生产环境敏感** — 任何检查命令需明确标注是否涉及生产数据,避免 `pg_dump`、`tcpdump` 等高负载操作
33
-
34
- ---
35
-
36
- ## 流程总览
37
-
38
- ```
39
- 1. 收集目标信息 → 确认 SSH 连接、目标服务范围
40
- 2. 连通性测试 → SSH 登录、sudo 权限确认
41
- 3. 基础环境识别 → 系统版本、已部署服务清单
42
- 4. 权威文档检索 → 必要时查官方文档 / CVE / OWASP,补足判定依据
43
- 5. 分类检查 → SSH / Nginx / DB / HTTPS / Env / Docker / Services / Resilience / Logs / Capacity / Secrets(主 Bash 调用 run_all.sh,12 路并行)
44
- 6. 生成报告 → 按等级聚合,Markdown 格式
45
- 7. 修复建议 → 每条问题给出修复方向(不执行)
46
- ```
47
-
48
- **共 7 步,按顺序执行。**
49
-
50
- ---
51
-
52
- ## Step 1: 收集目标信息
53
-
54
- 向用户确认以下参数,**任一缺失则停止并询问**:
55
-
56
- | 参数 | 必填 | 说明 |
57
- |------|------|------|
58
- | `host` | 是 | 服务器 IP 或域名 |
59
- | `user` | 是 | SSH 登录用户(优先非 root) |
60
- | `port` | 否 | SSH 端口,默认 22 |
61
- | `key` | 是 | SSH 私钥路径 或 用户已配置 ssh config |
62
- | `sudo` | 否 | 是否有 sudo 权限(影响检查覆盖率) |
63
- | `services` | 否 | 已知的部署服务清单(nginx / postgres / redis / docker 等),不填则自动探测 |
64
-
65
- **示例对话:**
66
- ```
67
- 用户: 帮我审计一下我的服务器
68
- 助手: 请提供以下信息:
69
- 1. 服务器地址(IP 或域名):
70
- 2. SSH 用户名:
71
- 3. SSH 端口(默认 22):
72
- 4. SSH 私钥路径(如 ~/.ssh/id_ed25519):
73
- 5. 该用户是否有 sudo 权限(影响 nginx/sshd 等系统配置的可读性):
74
- ```
75
-
76
- ---
77
-
78
- ## Step 2: 连通性测试
79
-
80
- 执行最小连通性测试,确认 SSH 可用:
81
-
82
- ```bash
83
- ssh -o ConnectTimeout=5 -o BatchMode=yes -p ${PORT} -i ${KEY} ${USER}@${HOST} "uname -a && id"
84
- ```
85
-
86
- - 失败 → 报告"无法 SSH 连接",列出常见原因(key 错误 / 端口防火墙 / 用户不存在),停止
87
- - 成功 → 记录 `uname` 输出和当前用户 id,进入 Step 3
88
-
89
- ---
90
-
91
- ## Step 3: 基础环境识别
92
-
93
- **自动探测目标服务器上已部署的关键服务**,决定后续检查覆盖范围:
94
-
95
- ```bash
96
- ssh ${TARGET} "
97
- echo '=== OS ==='
98
- cat /etc/os-release | grep -E '^(NAME|VERSION)='
99
- echo '=== Listening Ports ==='
100
- ss -tlnp 2>/dev/null || netstat -tlnp 2>/dev/null
101
- echo '=== Running Services ==='
102
- systemctl list-units --type=service --state=running --no-pager 2>/dev/null | head -30
103
- echo '=== Docker ==='
104
- docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}' 2>/dev/null || echo 'docker not installed'
105
- "
106
- ```
107
-
108
- 根据探测结果跳过不存在的服务检查(例如未部署 Redis 则跳过 check_db.sh 的 Redis 部分)。
109
-
110
- ---
111
-
112
- ## Step 4: 权威文档检索(必要时执行)
113
-
114
- 当出现以下任一情况,**先读** `references/security-doc-search.md`,再用 WebSearch / 官方站点检索:
115
-
116
- 1. `references/checks-*.md` 里只有抽象规则,没有给出当前版本依据
117
- 2. audit 输出出现了明确版本号,需要判断是否存在已知高危 CVE
118
- 3. 配置项语义、默认值、版本门槛不确定
119
- 4. 用户明确要求“按官方安全文档”解释
120
- 5. 本次发现适合沉淀回长期规则
121
-
122
- ### 强制来源顺序
123
-
124
- 1. 官方产品文档 / 官方 security 页面
125
- 2. 官方 release notes / advisories
126
- 3. CISA KEV / NVD / CVE
127
- 4. OWASP Cheat Sheet
128
-
129
- **禁止**把论坛、博客、AI 聚合页当唯一依据。
130
-
131
- ### 强制检索输出
132
-
133
- 每次外部检索至少产出 3 个字段:
134
-
135
- | 字段 | 说明 |
136
- |------|------|
137
- | `source` | 权威来源 URL |
138
- | `claim` | 从文档得到的明确结论 |
139
- | `impact` | 这条结论如何影响本次分级 / 判定 / 修复建议 |
140
-
141
- ### 需要沉淀时怎么做
142
-
143
- - 可复用的配置语义 / 检查基线 → 回写对应 `references/checks-*.md`
144
- - 可复用的检索方法 / 来源入口 → 回写 `references/security-doc-search.md`
145
- - 单次版本漏洞情报 → 只写进本次报告,不固化成长期规则
146
-
147
- ---
148
-
149
- ## Step 5: 分类检查(并行执行)
150
-
151
- **主 Claude 直接用 Bash 调用 `run_all.sh`,12 路并行跑完全部检查类目**,把原始输出落到 `/tmp/uc_audit_<host>.txt`,再由主 Claude `Read` 文件后做分析。
152
-
153
- ### 为什么不用 subagent 派遣
154
-
155
- 实测踩坑后的结论(请勿绕过本节直接派 subagent):
156
-
157
- 1. **subagent 读不到主用户的 `~/.ssh/config`** — 隔离环境下 alias 方式(如 `ssh tencent`)解析失败,报 `Could not resolve hostname :`(host 字段为空)。
158
- 2. **`cat script.sh | ssh host "bash -s"` 调用方式是错的** — 本目录每个 `check_*.sh` **本身就是 wrapper,脚本内部已 ssh**,接收 `<target> [ssh_opts...]` 作为参数。被外层 ssh 再包一层会嵌套两次 ssh,失败。
159
- 3. **subagent 多包一层反而引入协议偏差** — 主 Claude 直接 Bash 既快又能精确控制错误处理。
160
-
161
- ### 调用方式(强制)
162
-
163
- **主流程:一键并行 + 落盘**
164
-
165
- ```bash
166
- # 用户提供了 ssh alias(推荐,SSH config 已配好)
167
- bash {scripts}/run_all.sh <ssh_alias> > /tmp/uc_audit_<tag>.txt 2>&1
168
-
169
- # 用户提供显式参数
170
- bash {scripts}/run_all.sh <user>@<host> -p <port> -i <key> > /tmp/uc_audit_<tag>.txt 2>&1
171
- ```
172
-
173
- `run_all.sh` 内部已实现 12 路并行(每个 section 独立后台进程,约 15–30s 完成全部 12 类)。完成后所有 section 按固定顺序串接到 stdout。主 Claude 用 `Read` 工具读取该 txt 后做分析。
174
-
175
- **输出文件命名规则**:`/tmp/uc_audit_<host_or_alias>.txt`,便于用户回看 + 多次审计互不覆盖。
176
-
177
- ### 脚本调用约定(理解原理用)
178
-
179
- 每个 `check_xxx.sh` 是 wrapper,签名固定为:
180
-
181
- ```bash
182
- bash {scripts}/check_xxx.sh <target> [ssh_opts...]
183
- # 例:
184
- bash {scripts}/check_ssh.sh root@host -p 22 -i ~/.ssh/key
185
- bash {scripts}/check_ssh.sh tencent # alias 形式(主 Bash 可用)
186
- ```
187
-
188
- 脚本内部用 `ssh "${SSH_OPTS[@]}" "${TARGET}" bash -s <<'REMOTE' ... REMOTE` 把检查体 heredoc 给远端执行。**不要再外层管道 / stdin 重定向**。
189
-
190
- ```bash
191
- # ❌ 错误调用(嵌套 ssh,失败):
192
- cat {scripts}/check_ssh.sh | ssh root@host "bash -s"
193
- ssh root@host "bash -s" < {scripts}/check_ssh.sh
194
-
195
- # ✅ 正确调用:
196
- bash {scripts}/check_ssh.sh root@host -p 22 -i ~/.ssh/key
197
- ```
198
-
199
- ### 何时退化为串行
200
-
201
- 目标服务器 `sshd MaxStartups` 限制并发,或网络抖动导致并发失败:
202
-
203
- ```bash
204
- bash {scripts}/run_all.sh <target> [ssh_opts...] --serial > /tmp/uc_audit_<tag>.txt 2>&1
205
- ```
206
-
207
- ### 单类目重跑
208
-
209
- 某一类目失败需重跑时,直接调对应 `check_xxx.sh` 即可:
210
-
211
- ```bash
212
- bash {scripts}/check_db.sh <target> [ssh_opts...]
213
- ```
214
-
215
- **各类检查内容如下(详细规则见 references/):**
216
-
217
- ### 4.1 SSH 安全 — `{scripts}/check_ssh.sh`
218
-
219
- 检查 SSH 配置是否禁用密码登录、root 直登、是否暴露默认 22 端口,是否启用 fail2ban 等登录防爆机制。
220
-
221
- → 详细检查项、期望值、严重级见 `references/checks-network.md` §「4.1 SSH 安全」
222
-
223
- ### 4.2 Nginx 配置 — `{scripts}/check_nginx.sh`
224
-
225
- 检查 Nginx 的 HTTPS 强跳、TLS 协议/密码套件、安全 header、限流(limit_req / limit_conn)、慢速攻击防护与敏感路径暴露。
226
-
227
- → 详细检查项、期望值、严重级见 `references/checks-network.md` §「4.2 Nginx 配置」
228
-
229
- ### 4.3 数据库暴露 — `{scripts}/check_db.sh`
230
-
231
- 检查 PostgreSQL / Redis 的监听地址、公网可达性、认证强度、SSL、保护模式与版本 CVE。
232
-
233
- → 详细检查项、期望值、严重级见 `references/checks-data.md` §「4.3 数据库暴露」
234
-
235
- ### 4.4 HTTPS 证书 — `{scripts}/check_https.sh`
236
-
237
- 检查证书有效期、域名匹配、证书链完整性、自签证书与 OCSP Stapling。
238
-
239
- → 详细检查项、期望值、严重级见 `references/checks-network.md` §「4.4 HTTPS 证书」
240
-
241
- ### 4.5 环境变量 / 文件权限 — `{scripts}/check_env.sh`
242
-
243
- 检查 `.env` 文件权限与位置、nginx 静态目录是否泄漏敏感文件、`/etc/shadow` 权限、应用进程运行用户与 sudo 配置。
244
-
245
- → 详细检查项、期望值、严重级见 `references/checks-data.md` §「4.5 环境变量 / 文件权限」
246
-
247
- ### 4.6 Docker 安全 — `{scripts}/check_docker.sh`
248
-
249
- 检查 docker.sock 挂载、容器 root 运行、内部端口公网暴露、镜像 tag 固定度、`--privileged`、daemon 远程 API、RestartPolicy、daemon 日志驱动、registry-mirrors 与境外 registry 使用。
250
-
251
- → 详细检查项、期望值、严重级见 `references/checks-runtime.md` §「4.6 Docker 安全」
252
-
253
- ### 4.7 依赖服务连通性 — `{scripts}/check_services.sh`
254
-
255
- 检查内部服务端口可达性、健康检查端点、跨服务连通、防火墙与外部访问入口。
256
-
257
- → 详细检查项、期望值、严重级见 `references/checks-network.md` §「4.7 依赖服务连通性」
258
-
259
- ### 4.8 自愈与资源耗尽防护 — `{scripts}/check_resilience.sh`
260
-
261
- 检查关键服务是否 systemd enable(重启自启)、swap、根分区使用率、logrotate、ulimit、内存压力与容器内存上限。
262
-
263
- → 详细检查项、期望值、严重级(B 节系统服务开机自启 + D 节资源耗尽防护)见 `references/checks-runtime.md` §「4.8 自愈与资源耗尽防护」
264
-
265
- ### 4.9 日志大小与防爆检查 — `{scripts}/check_logs.sh`
266
-
267
- 按"日志源"细化到单文件粒度,检查 Docker json-log、Nginx 日志、journal、应用日志,并基于容器存活时长粗估"撑天数"。
268
-
269
- → 详细检查项、期望值、严重级与撑天数粗估说明见 `references/checks-runtime.md` §「4.9 日志大小与防爆检查」
270
-
271
- ### 4.10 硬件识别与资源推荐 — `{scripts}/check_capacity.sh`
272
-
273
- 输出宿主硬件规格 + 当前容器 mem_limit + Postgres/Redis 启动参数 + compose 资源声明;主 Claude 对照分级表生成"推荐 vs 当前"对比报告。
274
-
275
- → 容器资源推荐分级表、配比原则、对比报告格式、严重等级标记与日志大小推荐分级表见 `references/checks-runtime.md` §「4.10 硬件识别与资源推荐」
276
-
277
- ### 4.11 凭证强度审计 — `{scripts}/check_secrets.sh`
278
-
279
- 读取 5 类凭证源(.env / docker env / Redis requirepass / Postgres POSTGRES_PASSWORD / SSH 私钥),输出强度派生指标 `len / classes / strength / reason`,**强制脱敏不输出明文**。
280
-
281
- → 完整检查范围、强度评级算法、SSH 私钥单独评级、脱敏样例、禁止事项与修复指引见 `references/checks-data.md` §「4.11 凭证强度审计」
282
-
283
- ---
284
-
285
- ## Step 6: 生成报告
286
-
287
- 报告必须为 Markdown 格式,**核心是"完整检查清单 + 状态可视化"** — 让用户一眼看到"检查了哪些 / 通过哪些 / 失败哪些 / 跳过哪些 / 未覆盖哪些"。
288
-
289
- ### 状态图标统一
290
-
291
- | 图标 | 含义 | audit raw 输出触发条件 |
292
- |------|------|---------------------|
293
- | ✅ | 通过 | `[OK]` / `[OK+]` |
294
- | ❌ | 失败 | `[!!!] CRITICAL` / `[!!] HIGH` / `[!] MEDIUM` / `[!] LOW` |
295
- | ⊘ | 跳过 | `[i] xxx 未安装/未运行/不可读/跳过` |
296
- | ❓ | 未覆盖 | 本 skill `references/checks-*.md` 4.x 表格里有但 audit 输出没出现该项 |
297
-
298
- ### 主 Claude 生成报告的强制流程
299
-
300
- 1. **拿"清单基准"**:`references/checks-network.md` / `references/checks-data.md` / `references/checks-runtime.md` 各小节里的"**检查项**"列即为完整清单基准(共 ~120 项)
301
- 2. **拿"实际数据"**:用 Read 工具读 `/tmp/uc_audit_<host>.txt`(run_all.sh 输出)
302
- 3. **逐项配对**:对清单每一项,在 audit 输出里 grep 对应关键词,按图标规则归类
303
- 4. **不可省略**:即使某项是 ✅,**也要列出来**;不能只列失败
304
- 5. **未覆盖项必须显式列出**:暴露脚本侧的盲区,作为后续补强依据
305
-
306
- ### 报告固定结构
307
-
308
- ```markdown
309
- # 部署巡检报告
310
-
311
- **目标:** {host}
312
- **时间:** {iso8601}
313
- **执行人:** {user}@{client}
314
- **覆盖类别:** SSH / Nginx / DB / HTTPS / Env / Docker / Services / Resilience / Logs / Capacity / Secrets
315
-
316
- ---
317
-
318
- ## 摘要面板
319
-
320
- | 指标 | 值 |
321
- |------|---|
322
- | 总检查项 | N |
323
- | ✅ 通过 | A |
324
- | ❌ 失败 | B |
325
- | ⊘ 跳过 | C |
326
- | ❓ 未覆盖 | D |
327
- | **通过率** | **A / (A+B) = X%** |
328
-
329
- **失败按等级:**
330
-
331
- | 等级 | 数量 |
332
- |------|------|
333
- | 🔴 Critical | N |
334
- | 🟠 High | N |
335
- | 🟡 Medium | N |
336
- | 🔵 Low | N |
337
- | ⚪ Info | N |
338
-
339
- **整体评估:** [一句话结论:可放行 / 需立即处理 / 建议优化]
340
-
341
- ---
342
-
343
- ## 完整检查清单
344
-
345
- > 按 references 中 4.1-4.11 分组,每节一张表,节标题带通过率。
346
- > 表头四列固定:`#` / `检查项` / `严重级` / `状态` / `实际值/备注`
347
-
348
- ### 4.1 SSH 安全 (8/10 ✅)
349
-
350
- | # | 检查项 | 严重级 | 状态 | 实际值 / 备注 |
351
- |---|--------|--------|------|--------------|
352
- | 1 | PermitRootLogin | critical | ✅ | prohibit-password |
353
- | 2 | PasswordAuthentication | high | ❌ | yes(期望 no) |
354
- | 3 | PermitEmptyPasswords | critical | ✅ | no |
355
- | 4 | Port | medium | ⊘ | sshd_config 不可读(无 sudo) |
356
- | 5 | Protocol | high | ✅ | 2 |
357
- | 6 | MaxAuthTries | medium | ✅ | 3 |
358
- | 7 | LoginGraceTime | low | ❓ | audit 输出未提及该项 |
359
- | 8 | AllowUsers / AllowGroups | medium | ❌ | 未配白名单 |
360
- | 9 | sshd 日志可见 | high | ✅ | journalctl _COMM=sshd 有输出 |
361
- | 10 | fail2ban / sshguard | medium | ⊘ | 未安装 |
362
-
363
- ### 4.2 Nginx 配置 (12/19 ✅)
364
- [同上格式...]
365
-
366
- ### 4.3 数据库暴露 (PostgreSQL 6/7 ✅, Redis 7/8 ✅)
367
- [同上格式,PG 与 Redis 各一张子表]
368
-
369
- ### 4.4 HTTPS 证书 (4/5 ✅)
370
- [...]
371
-
372
- ### 4.5 环境变量 / 文件权限 (5/6 ✅)
373
- [...]
374
-
375
- ### 4.6 Docker 安全 (10/17 ✅)
376
- [...]
377
-
378
- ### 4.7 依赖服务连通性 (4/5 ✅)
379
- [...]
380
-
381
- ### 4.8 自愈与资源耗尽防护 (B 节 9/10 + D 节 6/7)
382
- [B 系统服务开机自启 + D 资源耗尽防护 各一张子表]
383
-
384
- ### 4.9 日志大小与防爆检查 (7/9 ✅)
385
- [...]
386
-
387
- ### 4.10 硬件识别与资源推荐 (容器资源 5/7 + 日志推荐 4/5)
388
- **包含"推荐 vs 当前"对比表(见 references/checks-runtime.md §4.10),保留原对比格式**
389
-
390
- ### 4.11 凭证强度审计 (12/15 ✅)
391
-
392
- > **强制脱敏:** 不论 audit raw 输出包含什么,清单中**只能列** `key 名 / len / classes / strength / reason / 严重级`,不得出现密码片段、明文、md5/sha1 哈希。
393
-
394
- | # | 凭证源 | 字段 | 严重级 | 状态 | 强度详情 |
395
- |---|--------|------|--------|------|---------|
396
- | 1 | .env (cloud/backend) | POSTGRES_PASSWORD | critical | ✅ | len=20 classes=4 STRONG |
397
- | 2 | .env (cloud/backend) | REDIS_PASSWORD | critical | ✅ | len=20 classes=4 STRONG |
398
- | 3 | .env (cloud/backend) | JWT_SECRET | high | ❌ | len=12 classes=2 MEDIUM(高敏字段建议 ≥ 32) |
399
- | 4 | docker env (cloud-db) | POSTGRES_PASSWORD | critical | ✅ | len=20 classes=4 STRONG |
400
- | 5 | Redis --requirepass | (cloud-redis-1) | critical | ✅ | len=20 classes=4 STRONG |
401
- | 6 | ~/.ssh/id_ed25519 | type+bits | high | ✅ | ED25519 perm=600 |
402
- | 7 | ~/.ssh/id_rsa | type+bits | medium | ❌ | RSA-2048 perm=600(建议升 ed25519) |
403
-
404
- ---
405
-
406
- ## 失败项详情(按严重级排序)
407
-
408
- > 仅展开 ❌ 项,按 critical → high → medium → low 排序;每条一段。
409
-
410
- ### 🔴 [CRITICAL] PostgreSQL listen_addresses 设置为 *
411
-
412
- - **类目:** 4.3 数据库暴露
413
- - **位置:** /etc/postgresql/15/main/postgresql.conf:59
414
- - **当前值:** `listen_addresses = '*'`
415
- - **期望值:** `listen_addresses = 'localhost,10.0.0.0/8'`
416
- - **风险:** 数据库监听所有网卡,若防火墙未拦截则公网可直接访问数据库
417
- - **修复建议:**
418
- 1. 编辑 postgresql.conf 改为内网地址
419
- 2. 配合 pg_hba.conf 限制源 IP
420
- 3. 重载: `sudo systemctl reload postgresql`
421
- - **参考:** https://www.postgresql.org/docs/current/runtime-config-connection.html
422
-
423
- ### 🟠 [HIGH] ...
424
-
425
- [继续列出每条 ❌ 项,严格按等级降序]
426
-
427
- ---
428
-
429
- ## 跳过项 (⊘)
430
-
431
- > 透明化暴露:列出所有 ⊘ 项 + 跳过原因,让用户决定是否追加权限/装服务后重跑。
432
-
433
- | 类目 | 检查项 | 跳过原因 |
434
- |------|--------|---------|
435
- | 4.1.4 SSH | Port | sshd_config 不可读(用户无 sudo) |
436
- | 4.1.10 SSH | fail2ban / sshguard | 未安装 |
437
- | ... | ... | ... |
438
-
439
- ---
440
-
441
- ## 未覆盖项 (❓) — 暴露脚本盲区
442
-
443
- > 这些项 references/checks-*.md 列了但 audit 输出没出现 — 说明脚本未实际检查或未输出该项判定。
444
- > **行动:** 记录盲区,后续补强 check_*.sh。
445
-
446
- | 类目 | 检查项 | 备注 |
447
- |------|--------|------|
448
- | 4.1.7 SSH | LoginGraceTime | check_ssh.sh 未输出该项 |
449
- | ... | ... | ... |
450
-
451
- ---
452
-
453
- ## 后续优化建议
454
-
455
- 根据本次失败项归纳的可执行后续动作:
456
-
457
- - 镜像版本不固定 (4.6) → 参考 Docker Hub 选稳定 patch 版本固定
458
- - daemon 未配 registry-mirrors (4.6) → 按服务器所在地区配置合适的 registry-mirrors
459
- - 容器资源偏离推荐 (4.10) → 改 `docker-compose.prod.yml` 的 mem_limit/maxmemory
460
- - ...
461
-
462
- ---
463
-
464
- ## 未覆盖范围(本 skill 边界外)
465
-
466
- - 未执行渗透测试(如需要,请使用专用渗透测试工具)
467
- - 未审计应用层逻辑(SQL 注入 / XSS 等)
468
- - 未审计应用日志内容(只看大小,不看内容合规)
469
- ```
470
-
471
- ---
472
-
473
- ## Step 7: 修复建议(只输出,不执行)
474
-
475
- **严格禁止:**
476
-
477
- - 自动执行任何修改命令
478
- - 通过 SSH 直接修改服务器配置
479
- - 重启任何服务
480
- - 主动建议"我来帮你修复"
481
-
482
- **允许:**
483
-
484
- - 在报告中给出修复命令片段(供用户复制)
485
- - 解释修复后的影响和验证方法
486
- - 推荐修复优先级
487
- - 给出本次实际引用过的权威文档 URL
488
-
489
- ---
490
-
491
- ## 严重等级定义
492
-
493
- | 等级 | 含义 | 示例 |
494
- |------|------|------|
495
- | **critical** | 公网可直接利用、数据可被直接访问、root 可被远程获取 | DB 公网暴露无密码、SSH 允许 root 密码登录 |
496
- | **high** | 需特定条件可被利用,可能导致权限提升或敏感信息泄漏 | 弱 TLS、无 fail2ban、密码登录开启 |
497
- | **medium** | 配置不规范但短期不致命,长期累积风险 | 默认端口、无 HSTS、autoindex 开 |
498
- | **low** | 最佳实践类,可选改进 | OCSP Stapling、CSP header |
499
- | **info** | 信息记录,非问题 | 当前 Nginx 版本号 |
500
-
501
- ---
502
-
503
- ## 禁止事项
504
-
505
- - **禁止**未确认 SSH 连接信息就开始检查
506
- - **禁止**执行任何写入命令(`sed -i`、`systemctl restart`、`echo > file`、`iptables -A` 等)
507
- - **禁止**主动 `tcpdump` / `pg_dump` / `redis-cli FLUSHALL` 等高负载或破坏性命令
508
- - **禁止**将检查结果中的敏感信息(密钥片段、密码哈希)完整输出到报告(必须脱敏)
509
- - **禁止**在未获得用户明确授权时审计**非用户自有**的服务器(出现陌生 host 必须二次确认所有权)
510
- - **禁止**自动修复发现的问题
511
- - **禁止**省略 critical / high 等级的问题不报告
@@ -1,126 +0,0 @@
1
- # Deploy Audit — 数据与凭证安全检查规则
2
-
3
- > **何时读这份:** 当 AI 即将运行 4.3 / 4.5 / 4.11 类检查或解读其输出时读取本文件。
4
-
5
- 本文件聚焦"数据与凭证安全"维度的检查规则、严重度判定与输出格式。涵盖数据库暴露、环境变量与文件权限、凭证强度审计。
6
-
7
- 脚本目录简称 `{scripts}` = `../scripts/`。
8
-
9
- ---
10
-
11
- ## 4.3 数据库暴露 — `{scripts}/check_db.sh`
12
-
13
- **PostgreSQL:**
14
-
15
- | 检查项 | 期望值 | 严重级 |
16
- |--------|--------|--------|
17
- | `listen_addresses` | `localhost` 或内网 IP,**禁止** `*` | **critical** |
18
- | 5432 公网可达性 | 公网不可达 | **critical** |
19
- | `pg_hba.conf` 认证方式 | `scram-sha-256` 或 `md5`,**禁止** `trust` | **critical** |
20
- | `password_encryption` | `scram-sha-256` | high |
21
- | 默认账号 `postgres` 密码 | 已设置且非弱密码 | **critical** |
22
- | `ssl` | `on` (远程连接场景) | high |
23
- | `log_connections` / `log_disconnections` | `on` | medium |
24
-
25
- **Redis:**
26
-
27
- | 检查项 | 期望值 | 严重级 |
28
- |--------|--------|--------|
29
- | `bind` | `127.0.0.1` 或内网 IP,**禁止** `0.0.0.0` 暴露 | **critical** |
30
- | 6379 公网可达性 | 公网不可达 | **critical** |
31
- | `requirepass` | 已设置且 ≥ 32 字符随机串 | **critical** |
32
- | `protected-mode` | `yes` | high |
33
- | `maxmemory` | 已设置(推荐物理内存 50%–70%),**禁止** `0`(无上限) | high |
34
- | `maxmemory-policy` | 业务侧已感知(`allkeys-lru` / `volatile-lru` 常见,`noeviction` 需特别确认) | info |
35
- | `rename-command` | 危险命令(FLUSHALL/CONFIG)已重命名 | medium |
36
- | Redis 版本 | 非已知 CVE 版本 | medium |
37
-
38
- **Redis 版本判定补充:**
39
-
40
- - 配置语义先看官方安全文档:`https://redis.io/docs/latest/operate/oss_and_stack/management/security/`
41
- - 版本安全再搜:`redis <version> CVE`、`redis <version> security advisory`
42
- - 优先来源:Redis 官方、NVD、CISA KEV
43
- - 分级规则:
44
- - Redis 外网暴露 + 命中高危 CVE / KEV → **critical**
45
- - Redis 仅内网暴露,但命中高危 CVE → high
46
- - 未命中高危 CVE,但版本明显偏旧且无安全维护依据 → medium
47
- - 如 `bind`、`protected-mode`、公网暴露本身已不合规,按对应配置项分级;不要把“版本风险”和“暴露风险”混成一条。
48
-
49
- ---
50
-
51
- ## 4.5 环境变量 / 文件权限 — `{scripts}/check_env.sh`
52
-
53
- | 检查项 | 期望值 | 严重级 |
54
- |--------|--------|--------|
55
- | `.env` 文件权限 | `600` 或更严 | **critical** |
56
- | `.env` 文件位置 | 不在 nginx `root` 目录下 | **critical** |
57
- | `nginx -T` 可达静态目录 | 不包含 `.env`、`.git`、密钥 | **critical** |
58
- | `/etc/shadow` 权限 | `640` 或 `600` | high |
59
- | 应用进程运行用户 | 非 root | high |
60
- | sudo 免密配置 | 仅必要命令 | medium |
61
-
62
- ---
63
-
64
- ## 4.11 凭证强度审计 — `{scripts}/check_secrets.sh`
65
-
66
- > **强制脱敏:** 脚本能读密码,但**绝不输出明文**。所有结论以派生指标形式输出:`len=N classes=K strength=STRONG/MEDIUM/WEAK reason=xxx`。Claude 在生成报告时也**禁止**任何还原或猜测明文。
67
-
68
- **检查范围(5 类凭证源):**
69
-
70
- | # | 凭证源 | 提取方式 | 字段示例 |
71
- |---|--------|---------|---------|
72
- | 1 | `.env` 文件 | `find /home /opt /srv /root -name ".env*"` | `*PASSWORD* / *SECRET* / *TOKEN* / *KEY* / *AK / *SK` |
73
- | 2 | docker 容器内联 env | `docker inspect --format '{{range .Config.Env}}'` | 同上 |
74
- | 3 | Redis `--requirepass` | `docker inspect <redis> .Args` | requirepass 启动参数值 |
75
- | 4 | Postgres `POSTGRES_PASSWORD` | docker container env | POSTGRES_PASSWORD |
76
- | 5 | SSH 私钥 | `ssh-keygen -l -f ~/.ssh/id_*` | type + bits + perm |
77
-
78
- **强度评级算法(脚本侧):**
79
-
80
- | 条件 | 等级 | 严重级 |
81
- |------|------|--------|
82
- | 长度 < 8 | WEAK | **critical** |
83
- | 字典词命中(内置 30 词:`password / admin / root / test / changeme / 123 / qwerty / welcome / letmein / secret` 等) | WEAK | **critical** |
84
- | 长度 < 16 | MEDIUM | medium |
85
- | 字符类 < 3(大小写/数字/符号) | MEDIUM | medium |
86
- | 长度 ≥ 16 且 字符类 ≥ 3 | STRONG | OK |
87
- | **高敏字段附加门槛**(SECRET/JWT/TOKEN/API_KEY/AK/SK/PRIVATE_KEY 类):长度 < 32 | — | high |
88
-
89
- **SSH 私钥单独评级:**
90
-
91
- | 类型 / 位数 | 严重级 |
92
- |------------|--------|
93
- | ED25519 | OK |
94
- | RSA ≥ 4096 | OK |
95
- | RSA 3072 | OK(建议升 ed25519) |
96
- | RSA 2048 | medium |
97
- | RSA < 2048 | **critical** |
98
- | ECDSA(NIST 曲线) | medium(建议 ed25519) |
99
- | DSA | **critical**(已废弃) |
100
- | 私钥 perm ≠ 600/400 | high |
101
-
102
- **输出脱敏样例:**
103
-
104
- ```
105
- [/opt/ai-quant/quant-cloud/backend/.env]
106
- POSTGRES_PASSWORD len=20 classes=4 strength=STRONG reason=ok [OK]
107
- REDIS_PASSWORD len=20 classes=4 strength=STRONG reason=ok [OK]
108
- JWT_SECRET len=12 classes=2 strength=MEDIUM reason=len<16 [!!] HIGH: 高敏字段建议 >= 32 字符随机串
109
- OSS_ACCESS_KEY_SECRET len=8 classes=1 strength=WEAK reason=dict_match [!!!] CRITICAL: 弱凭证, 必须立即轮换
110
-
111
- [~/.ssh/id_rsa]
112
- type=RSA bits=2048 perm=600 [!] MEDIUM: RSA-2048 可接受但建议升 ed25519 或 RSA-4096
113
- ```
114
-
115
- **禁止事项:**
116
-
117
- - 禁止把密码明文(或片段、字符片段、md5/sha1 等单向哈希)写入报告
118
- - 禁止"我看到密码是 xxx**" 这类提示性表述
119
- - 禁止把 audit raw 输出原文复制到报告(必须只摘 strength/len/classes 三段)
120
- - 禁止建议用户"轮换为 abc123" 这种举例(用 `openssl rand -base64 24` 这种**生成命令**)
121
-
122
- **修复指引(脚本末尾自动输出):**
123
-
124
- - 通用密码 ≥ 16 字符 + 三类:`openssl rand -base64 24 | tr -d '=+/' | cut -c1-20`
125
- - 高敏 token ≥ 32 字符:`openssl rand -hex 32`
126
- - SSH key 升级:`ssh-keygen -t ed25519 -C "your@email"`