4.对于MLS SELinux系统,安全上下文被扩展,新加入两个安全级别:低或当前的安全级别和高安全级别。通常,低安全级别反应的是进程当前的安全级别,或包含在客体内的数据的灵敏度;高安全级别反应的是上下文中用户标识符的许可证级别或那些所谓多层客体允许的数据最大范围,当MLS开启时,对安全上下文的扩展格式如下:
user:role:type:sensitivity[:category,...]
[-sensitivity[:category,...]]
注意安全级别只需要一个灵敏度,可以不要分类或搭配多个分类,即分类是可选的,此外,在指定安全上下文时不需要指定高级级别,如果未指定,高级就等于低级,对于客体而言,这很常见。
对于一个有效的安全上下文,高级级别必须优先于低级级别,此外,与灵敏度关联的分类也必须是有效的,假设我们使用前面的level语句:
level s0:c0.c2;
level s1:c0.c2,c4;
和user_u,user_r和user_t,这些都是有效的用户、角色和类型标识符,下面的安全上下文是无效的:
user_u:user_r:user_t:s0-s0:c2,c4
(c4 is invalid for s0)
user_u:user_r:user_t:s0:c0-s0:c2
(high does not dominate the low)
因为SELinux中的MLS特性扩展了安全上下文,无论在什么地方使用安全上下文都需要指定安全级别信息了,对于一个MLS系统,所有用户都必须要有一个定义好的许可证安全级别(即高安全级别),它代表最高级别进程用户,user语句的语法就被改为:
user 用户名 roles 角色集
level 默认级别 range 允许的范围 ;
这里的用户名和角色集参数和之前的一样,但添加了两个新的关键字,一个定义用户登陆时默认的安全级别(level),另一个定义了用户登陆或可以运行的进程的安全级别的范围(range),默认级别是一个单一有效安全级别,允许的范围是从低到高的安全级别范围,如:
user joe roles user_r level s0 range s0 - s3:c0.c4;
这个语句给用户joe分配的默认安全级别是s0(我们早先定义的最低的敏感度,没有分类),允许用户从无分类的安全级别s0到有分类c0到c4的安全级别s3的任何安全级别登陆,如用户可以以s1:c1.c2安全级别登陆,但不允许以s4:c0安全级别登陆,因为这个级别没有在允许的范围内。
MLS影响的其它主要区域是使用一个安全上下文标记一个客体的地方,你需要记住,在MLS系统中,要扩展客体安全上下文,使其包括低和高安全级别.