客体类和他们相关的权限是SELinux中访问控制的基础.客体类代表着是资源的类别例如文件和套接字,并且权限代表着对这些资源的访问,例如读和发送.理解客体类和权限是SELinux中一个比较困难的方面,因为他继续要Linux的知识,也需要SELinux的知识.
一个客体类代表着一个确定类型的所有的资源(例如文件或者是套接字).一个客体类的实例(例如,一个特定的文件或者是套接字)简单的称作一个对象.通常术语客体类和对象可以互换使用,但是理解他们之间的不同是非常重要的.客体类指的是整个资源的类别(file),对象指的是客体类中一个特定的实例(/etc/passwd).
正如我们在第二章讨论的那样,”Concepts,”在策略中通过对具有指定类型的客体类的权限来描述对对象的访问.为了阐述明白,我们来考虑下面的规则.
allow user_t bin_t:file{read execute getattr};
在这条规则中,类型为user_t的进程(也就是资源或主体)被允许对所有具有目标类型bin_t的客体类实体进行读取,执行和获取其属性操作.客体类文件指定资源的类别,bin_t指定哪一个资源类别的实体来应用那一条规则(也就是说,这些类型为bin_t的文件实体).他不应用那些有bin_t类型但不是文件类也不应用到是文件实体但没有bin_t类型来作为他们的类型.
在这条规则中的权限,读,执行和获取属性定义了允许那些拥有user_t类型的主体去访问这些客体.这些对文件客体类都是有效的权限中的每一个都代表着对对象访问的一些方式.(例如,read 权限需要使用open(2)系统调用来打开文件进行读取等).这些为客体类定义的权限的集合(也被称为访问向量)代表着多有可能的访问,这些对那些客体类所代表的资源访问能够被允许.
客体类的集合依赖于SELinux的版本和Linux集合.随着时间的推移,新的和不同的客体类已经发展了新的和改变了的内核特征.例如,新版版的Linux内核已经为控制audit框架引进了一个新的Netlink-specific 套接字.对于这些支持Netlink-specific的内核,会有一个带有适当权限的SELinux客体类被定义.