news 2026/9/19 16:11:47

CANN shmem 安全加固指南:TLS 通信加密、运行权限控制与安全声明解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN shmem 安全加固指南:TLS 通信加密、运行权限控制与安全声明解析

CANN shmem 安全加固指南:TLS 通信加密、运行权限控制与安全声明解析

【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库,基于OpenSHMEM 标准协议,实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem

本指南面向在昇腾平台上部署与使用 CANN shmem(多机多卡内存通信库)的开发者与运维人员,系统梳理官方安全声明(SECURITY.md)中的全部安全加固要点:TCP Store 通信矩阵、基于 TLS 1.3 的加密配置接口、证书巡检环境变量、运行用户与文件权限管控、构建/运行安全声明及 ASLR 内存随机化建议。阅读完成后,你将能够为 shmem 集群配置端到端的安全通信链路,并按照最小权限原则搭建安全的运行环境。

安全加固总览:从通信到运行的全链路基线

安全声明给出的加固建议是基本加固项,并非放之四海而皆准的最终方案。文档明确要求:用户应根据自身业务重新审视整个系统的网络安全加固措施,并按照所在组织的安全策略进行配置,包括软件版本、口令复杂度要求、安全配置(协议、加密套件、密钥长度等)、权限配置与防火墙设置等,必要时可参考业界优秀加固方案和安全专家建议。

CANN shmem 的加固基线可以归纳为六个层面:

层面核心措施涉及章节
通信加密开启 TLS 1.3,配置证书与私钥通信矩阵 / TLS 配置接口
证书生命周期通过环境变量控制巡检周期与过期预警环境变量说明
运行账号禁止 root 直登,避免管理员账号运行 shmem运行用户建议
文件权限umask 0027+,敏感文件按附录分级管控文件权限控制
构建与运行中间文件权限、资源匹配、异常定位构建/运行安全声明
系统加固开启 ASLR 内存地址随机化内存地址随机化

通信矩阵:理解 TCP Store 的网络暴露面

在 shmem 的 bootstrap 阶段,多进程需要交换初始化信息(unique id、拓扑等)。从源码结构看,该通道由 config_store 组件实现,以 TCP 为传输协议,server 端负责侦听、client 端负责连接。官方通信矩阵如下:

组件tcp store
源设备tcp client
源IPdevice IP
源端口操作系统自动分配,分配范围由操作系统的自身配置决定
目的设备tcp server
目的IP设备地址IP
目的端口(侦听)用户指定,端口号 1025~65535
协议TCP
端口说明server 与 client TCP 协议消息接口
侦听端口是否可更改
认证方式数字证书认证
加密方式TLS 1.3
所属平面管理面
版本所有版本
特殊场景

要点解读:

  • 端口范围 1025~65535:侦听端口由用户显式指定且可更改,运维时应避开与现有业务冲突的端口,并配合防火墙仅放行可信网段的访问。
  • 认证 + 加密双保险:默认的认证方式为数字证书认证,加密方式为 TLS 1.3。若未开启 TLS,则仅依赖 TCP 明文传输,存在被窃听与伪造的风险,这正是下文 TLS 配置接口存在的意义。
  • 所属平面为管理面:TCP Store 属于管理面通道,与数据面 RDMA 通信隔离,加固策略应与管理面组件(如登录、配置下发)保持一致。

开启 TLS 1.3:使用 aclshmemx_set_conf_store_tls 配置证书

接口定义与实现原理

TLS 开关通过 host 侧接口aclshmemx_set_conf_store_tls控制,其声明位于 include/host/init/shmem_host_init.h#L266,同时提供了shmem_set_conf_store_tls别名宏:

ACLSHMEM_HOST_API int32_t aclshmemx_set_conf_store_tls(bool enable, const char* tls_info, const uint32_t tls_info_len);

其实现位于 src/host/init/shmem_init.cpp#L1325-L1332:接口本身仅将enabletls_info及其长度写入g_boot_handle全局引导句柄(tls_enable/tls_info/tls_info_len),真正的 TLS 装配发生在后续 bootstrap 初始化阶段。据 docs/principles/config_store_bootstrap.md 的说明,plugin_init会在调用init_config_store之前根据该句柄调用config_store_set_tls_infoconfig_store_bootstrap_set_tls_key写入StoreFactory;启用 TLS 后,listener 与 client 会按tlsOption.enableTls加载 OpenSSL 动态库并建立加密链路。因此,该接口必须在初始化(如shmem_init)之前调用

配置示例(C 语言)

官方给出的使用示例如下,分为关闭与开启两种场景:

// 配置关闭tls: aclshmemx_set_conf_store_tls(false, nullptr, 0); // 配置打开tls: char *tls_info =" \ tlsCaPath: /etc/ssl/certs/; \ tlsCert: /etc/ssl/certs/server.crt; \ tlsPk: /etc/ssl/private/server.key; \ tlsPkPwd: /etc/ssl/private/key_pwd.txt; \ tlsCrlPath: /etc/ssl/crl/; \ tlsCrlFile: server_crl1.pem,server_crl2.pem;\ tlsCaFile: ca.pem1,ca.pem2; \ packagePath: /etc/lib" int32_t ret = aclshmemx_set_conf_store_tls(true, tls_info, strlen(tls_info));

tls_info各字段的说明如下:

字段含义建议取值示例
tlsCaPathCA 证书存放目录/etc/ssl/certs/
tlsCert服务端证书文件路径/etc/ssl/certs/server.crt
tlsPk服务端私钥文件路径/etc/ssl/private/server.key
tlsPkPwd私钥密码文件路径/etc/ssl/private/key_pwd.txt
tlsCrlPath证书吊销列表(CRL)目录/etc/ssl/crl/
tlsCrlFileCRL 文件名(支持多个,逗号分隔)server_crl1.pem,server_crl2.pem
tlsCaFileCA 文件(支持多个,逗号分隔)ca.pem1,ca.pem2
packagePath加密/解密组件(如 OpenSSL 动态库)所在路径/etc/lib

使用注意事项(官方原文要求):

  1. 建议用户开启 TLS 加密配置,保证通信安全;
  2. 系统启动后,建议删除本地密钥证书等敏感信息文件,防止密钥泄露;
  3. 调用该接口时,传入的文件路径不能包含英文分号、逗号、冒号(这些字符被用作字段与列表分隔符)。

私钥回调:aclshmemx_set_config_store_tls_key

若希望以编程方式提供私钥而非文件路径,可使用配套接口aclshmemx_set_config_store_tls_key(声明见 include/host/init/shmem_host_init.h#L245,实现见 src/host/init/shmem_init.cpp#L1340-L1351):

int32_t aclshmemx_set_config_store_tls_key( const char* tls_pk, const uint32_t tls_pk_len, const char* tls_pk_pw, const uint32_t tls_pk_pw_len, const aclshmem_decrypt_handler decrypt_handler);
  • tls_pk/tls_pk_len:TLS 私钥内容及其长度;
  • tls_pk_pw/tls_pk_pw_len:私钥密码内容及其长度;
  • decrypt_handler:解密回调函数指针,用于对私钥等敏感内容执行自定义解密。

该接口同样通过g_boot_handle缓存(tls_pk/tls_pk_len/tls_pk_pw/tls_pk_pw_len/decrypt_handler),供 bootstrap 初始化阶段消费。

Python 侧等价接口

Python 扩展(docs/api/pythonAPI.md)同样暴露了这两个接口:

  • set_conf_store_tls(enable, tls_info) -> int:设置是否开启 TLS 加密并指定 TLS 配置信息,tls_info可为空字符串;
  • set_conf_store_tls_key(tls_pk, tls_pk_pw, py_decrypt_func: Callable[[str], str]) -> int:设置 TLS 私钥与密码,并注册解密回调函数。

具体用法可参考仓库中的 Python 测试用例 examples/python_extension/test/tls_test.py。

证书生命周期管理:巡检周期与过期预警环境变量

TLS 依赖的证书会过期,若在集群运行期间证书失效将导致握手失败。shmem 提供了两个环境变量用于证书的周期性巡检与提前预警,其解析逻辑位于 src/host/bootstrap/config_store/acc_links/csrc/security/acc_tcp_ssl_helper.cpp#L562-L572:

环境变量作用
ACCLINK_CHECK_PERIOD_HOURS配置证书检查周期(小时),超出安全范围时回退默认值并打印告警
ACCLINK_CERT_CHECK_AHEAD_DAYS配置证书过期预警时间(天),即提前多少天对即将过期的证书发出告警

源码中通过AccCommonUtil::GetEnvValue2Uint32读取变量值,并对超出安全范围的取值回退到默认常量(CHECK_PERIOD_HOURSCERT_CHECK_AHEAD_DAYS)且打印告警日志。建议在启动脚本中为所有 rank 统一设置这两个变量,并纳入证书轮换的运维流程。

与安全相关的其他环境变量

安全声明同时列出了 shmem 常规运维所需的关键环境变量:

环境变量说明
SHMEM_LOG_LEVELshmem 日志级别(对应源码中DEBUG/INFO/WARN/ERROR/FATAL五档,见 src/host/init/shmem_init.cpp#L1303-L1323)
SHMEM_HOME_PATHshmem 安装路径
VERSION编译 whl 包默认版本号
ASCEND_RT_VISIBLE_DEVICES指定哪些 Device 对当前进程可见,支持一次指定一个或多个 Device ID;通过该环境变量可实现不修改应用程序即可调整所用 Device
SHMEM_CYCLE_PROF_PE设置需要进行 Profiling 采集的 PE,pe_id设置范围 [0,PEs-1];需要取消采集请unset SHMEM_CYCLE_PROF_PE

其中SHMEM_LOG_LEVEL与排查安全告警(如 TLS 握手失败、证书过期)直接相关,出现异常时建议先调至DEBUG复现定位;ASCEND_RT_VISIBLE_DEVICES可用于在共享环境中隔离进程可见的硬件资源,降低误操作风险。

运行用户建议:最小权限运行 shmem

root 是 Linux 系统中的超级特权用户,具有所有 Linux 系统资源的访问权限。允许直接使用 root 账号登录系统会带来大量潜在安全风险。官方建议:

  1. /etc/ssh/sshd_config中将PermitRootLogin参数设置为no,使 root 无法通过 SSH 登录,增强系统安全性;
  2. 如需使用 root 权限进行管理操作,应通过普通用户登录后使用susudo切换到 root,避免直接以 root 身份登录;
  3. 出于安全性及权限最小化角度考虑,不建议使用 root 等管理员类型账户运行 shmem

文件权限控制:umask 0027 与分级管控

系统级 umask 基线

建议在主机(包括宿主机)及容器中设置运行系统umask值为0027 及以上,以保障:

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

敏感文件管控

建议对个人隐私数据、商业资产、源文件和算子开发过程中保存的各类文件等敏感内容做好权限控制,涉及安装目录权限管控、输入公共数据文件权限管控时,参照附录 A「文件(夹)各场景权限管控推荐最大值」执行(见下文附录)。

构建与运行安全声明

构建安全

源码编译安装 shmem 时,编译过程会产生中间文件,建议编译完成后对中间文件做好权限控制,避免中间产物(可能包含路径、符号、临时数据)被未授权访问。构建入口与脚本可参考 scripts/install.sh 与 docs/compilation_build_guide.md。

运行安全

  • 资源匹配:应结合运行环境资源状况编写算子调用脚本。若脚本与资源状况不匹配——例如生成输入数据或标杆计算结果使用空间超出内存容量限制、脚本在本地保存数据超过磁盘空间大小——可能引发错误并导致进程意外退出;
  • 异常定位:算子在运行异常时会退出进程并打印报错信息,建议根据报错提示定位具体错误原因,包括设定算子同步执行、查看日志文件等方式;
  • 框架版本匹配:通过 PyTorch 方式调用 shmem 时,可能因版本不匹配导致运行错误,应参照 PyTorch 官方安全声明核对版本兼容性。

内存地址随机化机制安全加固

ASLR(Address Space Layout Randomization)开启后能增强漏洞攻击防护能力。官方建议将/proc/sys/kernel/randomize_va_space的值设置为2以开启该功能:

# 查看当前配置 cat /proc/sys/kernel/randomize_va_space # 运行时开启(重启失效,需 root) echo 2 > /proc/sys/kernel/randomize_va_space

如需持久化,可将配置写入系统 sysctl 配置(如/etc/sysctl.conf),并在集群所有节点上保持一致。

公网地址声明

本项目代码中涉及的公开资源地址声明如下(用途均为编译依赖或文档引用,无运行时外联):

类型开源代码地址文件名公网IP地址/公网URL地址/域名/邮箱地址/压缩文件地址用途说明
依赖不涉及build.shgitcode.com/cann/catlass.git从 gitcode 下载 catlass 源码,编译依赖
依赖gitcode.com/gh_mirrors/do/doxygenbuild.shgitcode.com/gh_mirrors/do/doxygen/releases/download/Release_1_9_6/doxygen-1.9.6.src.tar.gz从 gitcode 下载 doxygen-1.9.6 源码,编译依赖
依赖不涉及build.shgitcode.com/GitHub_Trending/go/googletest从 gitcode 下载 googletest 源码,单元测试框架依赖
依赖不涉及build.shgitcode.com/GitHub_Trending/js/json.git从 gitcode 下载 nlohmann json 源码,SOC_TYPE 为 Ascend950 时编译依赖
文档不涉及shmemi_device_barrier.hinf.ed.ac.uk 的 Barrier 论文地址并行编程语言和系统

这些依赖仅存在于编译构建阶段,运行时可自行根据安全策略审计依赖清单。

漏洞机制说明

如发现安全漏洞,应通过官方社区的安全漏洞管理流程上报,具体口径以社区 security 文档为准。上报时建议附带受影响版本(见仓库根目录 VERSION 与 version.info)、复现步骤与影响评估,便于快速处置。

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

以下权限矩阵是 shmem 安全声明给出的通用参考,安装、运行、维护各环节建议按此分级设权:

类型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------)

实践建议:TLS 相关的私钥与证书属于最高敏感级别(目录 700、文件 600),务必与普通业务数据隔离存放;日志与 Debug 文件在归档后应收紧为只读(440),防止被篡改用于掩盖攻击痕迹。

安全加固清单速查

将以上内容收敛为一份可落地的检查清单:

  • 所有 rank 进程在shmem_init前调用aclshmemx_set_conf_store_tls(true, tls_info, len)开启 TLS 1.3,并校验返回值ret == 0
  • tls_info中各文件路径不含英文分号、逗号、冒号,证书与私钥文件权限按附录设为 600、目录 700;
  • 集群启动完成后删除本地的密钥证书等敏感文件;
  • 设置ACCLINK_CHECK_PERIOD_HOURSACCLINK_CERT_CHECK_AHEAD_DAYS并纳入证书轮换流程;
  • 禁止 root 直接登录与运行 shmem,使用普通用户 + sudo 提权;
  • 主机与容器统一设置 umask 0027,敏感目录/文件按附录 A 设权;
  • /proc/sys/kernel/randomize_va_space为 2,ASLR 已开启;
  • 运行脚本与内存、磁盘资源匹配,异常时结合SHMEM_LOG_LEVEL=DEBUG与同步执行方式定位;
  • 编译完成后对中间文件做权限控制。

【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库,基于OpenSHMEM 标准协议,实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem

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

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

从Kubernetes回到Docker Compose:一个小团队的容器编排选型反思

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

作者头像 李华
网站建设 2026/9/19 16:08:58

如何用Python+WeasyPrint自动生成网络安全评估报告PDF完整版

简介:PDF因其版式固定、跨平台一致、可离线查阅等特性,成为网络信息安全评估报告的标准交付格式。然而,完整版报告包含资产清单、威胁库、脆弱性分析、风险矩阵等结构化信息,手工排版耗时且易错。利用HTMLCSS定义版式,…

作者头像 李华
网站建设 2026/9/19 16:07:16

LLVM Project深度解析:模块化编译器基础设施实战指南

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

作者头像 李华
网站建设 2026/9/19 16:04:42

STM32 FreeRTOS实战:多任务调度与队列通信优化

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

作者头像 李华
网站建设 2026/9/19 16:04:12

洗浴中心管理系统开发:手牌计费与日结账务设计要点

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

作者头像 李华