1.客体类别和操作
这部分策略是内核代码逻辑的重复。按照机制和策略分离的原则,内核代码实现机制,用户编写策略。但是SELinux策略语言中偏偏有一部分是在重复内核代码的逻辑。这部分重新定义了客体类别和操作,有些不伦不类,因为用户不可能多定义或少定义一个客体类别,也不可能修改客体之上的操作。
语法是:
举例:
上述语句表示客体类unix_stream_socket自通用操作集合socket中继承了全部操作,并且自己有3个额外的操作:connectto、newconn、acceptfrom。
下面再给出通用操作集合的语法:
举例:
上述语句中的注释表明,套接字操作的前半部分和文件相同,后半部分是套接字上特有的操作。
2.SELinux用户
SELinux用户是SELinux安全上下文四元组中的第一个成员。SELinux的机制是先将Linux用户映射为SELinux用户,再将SELinux用户映射为SELinux角色。
语法:
举例:
SElinux用户“sysadm_u”可以映射为SElinux角色“sysadm_r”。
3.角色
SELinux安全上下文四元组的第二个成员是角色。SELinux机制会将SELinux角色映射为SELinux类型。
语法:
或者,定义角色的同时给出关联的类型:
举例:
上述语句定义了3个角色:system_r、sysadm_r、user_r。其中,user_r可映射为类型user_t和chfn_t。
一个一个地定义角色有些麻烦,可以定义一个共同的角色属性,将角色关联到角色属性,在后续需要角色的策略中使用角色属性就可以了。
语法:
有了角色属性,就可以将以前定义的角色关联到角色属性上。
举例:
上述语句定义了3个角色:网络管理员、系统管理员、普通用户,2个角色属性:管理和网络。将网络管理员关联到管理和网络,系统管理员关联到管理。
4.类型
SELinux安全上下文四元组中的第三个成员是类型。类型相关的定义有type、attribute、typeattribute、typealias。
(1)type
在类型上有类型名字,类型属性,可能还有类型别名。语法:
或者:
或者:
或者:
举例:
上述语句定义了一个类型“bin_t”,再为它关联两个别名“usr_bin”和“sbin”,再定义一个属性“exec_t”,关联到“bin_t”。定义属性“can_relabelto”,在定义类型“setf_t”的时候关联上别名“restorecon_t”和属性“can_relabelto”。最后,在定义类型“ssh_serv_packet_t”时赋予类型多个属性:“packet_t”和“serv_packet_t”。
(2)attribute(www.xing528.com)
语法:
attribute就是“类型的类型”。
3)typeattribute
语法:
typeattribute的作用是为一个以前定义的类型关联属性。
举例:
上述语句定义了一个类型“daemon_t”和一个属性“domain”,然后将它们关联起来。
4)typealias
语法:
typealias的作用是定义一个类型的别名。
5.多级安全
多级安全包含两个元素:敏感度(sensitivity)和组别(category)
1)sensitivity
语法:
或者:
举例:
上述语句定义了3个级别:s0、s1、s2。s0的别名是common(普通)和no_secret(无秘密);s1的别名是secret(秘密);s2无别名。
(2)dominance
dominance用于定义级别之间的“高低”关系。
语法:
举例:
s0级别最低,s2级别最高。
3)category
语法:
或者:
举例:
上述语句定义了两个组别:c0和c1,c0的别名是planning(规划部)和r_d(研发部);c1的别名是business(市场部)。
(4)level
级别(level)定义将前面的敏感度(sensitivity)和组别(category)组合起来。多级安全Multi-Level Security)中的级别就是下面要介绍的级别。
语法:
其中category_id可以是用“.”连接的两个组,如c0.c16,表示一个闭合集合;也可以是用“,”连接的两个category,如c21,c36,表示不连续的列表;还可以将这两种情况组合,如c0.c16,c21,c36,c45。
举例:
上述语句表示敏感度s0和组别c0、c1关联,敏感度s1和组别c0、c1关联,敏感度s2和组别c0、c1、c2关联。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。