Linux多安全策略和动态安全策略框架模块代码分析报告(14)
策略库中各个数据结构之间的关系
上文分别介绍了策略库及各种策略规则在策略中的表示方法,对于这些数据结构,它们之间的关系如图所示:
安全服务器相关操作
安全服务器主要由SID/安全上下文的映射和策略逻辑两部分组成,主要用于维护SID与安全上下文的映射关系、维护系统的访问控制策略、为新建客体提供SID、接收客体管理器的安全查询请求等。对于这些操作,Linux中实现如下表所示,这些函数均定义在security/selinux/ss/services.c中。
函数名称 |
函数功能 |
selinux_set_mapping() |
计算参数map中客体类别的数量,并将map中字符形式的类别-权限映射转换为数值形式的类别权限映射 |
map_class() |
将客体类别在策略中的值转换为内核中相应的类别值 |
ummap_class() |
将映射的客体类别值转换为策略中相应的类别值 |
map_decision() |
根据客体类别获取相应的访问向量策略 |
security_mls_enabled() |
判断是否启用了MLS策略 |
constraint_expr_eval() |
计算约束表达式的布尔值 |
security_dump_masked_av() |
审计指定的权限 |
context_struct_to_string() |
将一个安全上下文字符串写入到动态分配的字符串中,并让参数*scontext指向该字符串,*scontext_len存放该字符串的长度 |
security_validate_transition() |
判断指定的源、目的、进程的安全上下文是否满足客体类别的约束表达式,若不满足,则释放相应的安全上下文对应的空间 |
security_bounded_transition() |
检查指定的转换是否受到限制,如果newsid受到oldsid的约束,返回0,否则返回错误码 |
avd_init() |
初始化访问向量决策 |
security_compute_av() |
根据客体类别对(ssid,tsid)计算访问向量决策 |
security_get_initial_sid_context() |
将初始化SID转化为相应的上下文字符串 |
security_sid_to_context_core() |
将SID关联的安全上下文字符串写入动态分配的字符串中,并让scontext指向该字符串,scontext_len存放该字符串的长度 |
string_to_context_struct() |
解析安全上下文字符串,将其转化为相应的context结构 |
security_context_to_sid_core() |
获取字符串形式的安全上下文对应的SID,成功时返回0 |
security_context_to_sid() |
获取给定的安全上下文对应的SID,该函数只是对security_context_to_sid_core()的简单封装 |
security_context_to_sid_default() |
该函数只是简单的封装了security_context_to_sid_core()函数 |
compute_sid_handle_invalid_context() |
对于一个无效的安全上下文生成一条审计记录 |
filename_compute_type() |
根据文件名转换规则设置指定安全上下文newcontext中的类型 |
security_compute_sid() |
根据源SID、目标SID以及目标客体类别生成一个安全上下文,并获取该上下文对应的SID |
security_transition_sid() |
为新的客体创建一个SID,成功时返回0,该函数只是简单的封装了security_compute_sid()函数 |
security_member_sid() |
为对实例化对象中选择的成员计算一个SID,该函数只是简单的封装了security_compute_sid()函数 |
security_change_sid() |
重新标记客体时计算一个可用的SID,该函数只是简单的封装了security_compute_sid()函数 |
clone_sid() |
将SID和其对应的安全上下文插入到SID表中 |
convert_context() |
将安全上下文c中的值由p->oldp指定的值转化为p->newp指定的值,并基于新策略确定安全上下文的有效性。 |
security_policydb_len() |
获取策略库的长度 |
security_load_policy() |
加载一套新的安全策略,并使其生效,然后刷新访问向量缓存,并在必要的情况下转换SID表 |
security_genfs_sid() |
为不支持扩展属性、基于转换的、基于进程的文件系统中的文件获取一个SID |
security_fs_use() |
确定如何处理一个文件系统的标记 |
security_get_bools() |
获取策略支持的布尔值的数量、名字和值 |
security_set_bools() |
设置策略库支持的布尔值,并更新条件策略 |
security_get_bool_value() |
用于获取指定布尔值的状态 |
security_preserve_bools() |
根据策略库中布尔值的当前值计算条件策略语句 |
security_sid_mls_copy() |
根据sid对应的安全上下文中的用户、角色、类型和mls_sid对应的安全上下文中的mls域创建一个新的安全上下文,在确保安全上下文有效的情况下获取对应的SID,并将其存放到new_sid中 |
security_get_classes() |
获取策略支持的客体类别的数量及各个类别的值 |
security_get_permission() |
获取指定的客体类别支持的权限的数量及相应的权限 |
security_policycap_supported() |
检查策略库是否支持指定的能力 |
security_read_policy() |
将策略库结构体中的数据写入到二进制策略文件中 |
selinux_audit_rule_free() |
释放审计规则占有的存储空间 |
selinux_audit_rule_init() |
根据参数field对审计规则进行初始化 |
selinux_audit_rule_known() |
检查规则是否包含selinux中的相关域,若包含,返回1 |
selinux_audit_rule_audit() |
根据field/op对判断sid对应的安全上下文是否与指定的审计安全上下文匹配,若匹配返回真,反之返回假 |
aurule_init() |
该函数为AVC_CALLBACK_RESET事件注册aurule_avc_callback()回调函数,该函数在AVC_CALLBACK_RESET事件发生时将会调用aurule_callback()函数来重新初始化所有可用规则的lsm_rule域 |
如表所示,这里只给出了安全服务器的部分操作的实现,并没有给出网络相关的操作。对于这些函数,下一节将会对其中比较重要的部分函数进行介绍。
查看评论 回复