news 2026/9/18 18:40:46

CANN ops-nn 算子库安全声明解读:权限最小化、文件管控与构建运行安全实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN ops-nn 算子库安全声明解读:权限最小化、文件管控与构建运行安全实践

CANN ops-nn 算子库安全声明解读:权限最小化、文件管控与构建运行安全实践

【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn

CANN ops-nn 是 CANN 提供的神经网络类计算算子库,用于在 NPU 上加速各类网络计算。本文基于仓库根目录的 SECURITY.md 安全声明,系统梳理该算子库在运行用户选择、文件权限控制、源码构建、算子运行及依赖下载等环节的安全要求,并结合 install_deps.sh、cmake/package.cmake 等仓库文件给出源码级佐证。读完本文,你将掌握在开发、编译、运行 CANN ops-nn 算子时应当遵循的安全基线,包括 umask 设置、目录与文件权限上限、异常场景的定位方法,以及对外部编译依赖的审计方式。

一、运行用户建议:坚持权限最小化原则

SECURITY.md 开篇即给出第一条安全基线:不建议使用 root 等管理员类型账户执行任何命令,应遵循权限最小化原则

这条建议适用于 CANN ops-nn 使用过程中的所有环节:

  • 环境准备:安装编译依赖、配置 CMake 构建环境时,避免以 root 身份执行安装脚本;
  • 源码编译:编译算子时生成的中间文件、产物文件若由管理员账户创建,其默认权限往往过高,容易成为提权与信息泄露的入口;
  • 算子调用:编写和执行算子调用脚本时,同样建议使用普通业务账户。

权限最小化的核心思想是"够用即可"——进程只拥有完成自身任务所需的最小权限,从而缩小攻击面。例如仓库根目录下的 install_deps.sh(约 632 行的依赖安装脚本)会执行aptgcc工具链配置等敏感操作,这类脚本尤其应当在受控的普通账户或专用的构建环境中运行,而非直接使用 root。

二、文件权限控制:umask 与分场景权限上限

2.1 设置 umask 值为 0027 及以上

SECURITY.md 建议用户在主机(包括宿主机)及容器中,将运行系统的 umask 值设置为0027 及以上,从而保证:

  • 新增文件夹的默认最高权限为750(rwxr-x---)
  • 新增文件的默认最高权限为640(rw-r-----)

umask 表示创建文件时"扣减"的权限位。umask 0027意味着新建目录不会带出 group 写权限、other 全部权限,新建文件不会带出 group 写权限和 other 全部权限,确保新增内容默认对同组只读、对其他用户不可见。该设置在宿主机与容器内均需生效,避免容器与宿主机之间因权限差异导致敏感文件意外可读。

2.2 敏感内容的权限管控

以下敏感内容都需要做好权限控制:

  • 个人隐私数据;
  • 商业资产;
  • 源文件;
  • 算子开发过程中保存的各类文件(如op_hostop_kerneltests目录下的源码与测试文件);
  • 本项目安装目录;
  • 输入公共数据文件。

以上各类文件的权限上限可参考下文附录 A 的"文件(夹)各场景权限管控推荐最大值"表。

2.3 kernel_meta_* 算子编译缓存

算子运行时可能会缓存算子编译文件,存放在运行目录下的kernel_meta_*文件夹内,用于加快后续算子的调用速度。该目录中保存的是算子 kernel 的编译产物,可能包含反编译后可读取的实现细节,因此用户应根据需要,对生成后的相关文件自行做好权限控制,防止被未授权用户读取。

三、构建安全声明:源码编译后的中间文件管控

CANN ops-nn 采用源码编译安装方式,用户在编译过程中会生成大量中间文件。SECURITY.md 明确要求:编译完成后,对中间文件做好权限控制,以保证文件安全

从仓库的构建体系可以印证这一要求背后的必要性:

  • cmake/package.cmake 中通过add_cann_third_party(makeself-fetch)拉取打包工具 makeself;
  • cmake/func.cmake 与 cmake/modules/Findaicpu.cmake 引用 eigen 等第三方库;
  • 构建过程会经由 scripts/opgen、cmake/gen_ops_info.cmake 等环节生成算子二进制、ops-info配置文件等产物。

这些中间文件分布在构建目录、kernel_meta_*缓存目录以及第三方依赖解压目录中,建议在编译完成后:

  1. 检查构建目录(如buildout等)中产物的属主与权限;
  2. 对包含算子实现信息的中间产物按 640/750 上限收紧权限;
  3. 定期清理不再需要的临时编译文件。

四、运行安全声明:资源匹配、异常定位与版本匹配

4.1 算子调用脚本与运行资源匹配

建议用户结合运行环境资源状况编写算子调用脚本。若脚本与资源状况不匹配,可能引发错误并导致进程意外退出,典型场景包括:

  • 生成输入数据或标杆(benchmark)计算结果时,申请空间超出内存容量限制;
  • 脚本在本地保存数据超过磁盘空间大小。

因此在编写用例时,应预估输入张量、中间结果及输出结果的内存占用,并结合 NPU 可用显存与宿主机可用内存合理设置数据规模。

4.2 算子运行异常时的定位方法

算子在运行异常时会退出进程并打印报错信息,建议根据报错提示定位具体错误原因,常用手段包括:

  • 设定算子同步执行,将异步错误转为同步可捕获的错误,便于获取完整调用栈;
  • 查看日志文件,结合报错码与日志时间线确认失败环节;
  • 结合算子自身实现(如 activation/relu/op_kernel、op_host 中的 tiling 与 kernel 代码)排查输入 shape、数据类型与约束条件是否满足。

4.3 PyTorch 调用场景的版本匹配

算子通过 PyTorch 方式调用时,可能会因为版本不匹配导致运行错误。具体可参考 PyTorch 的安全声明(见 gitee.com/ascend/pytorch 中"安全声明"章节)。实践中应确保:

  • CANN 工具链版本与 PyTorch 适配版本一致;
  • 算子库(ops-nn)构建时使用的昇腾软件栈与运行时 NPU 驱动版本匹配;
  • 升级任一组件后重新执行算子用例验证兼容性。

五、公网地址声明:编译依赖来源审计

SECURITY.md 声明了本项目代码中涉及的公网地址,主要用于编译依赖的获取。下表完整列出(URL 以纯文本呈现,便于审计核对):

类型开源代码地址文件名公网IP地址/公网URL地址/域名/邮箱地址/压缩文件地址用途说明
依赖不涉及cmake/third_party/makeself-fetch.cmakehttps://gitcode.com/cann-src-third-party/makeself/releases/download/release-2.5.0-patch1.0/makeself-release-2.5.0-patch1.tar.gz从gitcode下载makeself源码,作用编译依赖
依赖不涉及cmake/third_party/nlohmann_json.cmakehttps://gitcode.com/cann-src-third-party/json/releases/download/v3.11.3/include.zip从gitcode下载json源码,作用编译依赖
依赖不涉及cmake/third_party/gtest.cmakehttps://gitcode.com/cann-src-third-party/googletest/releases/download/v1.14.0/googletest-1.14.0.tar.gz从gitcode下载googletest源码,作用编译依赖
依赖不涉及cmake/third_party/eigen.cmakehttps://gitcode.com/cann-src-third-party/eigen/releases/download/5.0.0-h0.trunk/eigen-5.0.0.tar.gz从gitcode下载eigen源码,作用编译依赖
依赖不涉及ops-nn/install_deps.shhttps://apt.kitware.com/keys/kitware-archive-latest.asc从apt.kitware.com下载Kitware签名密钥,作用编译依赖
依赖不涉及ops-nn/install_deps.shhttps://apt.kitware.com/ubuntu/从apt.kitware.com下载Kitware签名密钥,作用编译依赖
依赖不涉及cmakehttps://apt.kitware.com/keys/kitware-archive-latest.asc从kitware下载cmake软件,作用编译依赖
依赖不涉及cmakehttps://apt.kitware.com/ubuntu/从kitware下载cmake软件,作用编译依赖

对上述依赖的源码级印证:

  • makeself 依赖:构建打包流程在 cmake/package.cmake 中通过add_cann_third_party(makeself-fetch)触发下载;
  • nlohmann_json 依赖:JSON 解析贯穿算子配置与 ops-info 生成流程,cmake/gen_ops_info.cmake 中大量使用*_binary.jsonops-info.json等配置文件的解析与生成,cmake/func.cmake 中add_dependencies(${OPHOST_NAME}_tiling_obj json)明确声明了对 json 库的编译依赖;
  • gtest 依赖:仓库 tests/ut 目录包含大量 C++ 单测用例,gtest 作为单元测试框架被引入;
  • eigen 依赖:cmake/func.cmake 与 cmake/modules/Findaicpu.cmake 中可见${CANN_3RD_LIB_PATH}/eigen的引用;
  • Kitware 依赖:仓库根目录 install_deps.sh 承担 CMake 等编译依赖的安装,其中涉及 apt 源配置与 Kitware 签名密钥导入。

安全提示:在受控网络环境中编译时,可结合该表对构建期网络访问做白名单管控,并对下载产物做校验与归档,防止供应链投毒风险。

六、漏洞机制说明

若在 CANN ops-nn 使用过程中发现安全漏洞,可遵循 CANN 社区统一的漏洞管理机制进行上报与处置(漏洞管理说明见 gitcode.com/cann/community 仓库 security 目录下的 security.md)。建议关注安全公告与补丁发布节奏,及时将算子库升级到修复版本。

七、附录:文件(夹)各场景权限管控推荐最大值

下表为 SECURITY.md 附录给出的完整权限参考表,适用于算子开发、安装、运行过程中各类文件与目录的权限设置:

类型Linux权限参考最大值
用户主目录750(rwxr-x---)
程序文件(含脚本文件、库文件等)550(r-xr-x---)
程序文件目录550(r-xr-x---)
配置文件640(rw-r-----)
配置文件目录750(rwxr-x---)
日志文件(记录完毕或者已经归档)440(r--r-----)
日志文件(正在记录)640(rw-r-----)
日志文件目录750(rwxr-x---)
Debug文件640(rw-r-----)
Debug文件目录750(rwxr-x---)
临时文件目录750(rwxr-x---)
维护升级文件目录770(rwxrwx---)
业务数据文件640(rw-r-----)
业务数据文件目录750(rwxr-x---)
密钥组件、私钥、证书、密文文件目录700(rwx------)
密钥组件、私钥、证书、加密密文600(rw-------)
加解密接口、加解密脚本500(r-x------)

使用要点:

  • 权限数值为"最大值"而非强制值,实际设置可根据业务场景进一步收紧;
  • 涉及密钥、证书、密文的内容一律使用 600/700 级别的私有权限,仅属主可读写;
  • 日志归档后可降级为 440(只读),既保留审计需要又避免被篡改;
  • 程序文件采用 550 只读可执行权限,防止运行期被意外改写。

总结

CANN ops-nn 的安全基线可以概括为三条主线:最小权限运行(不推荐 root 执行命令)、精细化文件管控(umask 0027 起步、按场景设置权限上限、管控kernel_meta_*编译缓存)、全链路安全声明(构建中间文件、运行资源与异常定位、PyTorch 版本匹配、公网依赖审计)。在部署与开发过程中,将 SECURITY.md 中的权限表和依赖清单纳入日常安全检查项,即可显著降低因权限过大、依赖失控或资源不匹配带来的安全与稳定性风险。

【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 18:39:15

RIOT 对 TI MSP430 架构的支持解析:16 位低功耗 MCU 的移植与实现

RIOT 对 TI MSP430 架构的支持解析:16 位低功耗 MCU 的移植与实现 【免费下载链接】RIOT RIOT - The friendly OS for IoT 项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT 导读 本篇文章以 cpu/msp430/doc.md 为核心线索,系统梳理 RI…

作者头像 李华
网站建设 2026/9/18 18:35:39

OceanBase状态矛盾排查:oceanbase-ce not running的根因与修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 18:34:23

死锁活锁饥饿阻塞无锁:高并发故障诊断与预防实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 18:33:00

Win10此电脑默认文件夹隐藏教程:注册表与reg文件实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 18:30:17

Cadence CIS连不上数据库?32位ODBC驱动与DSN配置全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华