14 KiB
安全声明
依赖三方软件安全
- 推荐用户通过openMind Library自动安装依赖三方软件(指定版本或默认最新版本),如因用户使用旧版本依赖三方软件引入安全漏洞产生影响,openMind Library不承担相关责任。
- 参考PyTorch
torch.load()
API文档,openMind Library在使用PyTorch框架torch.load()
方法时,除非参数weights_only
设置为True
,否则PyTorch框架将隐式使用pickle模块进行反序列化加载,这是已知不安全的。攻击者可构造恶意pickle数据,进而通过反序列化过程实现任意代码执行。请用户关注,切勿在非安全模式下加载非信任来源或可能被篡改的数据,仅加载您信任的数据。 - 三方库
torch
在< 2.2.0
版本中存在CVE-2024-31584
漏洞,该漏洞在torch/csrc/jit/mobile/flatbuffer_loader.cpp
组件中存在越界读取问题,openMind Library不涉及该场景。 - 三方库
torch
在< 2.2.0
版本中存在CVE-2024-31583
漏洞,该漏洞在torch/csrc/jit/mobile/interpreter.cpp
组件中存在use-after-free问题(内存释放后程序继续使用该内存),openMind Library不涉及该场景。
运行用户建议
出于安全性及权限最小化角度考虑,不建议使用root等管理员类型账号使用。
安全隐私声明
访问令牌使用声明
当用户使用openMind Library访问hub非公开模型资源时,需要在openMind Library接口参数中传入用户的访问令牌,该数据属于用户个人数据,请用户在使用时关注以下内容:
- 使用个人数据时请遵从当地适用的法律法规;
- 个人数据的使用目的:访问hub非公开模型资源时,用于用户身份认证。接口接收访问令牌后,该令牌仅透传给openmind_hub组件,不涉及网络传输,不涉及存储;
- 个人数据的使用范围:openMind Library接口参数,如
AutoConfig.from_pretrained(token=***)
方法,具体接口/参数详细信息请参考API文档; - 个人数据的使用方式:用户调用openMind Library接口时通过参数传入,用户应做好个人数据保护,避免因肩窥python历史命令记录等途径被恶意获取利用;
- 个人数据的使用时限:与被调用接口进程的运行时间保持一致,接口调用期间保存在内存中,进程结束后从内存中销毁;
- 个人数据的销毁方式:操作系统内存回收;
- 推荐用户定期更新访问令牌;
空间名称使用声明
当用户使用openMind Library访问hub模型资源时,需要在openMind Library接口参数中传入期望访问的模型空间名称,该名称通常由"组织名/模型仓库名"构成,该数据属于用户个人数据,请用户在使用时关注以下内容:
- 使用个人数据时请遵从当地适用的法律法规;
- 个人数据的使用目的:明确期望访问的hub模型资源。接口接收空间名称后,该名称仅透传给openmind_hub组件,不涉及网络传输,不涉及存储;
- 个人数据的使用范围:openMind Library接口参数,如
AutoConfig.from_pretrained(pretrained_model_name_or_path=***)
方法,具体接口/参数详细信息请参考API文档; - 个人数据的使用方式:用户调用openMind Library接口时通过参数传入,用户应做好个人数据保护,避免因肩窥python历史记录等途径被恶意获取利用;
- 个人数据的使用时限:与被调用接口进程的运行时间保持一致,接口调用期间保存在内存中,进程结束后从内存中销毁;
- 个人数据的销毁方式:操作系统内存回收;
文件权限控制
-
建议用户在主机(包括宿主机)及容器中设置运行系统umask值为0027及以上,保障新增文件夹默认最高权限为750,新增文件默认最高权限为640。
-
建议用户对个人数据、商业资产、源文件、训练过程中保存的各类文件、openMind Library安装目录、多用户使用共享数据集等敏感内容做好权限管控,管控权限可参考表1进行设置。
表1 文件(夹)各场景权限管控推荐最大值
类型 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------)
构建安全声明
openMind Library在源码构建安装过程中,会产生临时目录和程序文件。用户可根据需要,对源代码目录中的文件及文件夹进行权限管控,降低安全风险。
运行安全声明
- 建议用户结合运行环境资源状况编写对应训练脚本。若训练脚本与资源状况不匹配,如数据集加载内存大小超出内存容量限制、训练脚本在本地生成数据超过磁盘空间大小等情况,可能引发错误并导致进程意外退出。
- openMind Library在运行异常时会退出进程并打印报错信息,属于正常现象,为降低用户敏感信息泄露风险,将不会打印错误栈。
- openMind Library通过monkey-patching技术,对huggingface_hub的
download_url
函数进行覆盖。出于安全性考虑,openMind Library对该函数缓存临时文件路径进行限制(~/.cache/openmind/tmp_files_from_url),并在缓存时通过日志对缓存临时路径及对应url进行提示。因该方法不会自动删除已经缓存的数据,请用户关注及时清理,避免因缓存大量数据导致磁盘过度占用。 - 使用openMind Library时,存在从openMind Library社区hub加载模型文件的场景,需要用户在openMind Library接口传入
trust_remote_code=True
参数。请在使用该参数时,确认使用openMind Library社区hub模型文件的安全性,推荐指定模型文件版本,避免hub模型文件变化带来影响。
公网地址声明
代码涉及公网地址参考 public_address_statement.md
公开接口声明
openMind Library在各级package的__init__.py
文件中,通过懒加载、__all__
约束公开接口范围,公开接口涉及模块包括Auto Classes、Pipeline、Trainer、PreTrainer、Utils, 具体接口规格可通过链接访问对应API文档查询。其他接口默认不作为公开接口,属于内部接口,可能因业务需要出现变更,不建议用户直接使用。
通信安全加固
openMind Library在分布式训练场景需要在设备间进行通信,出于安全考虑,建议用户针对此场景进行安全加固,具体方法可参考通信安全加固。
通信矩阵
openMind Library涉及通信矩阵如下:
场景 | SwanLab离线实验跟踪 | openmind-cli deploy场景 |
---|---|---|
源设备 | 运行swanlab进程的服务器 | 运行openmind-cli deploy进程的服务器 |
源IP | 设备地址IP | 设备地址IP |
源端口 | 操作系统自动分配,分配范围由操作系统的自身配置决定 | 操作系统自动分配,分配范围由操作系统的自身配置决定 |
目的设备 | 运行swanlab进程的服务器 | 运行openmind-cli deploy进程的服务器 |
目的IP | 设备地址IP | 设备地址IP |
目的端口 (侦听) | 默认值5092,用户可以设定端口号 | 默认值1025,用户可以设定端口号 |
协议 | TCP | TCP |
端口说明 | 在SwanLab离线实验跟踪场景中,目的端口(默认5092)用于接收和发送数据,源端口用于接收和发送数据 | 在openmind-cli deploy场景中,目的端口(默认1025)用于接收和发送数据,源端口用于接收和发送数据 |
侦听端口是否可更改 | 是 | 是 |
认证方式 | 无认证方式 | 无认证方式 |
加密方式 | 无 | 无 |
所属平面 | 不涉及 | 不涉及 |
版本 | 所有版本 | 所有版本 |
特殊场景 | 无 | 无 |
备注 | 该通信过程由开源软件SwanLab控制,配置为SwanLab原生设置,可参考SwanLab文档。源端口由操作系统自动分配,分配范围由操作系统的配置决定。 | 在使用LMDploy作为后端时,该通信过程由开源软件LMDeploy控制,配置为LMDeploy原生设置,可参考LMDeploy文档。在使用MindIE作为作为后端时,该通信过程由MindIE控制,可参考MindIE文档。源端口由操作系统自动分配,分配范围由操作系统的配置决定。 |
除上述场景外,openMind Library不涉及端口开放、侦听等相关行为,PyTorch模型分布式训练涉及的相关端口行为由用户在模型脚本调用原生接口,配置为PyTorch原生设置,可参考PyTorch文档,具体通信矩阵可参考torch_npu文档,Mindspore模型分布式训练涉及的相关端口行为由用户在模型脚本调用原生接口,配置为Mindspore原生设置,可参考Mindspore文档,具体通信矩阵可参考mindformers文档。建议用户注意做好安全防护,分布式训练的情况下请勿绑定全局端口,推荐进行通信安全加固。此外,openMind Library内部会使用到openMind Hub组件,可查询其通信矩阵。
内置环境变量声明
openMind Library内置环境变量如下:
环境变量名称 | 环境变量描述 | 默认值 |
---|---|---|
ACCELERATE_USE_MEGATRON_LM | PreTrainer是否使用Megatron-LM加速库 | False |
LOCAL_RANK | 运行进程的设备卡号,不需要人工设置 | -1 |
OPENMIND_OFFLINE | 是否使用离线模式 | "0" |
OM_ENDPOINT | openMind Library社区官网地址 | "https://modelers.cn" |
OM_MODULES_CACHE | openMind Library缓存module的缓存路径 | "~/.cache/openmind/modules" |
OPENMIND_CACHE | openMind Library缓存hub数据的缓存路径 | "~/.cache/openmind/hub" |
PYTORCH_OPENMIND_CACHE | openMind Library缓存pytorch模型的缓存路径 | "~/.cache/openmind/hub" |
PYTORCH_PRETRAINED_BERT_CACHE | openMind Library缓存pytorch BERT模型的缓存路径 | "~/.cache/openmind/hub" |
JIT_COMPILE | openmind-cli chat 在昇腾NPU运行时是否开启即时编译,设置为"1"、"true"表示即时编译,设置为其他值表示非及时编译 | "0" |
FORCE_CHECK_IMPORTS | openmind-cli chat 是否强制校验模型依赖的三方库是否存在,设置为"1"、"true"表示强制校验,设置为其他值表示非强制校验 | "0" |
OPENMIND_MAX_CONCURRENT | openmind-cli chat 对话过程开启异步线程池的信号量大小 | "1" |