Linux多安全策略和动态安全策略框架模块代码分析报告(20)

AVC相关操作

对于访问向量缓存,SELinux实现相关操作如表2-18所示,这些函数均定义在security/selinux/include/avc.h与security/selinux/avc.c中。

2-18 SELinux实现的AVC相关操作说明

函数所属文件

函数名称

函数功能

security/selinux/avc.c

avc_hash()

访问向量缓存对应的哈希函数

avc_dump_av()

以可读的方式显示访问向量,并根据访问向量中设置的位将相应的字符形式的权限写入审计缓冲区

avc_dump_query()

以可读的方式显示SID对和客体类别

avc_init()

初始化访问向量缓存

avc_get_hash_stats()

获取访问向量缓存的相关统计信息

avc_node_free()

释放AVC结点在缓存中的空间

avc_node_delete()

删除参数node指定的访问向量结点

avc_node_kill()

释放参数node对应的缓冲区,并对访问向量缓存的相关统计信息进行修改

avc_node_replace()

用新的AVC结点new来替换旧的AVC结点old

avc_reclaim_node()

回收AVC_CACHE_RECLAIM个访问向量结点

avc_alloc_node()

分配一个访问向量结点,并对其进行初始化

avc_node_populate()

用指定的参数来设置访问向量缓存结点中的相应数据

avc_search_node()

根据源SID、目标SID、目标的类别在访问向量缓存中查找指定的结点,如果找到,则返回相应的结点;否则返回NULL

avc_lookup()

基于(ssid,tsid)查找访问向量,若存在,返回包含该访问向量的结点,反之返回NULL

avc_latest_notif_update()

根据参数seqno来更新访问向量缓存中最新的撤销通知序列号,成功时,返回0

avc_insert()

根据指定的源SID、目标SID、客体类别向访问向量缓存中插入一个访问向量

avc_audit_pre_callback()/

avc_audit_post_callback()

通用审计代码调用的回调函数,用于获取SELinux指定的信息

slow_avc_audit()

用于AVC的审计

avc_add_callback()

用于为event中指定的事件注册一个回调函数,并将该函数插入到回调函数链表中,成功时,返回0

avc_sidcmp()

判断两个SID是否相等,若相等或其中一个为SECSID_WILD,则返回真

avc_update_node()

更新访问向量缓存中的访问向量。如果指定的访问向量存在,则更新该访问向量,并释放之前的访问向量

avc_flush()

刷新AVC,该函数实际上调用了avc_node_delete()函数来删除访问向量缓存中所有的AVC结点

avc_ss_reset()

刷新访问向量缓存,并调用回调函数重新使能迁移的权限

avc_compute_av()

通过调用安全服务器中的security_compute_av()函数来计算一个访问向量决策,并将相应的访问向量插入到访问向量缓存中。

avc_denied()

该函数实际上用于为参数指定的访问向量授予requested指定的权限

avc_has_perm_noaudit()

在不执行审计的情况下检查访问向量缓存来确定是否授予SID(ssid,tsid)以请求的权限,如果在AVC中没有找到指定的决策,则查询安全服务器,并将相应的决策插入到AVC中。如果授予了指定的权限,则返回0

avc_has_perm_flags()

检查访问向量缓冲来确定是否授予了SID(ssid,tsid)以请求的权限,并根据策略审计请求的权限

avc_policy_seqno()

获取访问向量缓存的最新的撤销通知序列号

avc_disable()

禁止AVC

security/selinux/include/avc.h

avc_audit_reuired()

计算待审计的权限及拒绝的权限,并返回待审计的权限

avc_audit()

审计授予或拒绝的权限

avc_has_perm()

检查访问向量缓存是否授予了指定的SID对请求的权限。该函数只是简单的封装了avc_has_perm_flags()函数