7.【SELinux学习笔记】约束

来源:互联网 发布:gh0st3.79远控源码 编辑:程序博客网 时间:2024/05/22 12:05
一、约束语句(Constrain Statement)
    约束语句可以让我们在安全上下文的三个元素(用户、角色、源/目标类型)中作任意限制,其包含三个元素:1.应用约束的客体类别;2.对应受约束客体类别的许可;3.约束的布尔表达式;其中约束表达式比较域(主体,源)进程的上下文和客体(目标)的上下文,或直接使用明确的名字进行比较,如类型或角色标识符。
    完整的约束语法如下:constrain 类别集 许可集 表达式;
约束表达式关键字:
t1,r1,u1 分别是源类型,角色和用户
t2,r2,u2 分别是目标类型,角色和用户
约束表达式语法还支持下列操作符:
= = 相等或是„的成员
!= 不相等或不是„的成员
eq (角色关键字)等于
dom (角色关键字)优先于
A domby B (角色关键字)B优先A
incomp (角色关键字)无可比性

案例1:constrain process transition (u1==u2);//域转换过程中需要transition许可,此约束作了进一步限制,且被应用到process客体类别当中。那么表达式中u1==u2表示安全上下文的域和客体的用户标识要保持一致。总的来说即要求所有的域转换,主客体用户标识符要保持一致。

案例2:constrain process transition (r1 == r2) ;//要求所有的域转换,主客体角色标识符需保持一致。

案例1和案例2的约束都是应用到相同的客体类别和许可因此可以合并为一条约束语句,如下:constrain process transition (u1 == u2 and r1 == r2) ;

案例3:
constrain process transition (u1 == u2 or t1 == privuser) ;
constrain process transition (r1 == r2 or t1 == privrole) ;
t1 指的是源类型(如果使用了 t2,那就指的是目标类型),第一条
语句指出, 只要源类型具有 privuser 属性, 就允许在域转换过程中改变用户标识符, 同样,
只要源类型具有 privrole 属性,就可以在域转换过程中改变角色标识符。

二、标记转换约束
    唯一支持validatetrans约束的客体时文件系统客体,如文件、目录、设备文件等。与constrain不同,validatetrans语句允许你将某个客体的新安全上下文和旧安全上下文联系起来。在validatetrans语句中又增加了新的关键字,如t3,r3和u3,分别代表进程安全上下文的类型、角色、用户。*1代表旧安全上下文,*2代表新安全上下文。为了防止与constrain语句混淆这里提示大家,constrain语句中t1代表源类型,t2代表目标类型。而在validatetrans语句中t3代表源进程类型,t2代表新类型,t1代表旧类型。

案例1:假设策略中类型user_tmp_t用于没有经过验证的用户程序的临时文件,我们要确保具有特权的域可以改变所有文件标记,而不是偶尔重新标记类型为user_tmp_t的文件到一个更高级的类型:
validatetrans {file lnk_file} ( t2 != shadow_t or t1 !=user_tmp_t );//首先使用了一个普通文件和一个符号链接文件(lnk_file),因为我们不想某些人使用链接代替文件。然后表达式中禁止某个域类型被授权可以重新标记一个用户临时文件的类型为shadow密码文件的类型。







0 0
原创粉丝点击