背景
为了提升内部各组件安全防护水平,防止恶意攻击。沙箱权限会进一步消减。去除权限后,web_backend组件需要安全代理提供判断文件是否存在的功能,用来判断是否支持java kvm功能;usb_entry组件需要安全代理提供拉起网口的功能,来保障近端网口的功能正常。
关联ISSUE
整体方案
web_backend组件使用安全代理提供的接口判断文件是否存在,用来判断是否支持java kvm功能;usb_entry需要安全代理提供启用网口的功能,来保障近端网口的功能正常。
评审点
①interface:bmc.kepler.Managers.Security.File下新增方法Access,用于检查当前进程对文件或目录的访问权限。
②资源path:/bmc/kepler/Managers/:Id/EthernetInterfaces下新增interface。并该interface下新增AddIpAddress方法,用于提供地址管理命令;新增SetLink方法,用于管理和修改网络接口的属性,比如启用网口。
详细描述
评审点1:新增安全代理方法:Access,用于检查当前进程对文件或目录的访问权限。
资源path:/bmc/kepler/Managers/:Id/Security/File
资源interface:bmc.kepler.Managers.Security.File
变化类型:新增方法
应用场景:用于检查当前进程对文件或目录的访问权限。(推荐方案一)
1. 方案一
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| Access | 新增方法 | BasicSetting | sy | Path(s):文件路径 Mode(y):待检查权限,见备注。 |
b | Result:是否具有待检查的权限 | ① 该代理方法用于检查当前进程对文件或目录的访问权限。 ② Mode的取值范围为[0, 7],取值按bit位定义,含义如下。 bit0为0:判断文件是否存在 bit0为1:判断文件是否具有可执行权限 bit1为1:判断文件是否可写 bit2为1:判断文件是否可读 |
PS:比如mode的取值为6,6是0110,其中bit1和bit2为均1,则判断当前进程对文件是否可读写。
2. 方案二
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| Access | 新增方法 | BasicSetting | sas | Path(s):文件路径 Mode(as):待检查权限,见备注。 |
b | Result:是否具有待检查的权限 | ① 该代理方法用于检查当前进程对文件或目录的访问权限。 ② Mode是字符串数组,数组中元素为枚举值[“F_OK”, “X_OK”, “W_OK”, “R_OK”],待检查权限为数组中元素的组合,含义如下。 F_OK:判断文件是否存在 X_OK:判断文件是否具有可执行权限 W_OK:判断文件是否可写 R_OK:判断文件是否可读 |
PS:比如mode的取值为[“R_OK”, “W_OK”],即判断当前进程对文件是否可读写。
3. 方案三
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| Access | 新增方法 | BasicSetting | say | Path(s):文件路径 Mode(ay):待检查权限,见备注。 |
b | Result:是否具有待检查的权限 | ① 该代理方法用于检查当前进程对文件或目录的访问权限。 ② Mode是字符串数组,数组中元素为枚举值[0, 1, 2, 4],待检查权限为数组中元素的组合,含义如下。 0:判断文件是否存在 1:判断文件是否具有可执行权限 2:判断文件是否可写 4:判断文件是否可读 |
PS:比如mode的取值为[2, 4],即判断当前进程对文件是否可读写。
评审点2:在path:/bmc/kepler/Managers/:Id/EthernetInterfaces下新增interface:bmc.kepler.Managers.EthernetInterfaces.IPCommands;该interface下新增AddIpAddress方法,用于为一个网络接口添加IP地址;新增SetLink方法,管理和修改网络接口的属性,比如拉起网口
path:/bmc/kepler/Managers/:Id/EthernetInterfaces
新增interface:当前有两个方案可选择(推荐方案一)
方案一:bmc.kepler.Managers.EthernetInterfaces.IpCommandWrapper
方案二:bmc.kepler.Managers.EthernetInterfaces.IPCommands
新增method:AddIpAddress
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| AddIpAddress | 新增方法 | SecurityMgmt | sss | IfName(s):网口名称 Version(s):IP版本,取值为[“IPv4”, “IPv6”, “IPv4AndIPv6”] IfAddr(s):IP地址 |
NA | NA | 为一个网络接口添加IP地址 |
新增method:DeleteIpAddress
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| DeleteIpAddress | 新增方法 | SecurityMgmt | sss | IfName(s):网口名称 Version(s):IP版本,取值为[“IPv4”, “IPv6”, “IPv4AndIPv6”] IfAddr(s):IP地址 |
NA | NA | 从网络接口删除一个IP地址 |
新增method:SetLink
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| SetLink | 新增方法 | SecurityMgmt | sa{ss} | IfName(s):网口名称 Params(a{ss}):取值见下方说明 |
NA | NA | 管理和修改网络接口的(链路层)属性,比如启用网口。 |
Params的说明
| 名称 | 签名 | 描述 |
|---|---|---|
| OPTION | s | 要调用的操作,当前的枚举值为[“up”,“down”] |
评审结论
一:评审点1:使用方案一,同意资源协作接口bmc.kepler.Managers.Security.File新增Access方法,具体如下:
资源path:/bmc/kepler/Managers/:Id/Security/File
资源interface:bmc.kepler.Managers.Security.File
变化类型:新增方法Access
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| Access | 新增方法 | BasicSetting | sy | Path:签名s,文件路径 Mode:签名y,待检查权限 |
b | Result:是否具有待检查的权限 | ① 该代理方法用于检查当前进程对文件或目录的访问权限。 ② Mode的取值范围为[0, 7],含义如下: 0 - 判断文件是否存在 1 - 判断文件是否存在且具有可执行权限 2 - 判断文件是否存在且具有可写权限 3 - 判断文件是否存在且具有可写、可执行权限 4 - 判断文件是否存在且具有可读权限 5 - 判断文件是否存在且具有可读、可执行权限 6 - 判断文件是否存在且具有可读、可写权限 7 - 判断文件是否存在且具有可读、可写、可执行权限 |
二:评审点2:同意新增interface:bmc.kepler.Managers.EthernetInterfaces.IPCommands;并新增方法AddIpAddress、DeleteIpAddress 、SetLink,具体如下:
path:/bmc/kepler/Managers/:Id/EthernetInterfaces
新增interface:bmc.kepler.Managers.EthernetInterfaces.IPCommands
新增method:AddIpAddress
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| AddIpAddress | 新增方法 | SecurityMgmt | sss | IfName:签名s,网口名称 Version:签名s,IP版本,取值为[“IPv4”, “IPv6”, “IPv4AndIPv6”] IfAddr:签名s,IP地址 |
NA | NA | 为一个网络接口添加IP地址 |
新增method:DeleteIpAddress
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| DeleteIpAddress | 新增方法 | SecurityMgmt | sss | IfName:签名s,网口名称 Version:签名s,IP版本,取值为[“IPv4”, “IPv6”, “IPv4AndIPv6”] IfAddr:签名s,IP地址 |
NA | NA | 从网络接口删除一个IP地址 |
新增method:SetLink
| 方法名称 | 变化类型 | 权限 | 请求签名 | 请求参数 | 响应签名 | 响应体 | 备注 |
|---|---|---|---|---|---|---|---|
| SetLink | 新增方法 | SecurityMgmt | sa{ss} | IfName:签名s,网口名称 Params:签名a{ss},网口link操作参数 |
NA | NA | 管理和修改网络接口的(链路层)属性,比如启用网口。 |
Params为字典结构,KV定义如下:
| Key | Value | 描述 |
|---|---|---|
| Option | 取值范围[“up”,“down”] | 网口Link的操作类型 |
遗留问题:
1、评审点2的方法权限需要重新确认
结论: 权限划分中的UserMgmt和SecurityMgmt类似,都是管理员默认有,操作员默认没有的权限,但是UserMgmt(用户管理的权限)控制的是用户有关的操作,因此使用SecurityMgmt权限。