背景
为了提升内部各组件安全防护水平,防止恶意攻击。沙箱权限会进一步消减。去除权限后,account组件需要安全代理提供压缩、解压缩用户目录的功能;
关联ISSUE
[缺陷]: 保留用户数据恢复出场设置,用户数据恢复失败 - openUBMC/account - AtomGit | GitCode
整体方案
capability_proxy提供压缩、解压缩方法,结合配置的白名单,供沙箱内低权限进程代理使用。
使用案例:
- 在BMC配置备份与恢复时:account在调用压缩代理方法,压缩用户目录(/data/trust/home);account调用解压缩方法,从(/data/trust/opt/bmc/home.tar.gz)压缩文件解压缩用户目录
评审点
interface:bmc.kepler.Managers.Security.File下新增方法Tar,用于压缩、解压缩文件。
详细描述
评审点1:新增安全代理方法:Tar方法,执行tar命令
资源path:/bmc/kepler/Managers/:Id/Security/File
资源interface:bmc.kepler.Managers.Security.File
变化类型:新增方法
应用场景:压缩、解压缩用户目录。
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| Tar | 新增方法 | BasicSetting | ssssas | Mode(s): 压缩、解压缩 Options(s):压缩、解压缩参数 Archive(s):压缩文件路径 WorkDir(s):压缩时代表工作目录,解压缩时代表文件输出目录 Files(as):操作文件或者目录 |
NA | NA | 1. Mode为字符串,支持如下取值: ①Compress:压缩 ②Decompress:解压缩 不在取值范围内报错PropertyValueNotInList 2. Options参数支持如下取值: ①z:使用gzip格式 ②j:使用bzip2格式 不在取值范围内报错PropertyValueNotInList 3.不传Files时代表直接操作工作目录或者压缩文件输出路径 4.当前Files仅支持传入文件路径不超过1个 |
使用示例:
Tar("Compress", "z", "/data/trust/opt/bmc/home.tar.gz", "/data/trust",["home"])
实际执行命令:
tar -czf /data/trust/opt/bmc/home.tar.gz -C /data/trust home
备注:
(1)白名单机制:当前该函数支持如下白名单的操作,可以按需扩展,不在白名单内报错PropertyValueNotInList
白名单取值范围如下:
-
压缩场景下(Mode取值为Compress时):
Archive取值范围:[“/data/trust/opt/bmc/”, “”]WorkDir取值范围:[“/data/trust”]
Files取值范围:[“home”] -
解压场景下(Mode取值为Decompress时):
Archive取值范围:[“/data/trust/opt/bmc/”, “/dev/shm/upgrade”]
WorkDir取值范围:[“/dev/shm”, “/dev/shm/upgrade”]
Files取值范围:[ ]
(2)解压文件限制:解压缩文件大小限制为20M以内,总数量限制在100个以内,超过范围时报错:PropertyValueNotInAllowedRange
评审结论
同意资源协作接口bmc.kepler.Managers.Security.File新增Tar方法,具体如下
资源path:/bmc/kepler/Managers/:Id/Security/File
资源interface:bmc.kepler.Managers.Security.File
变化类型:新增方法
应用场景:压缩、解压缩用户目录。
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| Tar | 新增方法 | BasicSetting | ssssas | Mode(s): 压缩、解压缩 Options(s):压缩、解压缩参数 Archive(s):压缩文件路径 WorkDir(s):压缩时代表工作目录,解压缩时代表文件输出目录 Files(as):操作文件或者目录 |
NA | NA | 1. Mode支持取值: ①Compress:压缩 ②Decompress:解压缩 不在取值范围内报错PropertyValueNotInList 2. Options参数支持如下取值: ①z:使用gzip格式 ②j:使用bzip2格式 不在取值范围内报错PropertyValueNotInList 3.不传Files时代表直接操作工作目录或者压缩文件输出路径 4.当前Files仅支持传入文件路径不超过1个 |
遗留问题
1、补充解压规格限制,从白名单读取
结论:
1)压缩场景下(Mode取值为Compress时):
Archive取值范围:[“/data/trust/opt/bmc/”, “”]
WorkDir取值范围:[“/data/trust”]
Files取值范围:[“home”]
2)解压场景下(Mode取值为Decompress时):
Archive取值范围:[“/data/trust/opt/bmc/”, “/dev/shm/upgrade”]
WorkDir取值范围:[“/dev/shm”, “/dev/shm/upgrade”]