linux的安全策略组网实现,Linux多安全策略和动态安全策略框架模块详细分析之函数实现机制(1)...

原标题:Linux多安全策略和动态安全策略框架模块详细分析之函数实现机制(1)

2.3函数实现机制2.3.1安全服务器

如1.3.2节中所介绍的,安全服务器主要用于提供安全策略决策、维持SID和安全上下文之间的映射关系、为新建的对象和成员对象提供SID、管理对象管理器的访问向量缓存、提供动态策略等。对于这些功能,下面将一一对其进行介绍。

2.3.1.1内核策略库以及库的管理

SELinux中的策略规则有成千上万条,而系统中的每个操作又都要通过查找这些规则来计算相应的访问向量决策,那么SELinux是如何组织这些策略规则的呢?事实上,在SELinux中,所有的策略规则都采用了链表、哈希表和位图等数据结构动态的存放在内存中,并用policydb结构体来表示整个安全策略。下面将分别对这些数据结构进行介绍:

1 基本数据结构

在SELinux中,所有的规则都是通过链表、位图和哈希表来进行组织的。由于链表比较常见,所以这里主要对位图和哈希表的表示和相关操作进行介绍。

(1) 位图

在SELinux中,位图使用ebitmap结构表示,其定义在security/selinux/ss/ebitmap.h中。具体定义如下所示:

struct{

struct*;

unsigned long[];

;

};

struct{

struct*; /* first node in the bitmap */

; /* highest position in the total bitmap */

};

如上所示,ebitmap结构用来表示一个位图,代码中已经对该结构体的各字段的含义进行了解释,这里不再赘述。对于位图中的每个位图节点,SELinux使用ebitmap_node结构表示,其各字段含义如表2-1所示:

表2-1 ebitmap_node中各字段说明

类型

字段

含义

struct ebitmap_node *

next

指向下一个位图节点

unsigned long

maps

位图中的位

u32

startbit

表示开始位在整个位图中的位置

对于位图,SELinux实现的相关操作如表2-2所示,这些操作定义在security/selinux/ss/ebitmap.h和security/selinux/ss/ebitmap.c中。

表2-2 位图相关操作说明

函数所属文件

函数名称

函数功能

security/selinux/ss/ebitmap.h

ebitmap_length()

获取位图的最高位

ebitmap_start_positive()

查找位图中第一个被设置的位

ebitmap_init()

初始化指定的位图

ebitmap_next_positive()

查找位图中相对于bit位后第一个被设置的位在为图中的位置

EBITMAP_NODE_INDEX()

获得指定的位在位图节点中的索引

EBITMAP_NODE_OFFSET()

获得指定的位在位图节点中的偏移量

ebitmap_node_get_bit()

获取位图节点中指定位的值

ebitmap_node_set_bit()

设置位图节点中的指定位

ebitmap_node_clr_bit()

清除位图节点中的指定位

ebitmap_for_each_positive_bit()

该宏实际上是一个for循环,用于处理位图中所有设置的位

security/selinux/ss/ebitmap.c

ebitmap_cmp()

比较两个位图是否相等

ebitmap_cpy()

复制src到dst中

ebitmap_contains()

判断位图e1是否包含位图e2

ebitmap_get_bit()

获得位图中指定位的值

ebitmap_set_bit()

设置位图中指定位的值为指定的值

ebitmap_destroy()

销毁位图

ebitmap_read()

将位图写入到二进制策略文件中

ebitmap_write()

从二进制策略文件中读取相应的位图

(2) 哈希表

在SELinux中,哈希表使用hashtab结构表示,其定义在security/selinux/ss/hashtab.h中,具体定义如下所示:

struct{

void *;

void *;

struct*;

};

struct{

struct**; /* hash table */

;/* number of slots in hash table */

; /* number of elements in hash table */(*)(struct*, const void *);

/* hash function */

int (*)(struct*, const void *, const void *);

/* key comparison function */

};

struct{

;

;

};

对于hashtab结构,代码中已经对各字段含义进行了解释,因此这里不再赘述。下面主要对hashtab_node结构进行说明,其各字段含义如表2-3所示:

表2-3 hash_node中各字段说明

类型

字段

含义

void *

key

表示哈希表的键值

void *

datum

相应的键值对应的数据

struct hashtab_node *

next

指向下一个哈希节点

hashtab_info结构存放了哈希表的相关信息,对于该结构,其各字段含义如表2-4所示:

表2-4 hashtab_info中各字段说明

类型

字段

含义

u32

slots_used

记录哈希表中已经使用的位置的数量

u32

max_chain_len

记录具有相同哈希函数值的同义词数量的的最大值

对于哈希表,SELinux实现的相关的操作如表2-5所示,这些函数均定义security/selinux/ss/hashtab.c中。

表2-5 哈希表相关操作说明

函数名称

函数功能

hashtab_create()

创建一个包含size个位置的哈希表

hashtab_insert()

将指定的(key,datum)对插入到指定的哈希表中,成功执行时,返回0

hash_search()

根据指定的键值在哈希表中查找相应的表项,成功执行时返回相应的数据

hash_destroy()

销毁指定的哈希表

hashtab_stat()

获取哈希表的统计信息

hashtab_map()

对哈希表中的每个哈希节点使用参数apply指定的函数进行处理返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值