2.6.3 安全级别
安全上下文中含有安全级别,它包括敏感度属性和分类属性,敏感度指安全的等级,如:confidential、secret等。分类属性指数据分成多个隔绝部分,如:数据1仅能A使用,数据2仅能B使用等,分类属性是可选的。
安全上下文结构context中使用成员range成员表示,range成员是2个元素的数组,它将安全级别分为高层和低层的级别,每个层次的级别用结构mls_level表示,结构mls_level的组织结构图如图3-9所示。
错误!
图见 http://www.startos.com/zhuanti/zt02/2010/1111/9343.html#share
图3-9 安全上下文的安全级别的组织结构图
敏感度属性用整数记录级别,分类属性使用位图来记录。为了方便位图的管理,又将位图分为小块,每小块64位,将每小块作为链表的节点,用链表连接起来。可见安全上下文支持多层次多等级的安全级别。分类属性可将安全属性分成很小的相互隔绝块,如:文件仅供某个部门的某个人使用,每个部门相当于位图的一个节点,位图的每1位为1或者0,指明了是否属于某个人。
结构mls_level列出如下(在security/selinux/ss/context.h中):
struct mls_level {
u32 sens;//敏感度属性
struct ebitmap cat;//分类属性位图
};
结构ebitmap列出如下(在security/selinux/ss/ebitmap.h中):
struct ebitmap {
struct ebitmap_node *node;//位图中的第一个节点
u32 highbit; //整个位图中的最高位置
};
#define MAPTYPE u64
struct ebitmap_node {
u32 startbit; //在整个位图中的开始位置
MAPTYPE map;
//位图中属于这个节点的部分,以u64类型变量表示,64位位图
struct ebitmap_node *next; //下一个位图节点
};
在selinux/ss/ebitmap.c文件中提供了位图的管理函数。例如:函数ebitmap_init给一个安全上下文初始化位图,将位图每位置0;函数ebitmap_cpy将一个安全上下文的位图拷贝到另一个安全上下文;函数ebitmap_cmp比较两个安全上下文的位图是否一样;函数ebitmap_get_bit得到位图中指定位的值;函数ebitmap_set_bit设置位图中指定位的值;函数ebitmap_read从二进制策略文件中读取安全上下文的位图。
安全上下文中含有安全级别,它包括敏感度属性和分类属性,敏感度指安全的等级,如:confidential、secret等。分类属性指数据分成多个隔绝部分,如:数据1仅能A使用,数据2仅能B使用等,分类属性是可选的。
安全上下文结构context中使用成员range成员表示,range成员是2个元素的数组,它将安全级别分为高层和低层的级别,每个层次的级别用结构mls_level表示,结构mls_level的组织结构图如图3-9所示。
错误!
图见 http://www.startos.com/zhuanti/zt02/2010/1111/9343.html#share
图3-9 安全上下文的安全级别的组织结构图
敏感度属性用整数记录级别,分类属性使用位图来记录。为了方便位图的管理,又将位图分为小块,每小块64位,将每小块作为链表的节点,用链表连接起来。可见安全上下文支持多层次多等级的安全级别。分类属性可将安全属性分成很小的相互隔绝块,如:文件仅供某个部门的某个人使用,每个部门相当于位图的一个节点,位图的每1位为1或者0,指明了是否属于某个人。
结构mls_level列出如下(在security/selinux/ss/context.h中):
struct mls_level {
u32 sens;//敏感度属性
struct ebitmap cat;//分类属性位图
};
结构ebitmap列出如下(在security/selinux/ss/ebitmap.h中):
struct ebitmap {
struct ebitmap_node *node;//位图中的第一个节点
u32 highbit; //整个位图中的最高位置
};
#define MAPTYPE u64
struct ebitmap_node {
u32 startbit; //在整个位图中的开始位置
MAPTYPE map;
//位图中属于这个节点的部分,以u64类型变量表示,64位位图
struct ebitmap_node *next; //下一个位图节点
};
在selinux/ss/ebitmap.c文件中提供了位图的管理函数。例如:函数ebitmap_init给一个安全上下文初始化位图,将位图每位置0;函数ebitmap_cpy将一个安全上下文的位图拷贝到另一个安全上下文;函数ebitmap_cmp比较两个安全上下文的位图是否一样;函数ebitmap_get_bit得到位图中指定位的值;函数ebitmap_set_bit设置位图中指定位的值;函数ebitmap_read从二进制策略文件中读取安全上下文的位图。