ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

pyasc 安全使用指南:运行用户、文件权限与构建运行安全实践

pyasc 安全使用指南:运行用户、文件权限与构建运行安全实践 pyasc 安全使用指南运行用户、文件权限与构建运行安全实践【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyascpyasc 是为昇腾 AI 处理器提供 Python 原生算子编程接口的开源项目用户可通过pip install pyasc或源码编译安装后在仿真器Model或 NPU上板模式下编译运行自定义算子。本文以仓库根目录的 SECURITY.md 安全声明为主体结合 README.md、docs/quick_start.md、setup.py、python/asc/runtime/cache.py 等仓库文件系统讲解 pyasc 开发与运行过程中必须遵循的运行用户、文件权限、构建安全、运行安全四大类安全实践以及附录中各类文件夹权限管控的推荐最大值。读完本文你将能够在搭建 pyasc 开发环境、编译安装、算子调试与上板运行的各个环节建立一套可落地、可自查的权限最小化与安全防护方案。1. 安全声明的定位与适用范围pyasc 是一套编译器 运行时 Python 前端的完整算子开发工具链开发者用 Python 编写算子程序经编译器和运行时调度后运行在昇腾 AI 处理器上编程接口与 Ascend C 类库一一对应见 README.md。这意味着用户会在自己的主机或容器中完成源码下载、环境搭建、编译安装、算子编译运行、调试数据生成等多个步骤期间会涉及以 root 或普通用户身份执行大量命令安装包与缓存目录写入大量文件源码编译产生中间产物算子运行产生日志、dump 调试文件与临时数据。正是基于这些实际场景SECURITY.md 将安全要求划分为四类运行用户建议、文件权限控制、构建安全声明、运行安全声明并附上各场景文件权限的推荐最大值。下文将逐节展开并结合仓库源码说明这些要求在 pyasc 中的具体落点。2. 运行用户建议遵循权限最小化原则基于安全性角度考虑不建议使用 root 等管理员类型账户执行任何命令遵循权限最小化原则。这是整个安全声明的总原则。在 pyasc 的典型使用链路中执行命令至少包含以下环节安装阶段pip install pyasc快速安装或python3 -m pip install ./pip install -e .源码构建安装见 docs/quick_start.md环境配置阶段执行source /usr/local/Ascend/cann/set_env.sh配置 CANN 环境变量运行阶段执行python3 ./examples/01_add/add.py -r [RUN_MODE] -v [SOC_VERSION]运行算子样例调试阶段执行 UT 测试脚本 test/build_llt.sh 等。这些命令一旦以 root 身份执行任何权限疏漏都可能放大为系统级风险。建议遵循最小化原则使用专用的非管理员开发/运行账号执行安装与运行操作仅当安装 CANN 软件包等确需提升权限的场景才临时使用受限的提权方式完成。若使用容器如 CANN 官方 Docker 镜像同样应在容器内以非 root 用户运行算子。3. 文件权限控制umask 与敏感内容管控3.1 通过 umask 从源头收紧默认权限建议用户在主机包括宿主机及容器中设置运行系统 umask 值为 0027 及以上保障新增文件夹默认最高权限为 750新增文件默认最高权限为 640。umask 决定新建文件与目录的默认权限位权限基数目录 777、普通文件 666减去 umask 值即为默认权限。当 umask 设为0027时新增文件夹默认最高权限为777 - 027 750rwxr-x---属主可读/写/执行属组可读/执行其他用户无任何权限新增文件默认最高权限为666 - 027 640rw-r-----属主可读/写属组可读其他用户无任何权限。umask 0027 及以上指 umask 数值只能更严格如 0077不能更宽松。可在当前 shell 执行umask 0027临时生效或写入~/.bashrc、/etc/profile等全局配置实现持久化对于容器场景应在构建镜像或启动容器时一并配置使后续生成的所有文件含编译缓存、日志、临时目录默认就不对其他用户开放。这一要求与 pyasc 的运行机制高度相关pyasc 的 JIT 编译器会在运行时于用户主目录下创建缓存目录详见 3.4 节缓存中保存着编译后的算子二进制若默认权限过宽这些产物可能被同机其他用户读取。从源头收紧 umask即可避免逐个文件手工设置权限。3.2 敏感内容的权限管控建议用户对个人隐私数据、商业资产、源文件和算子开发过程中保存的各类文件等敏感内容做好权限控制等安全措施。例如涉及本项目安装目录权限管控、输入公共数据文件权限管控设定的权限建议参考附录 A 权限参考表。用户安装和使用过程需要做好权限控制建议参考附录 A 文件权限参考进行设置。pyasc 场景下的敏感内容可归纳为以下几类源文件与算子工程examples/下各算子样例源码、用户自研算子工程安装目录pip 安装后的ascPython 包含asc/language、asc/runtime、asc/_C/libpyasc等模块见 setup.py 中packages列表以及 CANN 安装目录输入公共数据与标杆数据运行样例时由脚本生成的输入 Tensor 与标杆计算结果见 examples/README.md调试与日志产物算子 dump 数据、日志文件、Debug 编译产物。这些内容应依据附录 A 的推荐最大值逐类设权避免一刀切式全放全开。3.3 附录 A文件夹各场景权限管控推荐最大值以下表格为 SECURITY.md 附录 A 的完整内容是文件权限控制的落地依据。权限值如750rwxr-x---表示八进制权限位及其符号表示。类型Linux 权限参考最大值用户主目录750rwxr-x---程序文件(含脚本文件、库文件等)550r-xr-x---程序文件目录550r-xr-x---配置文件640rw-r-----配置文件目录750rwxr-x---日志文件(记录完毕或者已经归档)440r--r-----日志文件(正在记录)640rw-r-----日志文件目录750rwxr-x---Debug 文件640rw-r-----Debug 文件目录750rwxr-x---临时文件目录750rwxr-x---维护升级文件目录770rwxrwx---业务数据文件640rw-r-----业务数据文件目录750rwxr-x---密钥组件、私钥、证书、密文文件目录700rwx------密钥组件、私钥、证书、加密密文600rw-------加解密接口、加解密脚本500r-x------将表格映射到 pyasc 的实际情况可以给出如下对应关系程序文件550安装后的asc包源码、.so库文件如asc/_C/libpyasc*.so、python/前端代码等仅需读取与执行权限配置文件640算子开发中的配置类文件、运行参数文件日志文件640/440运行期正在写入的日志按 640 管控归档日志进一步收紧为 440只读Debug 文件640开启调试后生成的 dump 产物与 Debug 中间文件临时文件目录750编译与 JIT 缓存产生的临时目录密钥类文件600/700若算子链路中涉及证书、密钥、密文如远程环境对接按最严格档位管控。3.4 pyasc 运行期生成文件与权限落点pyasc 在运行期会主动创建目录并写入文件从源码结构看主要落点如下缓存根目录默认位于用户主目录下的~/.pyasc。在 setup.py 中get_cache_dir()优先读取PYASC_HOME环境变量否则回退到HOME/USERPROFILE等用户主目录并拼接.pyascJIT 编译缓存python/asc/runtime/cache.py 中的CacheOptions定义缓存目录为$PYASC_HOME/.pyasc/cache可用PYASC_CACHE_DIR覆盖FileCacheManager会在该目录下按哈希键创建子目录存放编译产物编译产物内容python/asc/runtime/kernel_meta.py 中的CompiledKernel保存了算子编译后的binary字节码及其元信息这些二进制会被持久化到上述缓存目录cache.py 中的pyasc_key()通过对前端asc/codegen、asc/language与后端libpyasc扩展逐一计算哈希来标识缓存版本防止旧缓存被错误复用。值得关注的是缓存写入的实现细节FileCacheManager.put()先写入tmp.pid_pid_uuid临时子目录再通过os.replace()原子替换目标文件见 cache.py。从安全角度看这种临时目录 原子替换策略避免了其他进程或中断场景下读到半写文件的风险。但仍建议对这些目录执行权限检查确保其符合附录 A 中临时文件目录 750的推荐值避免编译产物被同机其他用户窃取或篡改。4. 构建安全声明源码编译的中间文件管控在源码编译安装本项目时需要您自行编译编译过程中会生成一些中间文件建议您在编译完成后对中间文件做好权限控制以保证文件安全。4.1 源码构建会生成哪些中间产物pyasc 支持两种安装方式见 docs/quick_start.md快速安装pip install pyasc直接使用二进制 wheel 包源码安装先下载并配置 LLVM 预编译包export LLVM_INSTALL_PREFIX...再执行python3 -m pip install .普通模式或python3 -m pip install -e .开发者模式。从 setup.py 的LocalBuildExt实现可以看到源码构建会调用cmake -G Ninja生成构建目录默认./build下的cmake.platform目录并编译libpyasc扩展以及可选工具ascir-lsp、ascir-opt、ascir-translate。这一过程会生成大量中间文件包括CMake 配置缓存与compile_commands.json编译数据库C 目标文件与链接产物最终 wheel 包构建产物build/lib.*、build/bdist.*等目录。这些中间文件通常包含完整的源码路径、编译参数甚至部分符号信息若权限管控不当会成为信息泄露的渠道。4.2 构建完成后的权限处置建议结合 SECURITY.md 的构建安全声明建议使用专用构建账号避免以 root 执行pip install .等构建命令构建前确认 umask 为 0027 及以上使新增中间文件默认权限即为 640/750 档位构建完成后对build/目录及缓存目录按附录 A 的临时文件目录 750 / 程序文件 550档位收紧权限若不再需要可清理中间产物仅保留安装后的最终软件包。4.3 构建链路的合规检查支撑从仓库的合规工具配置也能看到对构建产物的安全要求OAT.xml 声明了项目的开源合规策略默认许可证为CANN-2.0版权归Huawei Technologies Co., Ltd.并强制要求二进制文件类型策略scripts/oat_check.sh 是提交前的 OAT 合规扫描脚本会检查Invalid File Type非法文件类型与License Header Invalid许可证头缺失发现问题时阻断提交并输出报告。这意味着任何进入 pyasc 构建链路的源文件都需要具备合规的许可证与版权头这既是开源合规要求也是保障软件供应链安全的一道防线。5. 运行安全声明资源匹配与异常定位5.1 算子调用脚本与运行资源匹配建议用户结合运行环境资源状况编写对应算子调用脚本。若算子调用脚本与资源状况不匹配如生成输入数据或标杆计算结果使用空间超出内存容量限制、脚本在本地保存数据超过磁盘空间大小等情况可能会引发错误并导致进程意外退出。pyasc 的样例均采用 PyTorch 输入输出 Tensor见 examples/README.md运行前脚本会在主机侧生成输入数据与标杆golden结果。这类脚本的资源消耗必须与实际环境匹配内存容量生成超大 shape 的输入 Tensor 或标杆计算结果时占用空间不能超过内存容量限制否则会引发内存错误并导致进程意外退出磁盘空间若脚本将输入数据、dump 数据或日志保存在本地需确认磁盘剩余空间充足多核与切分规模算子涉及多核切分tiling与 AIC/AIV 流水如examples/10_fused_infer_attention数据规模应与核数与片上内存匹配。建议在编写或调大测试脚本前先通过npu-smi info确认设备状态与资源并对内存、磁盘占用进行预估。5.2 异常退出时的报错定位算子在运行异常时会退出进程并打印报错信息建议根据报错提示定位具体错误原因包括设定算子同步执行、查看日志文件等方式。pyasc 的运行时支持两种后端模式见 python/asc/runtime/config.pyModel仿真器无需 NPU 设备通过-r Model -v Ascend910B1等方式指定仿真环境默认平台为Ascend910B1NPU上板在真实昇腾硬件上运行set_platform()会校验传入的soc_version与实际硬件平台是否一致不一致时抛出ValueError见 config.py。当算子运行异常并打印报错信息时可按下述思路定位核对运行模式与 SoC 版本确认-r/-v参数与 examples/README.md 中的约定一致仿真器模式下还需正确配置LD_LIBRARY_PATH指向tools/simulator/平台/lib设定算子同步执行将异步执行改为同步使报错信息能完整、及时地打印查看日志文件结合运行日志与报错堆栈定位异常点开启调试能力从源码结构看KernelMeta中的enable_debug字段见 python/asc/runtime/kernel_meta.py与asc.language.basic中的dump_tensor、dump_acc_chk_point等调试 API 可用于深入排查完整的调试与调优方法论可参考 docs/op_debug_prof.md。5.3 运行环境变量与多版本 CANN 的配套安全运行安全还涉及环境变量的正确性见 docs/quick_start.md通过source /usr/local/Ascend/cann/set_env.sh使 CANN 环境变量生效仿真器模式需设置LD_LIBRARY_PATH指向对应平台的 simulator 库接入 torch 的算子还需LD_PRELOADlibruntime_camodel.so若环境中安装了多个版本的 CANN 软件包设置环境变量时务必确保路径指向配套版本的目录否则可能出现库版本错配导致的异常行为——这也是运行环境与资源状况匹配的一部分。6. 漏洞机制说明SECURITY.md 在漏洞机制说明一节指向了社区维护的漏洞管理文档。其核心机制可概括为pyasc 及其配套社区通过统一的安全漏洞管理渠道接收、跟踪并修复安全漏洞开发者若发现本仓库相关的安全问题应按社区安全流程进行上报避免在公开渠道直接披露漏洞细节以免在修复发布前被恶意利用。此外仓库根目录 README.md 的相关信息一节同样列出了安全声明入口与本文主题相互印证构建产物均遵循 LICENSE 中的 CANN Open Software License Agreement Version 2.0 条款用户在分发或使用衍生作品时也需遵守相应义务。7. 小结安全自查清单将 SECURITY.md 的四类要求整合为一份可直接对照的自查清单检查项要求依据运行账号不使用 root 等管理员账户执行命令遵循权限最小化SECURITY.md 运行用户建议umask主机与容器均设置 umask 0027 及以上新增目录 ≤ 750、新增文件 ≤ 640SECURITY.md 文件权限控制敏感内容安装目录、输入公共数据、源文件、算子开发文件按附录 A 设权SECURITY.md 附录 A 与 3.2 节缓存产物~/.pyasc缓存目录含编译二进制权限收紧python/asc/runtime/cache.py、setup.py构建中间文件编译完成后对 build 产物与中间文件做权限控制SECURITY.md 构建安全声明资源匹配算子调用脚本与内存、磁盘等资源状况匹配SECURITY.md 运行安全声明异常定位设定算子同步执行、查看日志、利用调试 API 定位报错SECURITY.md、docs/op_debug_prof.md环境变量多版本 CANN 场景下确保路径指向配套版本docs/quick_start.md安全不是一次性配置而是贯穿 pyasc 从安装、编译到运行全生命周期的基本功。建议将上述检查项固化到开发环境的初始化脚本与 CI 流程中配合 scripts/oat_check.sh 等合规检查工具形成默认收紧、按需放开、持续检查的安全闭环。【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表