安全代码所有权地图
从 Git 历史识别敏感代码的实际维护者、所有权风险与总线因子。
脚本主要读取本地 Git 历史并写入用户指定输出目录,权限范围相对有限;但会导出姓名、邮箱、时区和提交记录等潜在敏感信息,未说明用户确认、隐私处理、访问控制或回滚机制,且 networkx 依赖通过 pip 安装,依赖安全说明不足,因此扣分。
文档、参数和多个脚本的主流程基本一致,包含部分错误信息和退出码;但未提供测试套件或 CI 证据,异常输入、缺失文件、无效排序字段和大型仓库性能处理有限,且静态审查无法验证关键路径,因此限制在静态上限内并扣分。
触发条件、目标用户场景、输入范围和主要输出较清晰,明确排除一般维护者列表及非安全归属问题;但未说明非适用边界、中文交互支持或网络环境要求,Neo4j 与 pip 依赖可能增加中国大陆环境适配成本,因此扣分。
SKILL.md 结构清楚,提供安装说明、快速开始、参数示例、输出文件说明、查询示例和 Neo4j 参考文档;但单项许可证未知,缺少技能版本、变更日志、明确维护责任和稳定更新路径,仓库 README 还标明仓库已弃用,因此扣分。
能力目标明确,能够生成 ownership、bus-factor、敏感代码和 co-change 相关 CSV/JSON 图数据,查询工具也提供有界输出;但没有提交的测试结果或代表性产物验证,敏感规则是路径模式而非语义分析,结果仍需人工审查,因此不超过静态上限并扣分。
源代码、参数定义和输出格式可审计,文档与实现大体可对照;但没有测试套件、CI 覆盖、第三方执行证据或交叉来源验证,结论主要依赖静态代码阅读,因此仅给有限分数。
- 输出包含人员身份、邮箱、时区和提交历史,使用前应确认授权并限制结果文件访问。
- 默认敏感代码识别依赖路径 glob,可能漏报或误报;应提供项目特定规则并人工复核。
- 安装 networkx 和导入 Neo4j 可能依赖外部服务或网络,需在目标环境中单独验证。
- 仓库 README 标示仓库已弃用,不能假定该技能会持续维护。
它能做什么 & 适用场景
该技能分析 Git 仓库历史,构建人员与文件之间的二部所有权图。它可计算敏感代码所有权、总线因子、孤立敏感代码和低总线因子热点,并生成适用于 Neo4j、Gephi 及可视化工具的图数据。它还通过共享提交的 Jaccard 相似度构建文件协同变更图,用于识别代码聚类和所有权漂移。仅当用户明确要求基于 Git 历史的安全导向所有权或总线因子分析时才应触发。
读取本地 Git 仓库及其提交历史,可按时间范围筛选,并默认使用作者身份、作者日期且排除合并提交。运行 run_ownership_map.py,按照默认或 CSV 配置的敏感路径规则分析人员、文件、触碰关系和协同变更关系;默认排除常见胶水文件及 Dependabot 提交。输出 people.csv、files.csv、edges.csv、cochange_edges.csv、summary.json、communities.json 和图 JSON,必要时还可输出提交 JSONL 与 GraphML。随后可用 query_ownership.py 查询人员、文件、敏感标签、社区和安全摘要的有界 JSON 切片。
- 安全团队希望找出长期未维护且总线因子较低的敏感代码。
- 工程负责人希望识别 auth 或 crypto 文件的实际维护者,并检查 CODEOWNERS 是否反映真实提交活动。
- 平台团队希望发现敏感代码的隐藏所有者、所有权集中度和潜在维护风险。
- 架构或安全研究人员希望按协同变更关系聚类文件,并分析所有权漂移。
- 需要将代码所有权数据导入 Neo4j 或 Gephi 进行关系分析的团队。
优缺点一览
- 专门针对基于 Git 历史的安全所有权和总线因子分析。
- 支持敏感路径自定义、时间窗口、作者或提交者归属及合并提交控制。
- 同时生成所有权图、协同变更图、社区和有界 JSON 查询结果。
- 可导出 CSV、JSON 和可选的 GraphML,便于后续图数据库或可视化处理。
- 结果依赖仓库 Git 历史、提交身份和敏感路径规则的质量。
- 源材料未提供测试套件、平台兼容性清单或性能基准。
- 需要 Python 3 和 networkx,并需要在本地 shell 中运行脚本。
- README 声明该仓库已弃用,当前示例应参考 OpenAI Plugins repository;单独技能的许可证内容未提供。
如何安装
该技能位于 openai/skills 的 curated 目录中。使用 Codex 内的 $skill-installer security-ownership-map 安装;安装后重启 Codex 以加载技能。README 未提供该单独技能的许可证内容,且仓库顶层许可证标为未知;README 说明单个技能的许可证应在其目录下的 LICENSE.txt 中查看。
如何使用
仅在明确提出安全导向的 Git 所有权或总线因子问题时触发,例如“找出孤立的敏感代码”或“检查 CODEOWNERS 与实际风险所有权是否一致”。在仓库根目录运行:python skills/skills/security-ownership-map/scripts/run_ownership_map.py --repo . --out ownership-map-out --since "12 months ago" --emit-commits。再使用 python skills/skills/security-ownership-map/scripts/query_ownership.py --data-dir ownership-map-out summary --section orphaned_sensitive_code 查询结果。