资讯详情

资讯详情

提交前先本地预检:OSS Scanner的validate.py与check工具使用详解(Docker/QEMU双模式)

【免费下载链接】oss-scanner项目地址https://gitcode.com/gh_mirrors/os/oss-scanner点击查看免费下载OSS Scanner 是 Anthropic 提供的开源项目安全扫描服务它把你的项目在隔离环境中构建出来再断网分析潜在漏洞。想把自己的项目注册进扫描名单提交 PR 之前强烈建议先跑一遍仓库自带的两个本地预检工具tools/validate.py校验注册配置是否符合规则tools/check则按扫描器的真实流程完整构建项目并带你进入一个离线 shell 试跑测试——支持 Docker 与 QEMU 双模式帮你在合并前排除几乎所有提交后构建失败的坑。为什么提交 PR 前要先做本地预检注册一个项目本质上就是给仓库提交一个projects/name/目录包含 project.yaml 等文件。合并后扫描器会在线构建你的项目运行你的 Dockerfile断网后开始扫描分析把结果邮件发给primary_contact。如果构建在扫描器那里失败了你会收到一封报错邮件然后回来修、再提交一次——来回折腾。而仓库作者在 README.md 中明确建议提交 PR 前跑两条命令本地模拟整个流程。这正是本文要讲的两把预检利器 ️。准备工作克隆仓库并安装依赖git clone https://gitcode.com/gh_mirrors/os/oss-scanner cd oss-scanner pip install pyyaml依赖一览工具Docker 模式依赖QEMU 模式依赖必装git、Docker、Python 3 PyYAMLLinux x86-64 qemu-system-x86_64qemu-img替代 Docker建议—可访问/dev/kvm无 KVM 时纯模拟构建会慢很多以 Debian/Ubuntu 为例QEMU 依赖可装qemu-system-x86和qemu-utils。validate.py 快速校验注册配置tools/validate.py 的作用一句话离线、只读、逐条检查projects/name/是否遵守注册规则。它不联网、不写任何文件有错逐行打印到 stderr 并以退出码1结束全部通过则打印一行汇总并以0结束。tools/validate.py它检查的内容与扫描器导入项目时执行的规则完全一致报错信息也相同必填字段repo单个 https 仓库地址可用#branch或#tag锁定分支和primary_contact缺一不可字段白名单出现workflow、budget、cadence等运营者专用字段会直接报错——这些不能由注册方设置想影响扫描方式应写进threat_model.md格式校验repo/homepage必须是合法的 https URL邮箱格式要正确auto_ccs必须是列表pgp必须是一整块带 BEGIN/END 的公钥文本且不能与auto_ccs同时使用加密报告只会发给主联系人文件位置规则Dockerfile 必须存在于恰好一个地方——要么放在project.yaml旁边要么放在你自己的仓库中并通过dockerfile:指定路径两者都有或都没有都会报错threat_model.md同理目录卫生目录名只能用a-z 0-9 . _ -最长 63 字符、拒绝符号链接、project.yaml不超过 128 KiB 且必须能被 YAML 解析。 小技巧tools/check name的第一步内部就会调用同样的校验逻辑见 tools/check 中的load()所以跑 check 之前先跑一遍 validate.py能更快定位是配置问题还是构建问题。tools/check 五步构建还原扫描器的真实流程tools/check 是预检的核心它完全按扫描器的方式构建你的项目构建成功后直接打开一个无网络的 shell 供你亲自试跑。它依次执行五步规则校验等价于跑一遍validate.py不合规直接退出退出码2匿名克隆以扫描器的方式匿名 clone 你的repo仅限 https、不弹凭据提示——这意味着私有仓库在这里就会先失败构建 Dockerfile使用你的代码作为 build context此阶段有网络叠加扫描器层安装 Claude Code、编译器、gdb 等分析工具逻辑见 tools/check_build.py 中的TOOLS_LAYER离线开工以--network none启动成品镜像在/src目录给你一个 root bash。tools/check 项目名其中项目名是projects/下的目录名也可以直接传一个包含project.yaml的目录路径方便在提交 PR 前先在本地目录试跑。构建阶段有明确的时间与资源约束定义在 tools/check_build.py全程45 分钟上限扫描器给到 16 CPU / 64 GB 内存 / 120 GB 磁盘。构建成功或失败分别返回退出码0/1规则违规则返回2。进入离线 shell 后该做什么构建成功后你会看到横幅提示你正以 root 身份站在成品镜像的/src里没有网络。此时不妨做一件假设自己在研究这个项目的事跑一遍测试、启动主程序、打开 gdb 看看。记住那句提示——凡是在这里因为缺网而失败的东西在真实扫描时也一样会失败解决办法只有一个把它挪进 Dockerfile 的联网阶段提前下载。退出 shellexit或 Ctrl-D后容器即销毁不留任何痕迹。参数速查--qemu、--no-shell、--dir参数作用--qemu改用 QEMU 虚拟机执行整个流程下一节详述可加--no-qemu显式禁用--no-shell构建完成后即停止不进入交互 shell适合挂到 CI 里做构建检查--dir 路径指定工作目录默认为~/.cache/oss-scanner-check/name权限 0700tools/check --no-shell 项目名 # 只验证能否构建 tools/check --dir /tmp/my-check 项目名⚠️ 安全提醒tools/check构建你的 Dockerfile 时是带网络的如同docker build。QEMU 模式虽然把构建隔离进虚拟机、不碰你本机的文件但虚拟机仍可访问你电脑和局域网上的服务。只检查你信任的项目或在一台没什么可损失的机器上运行。另外与扫描器一致check 会往镜像里安装 Claude Code受其自身条款约束。tools/check --qemu在虚拟机里 1:1 还原扫描环境如果你想要和扫描器最接近的验证就用 QEMU 模式tools/check --qemu 项目名实现细节在 tools/check_qemu.py 中它一共启动三台虚拟机base machine基础机一台装好 Docker 的 Debian 12 虚拟机。首次运行会下载官方镜像带 SHA-512 校验、通过 cloud-init 自动配置耗时约 10 分钟完成后磁盘缓存在~/.cache/oss-scanner-check/base.qcow2只建一次之后复用build machine构建机基础机的一份写时复制盘有网络。它挂载共享目录在机内执行 check_build.py完成后自动关机磁盘留待下一步shell machineshell 机构建机磁盘的又一份写时复制盘彻底断网——无出站路由、DNS 也不响应。开机后它会先做越狱检测发 DNS 查询、尝试出站连接确认确实无路可逃才启动特权容器并通过串口把终端接回你的屏幕。横幅上会如实汇报检测结果例如DNS none, connections none。几个使用细节资源会自动适配你的机器最多用到你全部 CPU 和一半内存但 45 分钟时限照旧没有/dev/kvm时会退化为纯软件模拟横幅会提示EMULATED构建可能慢好几倍在 shell 里按Ctrl-]可切断串口并停机exit或 Ctrl-D 则正常结束、关机必须以普通用户运行root 会被拒绝且仅限 Linux x86-64。Docker 模式 vs QEMU 模式如何选维度Docker 模式默认QEMU 模式--qemu隔离强度容器直接跑在宿主机上完整虚拟机构建过程不接触本机文件与扫描环境相似度接近断网 shell 同样有 2 CPU / 8 GB 限制与SYS_PTRACE能力更高特权容器 断网虚拟机1:1 还原扫描环境要求git Docker 即可跨平台仅 Linux x86-64需 QEMU首次耗时通常几分钟首次约 10 分钟建基础机之后复用适用场景日常快速验证、CI 集成提交前的最终确认、构建涉及特权操作时一般策略先用 Docker 模式快速迭代提交 PR 前再用 QEMU 模式做一次终检✅。常见问题排查清单cannot clone repo克隆是匿名且仅 https 的私有仓库、需要认证的仓库必挂#branch写错分支名也一样。Dockerfile 缺路径报错a Dockerfile is required, in exactly one place—— 要么把 Dockerfile 放到project.yaml旁边要么设dockerfile:指向你仓库中的路径二选一。/src警告如果镜像里既没有/src、工作目录也不像项目位置check 会把源码裸拷进/src并提醒你里面什么都没构建过——建议按 templates/Dockerfile 的写法COPY . /src后在/src里构建。扫描器层装不上成品镜像必须保留包管理器apt/dnf/yum/apk/zypper/pacman 之一或至少带curl、git、python3、bashscratch、distroless 这类极简底座会直接失败。45 分钟构建超时通常是有步骤挂起了——等待输入的交互提示、watch 模式、永远不返回的测试都需要设上限或剔除。断网后测试失败回到 Dockerfile 联网阶段把测试要用的依赖、数据集、模型全部提前下载。pgp与auto_ccs冲突二者互斥加密报告只发primary_contact。相关文件导航预检工具tools/validate.py、tools/check、tools/check_build.py、tools/check_qemu.py注册模板templates/project.yaml、templates/Dockerfile、templates/threat_model.md说明文档README.md注册与流程总览、CONTRIBUTING.md提交 PR 清单真实注册示例projects/openssl/project.yaml用#master锁定分支、projects/atproto/project.yaml带auto_ccs抄送列表把validate.py和check当作提交前的两道闸门规则错误当场拦住构建问题在离线 shell 里亲手复现。预检通过你的注册 PR 合并后基本就是一路绿灯 。赞分享【免费下载链接】oss-scanner项目地址https://gitcode.com/gh_mirrors/os/oss-scanner点击查看免费下载相关推荐用 precommit-check 与 rusty-hook 为 Rust 工作区构建本地提交前质量门禁用 precommit check 与 rusty hook 为 Rust 工作区构建本地提交前质量门禁 在 llm 这类由多个 Cargo crate 组成的人工智能大模型推理引擎本地部署Mooncake 提交前本地验证用 run_ci_test.sh 一站式复现 GitHub Actions 检查Mooncake 提交前本地验证用 run_ci_test.sh 一站式复现 GitHub Actions 检查 导读 本文围绕 Mooncake 仓库内 .人工智能大模型模型推理服务后端Mooncake 本地 CI 预提交验证指南用 scripts/run_ci_test.sh 在提交 PR 前验证当前分支Mooncake 本地 CI 预提交验证指南用 scripts/run_ci_test.sh 在提交 PR 前验证当前分支 本文是 Mooncake 开源仓库人工智能大模型模型推理服务后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →