
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接口本身仅将enable、tls_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_info、config_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.crttlsPk服务端私钥文件路径/etc/ssl/private/server.keytlsPkPwd私钥密码文件路径/etc/ssl/private/key_pwd.txttlsCrlPath证书吊销列表CRL目录/etc/ssl/crl/tlsCrlFileCRL 文件名支持多个逗号分隔server_crl1.pem,server_crl2.pemtlsCaFileCA 文件支持多个逗号分隔ca.pem1,ca.pem2packagePath加密/解密组件如 OpenSSL 动态库所在路径/etc/lib使用注意事项官方原文要求建议用户开启 TLS 加密配置保证通信安全系统启动后建议删除本地密钥证书等敏感信息文件防止密钥泄露调用该接口时传入的文件路径不能包含英文分号、逗号、冒号这些字符被用作字段与列表分隔符。私钥回调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-L1351int32_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_lenTLS 私钥内容及其长度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_HOURS、CERT_CHECK_AHEAD_DAYS且打印告警日志。建议在启动脚本中为所有 rank 统一设置这两个变量并纳入证书轮换的运维流程。与安全相关的其他环境变量安全声明同时列出了 shmem 常规运维所需的关键环境变量环境变量说明SHMEM_LOG_LEVELshmem 日志级别对应源码中DEBUG/INFO/WARN/ERROR/FATAL五档见 src/host/init/shmem_init.cpp#L1303-L1323SHMEM_HOME_PATHshmem 安装路径VERSION编译 whl 包默认版本号ASCEND_RT_VISIBLE_DEVICES指定哪些 Device 对当前进程可见支持一次指定一个或多个 Device ID通过该环境变量可实现不修改应用程序即可调整所用 DeviceSHMEM_CYCLE_PROF_PE设置需要进行 Profiling 采集的 PEpe_id设置范围 [0PEs-1]需要取消采集请unset SHMEM_CYCLE_PROF_PE其中SHMEM_LOG_LEVEL与排查安全告警如 TLS 握手失败、证书过期直接相关出现异常时建议先调至DEBUG复现定位ASCEND_RT_VISIBLE_DEVICES可用于在共享环境中隔离进程可见的硬件资源降低误操作风险。运行用户建议最小权限运行 shmemroot 是 Linux 系统中的超级特权用户具有所有 Linux 系统资源的访问权限。允许直接使用 root 账号登录系统会带来大量潜在安全风险。官方建议在/etc/ssh/sshd_config中将PermitRootLogin参数设置为no使 root 无法通过 SSH 登录增强系统安全性如需使用 root 权限进行管理操作应通过普通用户登录后使用su或sudo切换到 root避免直接以 root 身份登录出于安全性及权限最小化角度考虑不建议使用 root 等管理员类型账户运行 shmem。文件权限控制umask 0027 与分级管控系统级 umask 基线建议在主机包括宿主机及容器中设置运行系统umask值为0027 及以上以保障新增文件夹默认最高权限为750rwxr-x---新增文件默认最高权限为640rw-r-----。敏感文件管控建议对个人隐私数据、商业资产、源文件和算子开发过程中保存的各类文件等敏感内容做好权限控制涉及安装目录权限管控、输入公共数据文件权限管控时参照附录 A「文件夹各场景权限管控推荐最大值」执行见下文附录。构建与运行安全声明构建安全源码编译安装 shmem 时编译过程会产生中间文件建议编译完成后对中间文件做好权限控制避免中间产物可能包含路径、符号、临时数据被未授权访问。构建入口与脚本可参考 scripts/install.sh 与 docs/compilation_build_guide.md。运行安全资源匹配应结合运行环境资源状况编写算子调用脚本。若脚本与资源状况不匹配——例如生成输入数据或标杆计算结果使用空间超出内存容量限制、脚本在本地保存数据超过磁盘空间大小——可能引发错误并导致进程意外退出异常定位算子在运行异常时会退出进程并打印报错信息建议根据报错提示定位具体错误原因包括设定算子同步执行、查看日志文件等方式框架版本匹配通过 PyTorch 方式调用 shmem 时可能因版本不匹配导致运行错误应参照 PyTorch 官方安全声明核对版本兼容性。内存地址随机化机制安全加固ASLRAddress 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 权限参考最大值用户主目录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------实践建议TLS 相关的私钥与证书属于最高敏感级别目录 700、文件 600务必与普通业务数据隔离存放日志与 Debug 文件在归档后应收紧为只读440防止被篡改用于掩盖攻击痕迹。安全加固清单速查将以上内容收敛为一份可落地的检查清单所有 rank 进程在shmem_init前调用aclshmemx_set_conf_store_tls(true, tls_info, len)开启 TLS 1.3并校验返回值ret 0tls_info中各文件路径不含英文分号、逗号、冒号证书与私钥文件权限按附录设为 600、目录 700集群启动完成后删除本地的密钥证书等敏感文件设置ACCLINK_CHECK_PERIOD_HOURS与ACCLINK_CERT_CHECK_AHEAD_DAYS并纳入证书轮换流程禁止 root 直接登录与运行 shmem使用普通用户 sudo 提权主机与容器统一设置 umask 0027敏感目录/文件按附录 A 设权/proc/sys/kernel/randomize_va_space为 2ASLR 已开启运行脚本与内存、磁盘资源匹配异常时结合SHMEM_LOG_LEVELDEBUG与同步执行方式定位编译完成后对中间文件做权限控制。【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考