3.2 SELinux策略配置语言
策略是一套指导SELinux安全引擎计算安全决策的规则,它定义了文件客体的类型、进程的域、使用限制进入域的角色及访问许可的规则表达式等。策略的源代码用SELinux配置语言进行描述。
3.2.1 基本概念
1.主体和客体
主体(subject)和客体(object)是指系统中的元素,主体是访问客体的进程,客体是系统中的一类实体,在系统中定义好了30种不同的客体类别(class),每个class有定义好的许可。
在/etc/security/selinux/src/policy/flask/security_classes中有class的定义,SELinux定义了30个class,列出如下:
security process system capability filesystem
file dir fd lnk_file chr_file blk_file sock_file
fifo_file socket tcp_socke tudp_socket msgq semmsg
shm ipcnode netif netlink_socket packet_socket
key_socket rawip_socket unix_stream_socket
unix_dgram_socket passwd
|
每个class都定义了操作许可,如:客体file有19个操作许可,列出如下: :
ioctl read write create getattr setattr lock relabelfrom
relabelto append unlink link rename execute swapon
quotaon mounton execute_no_trans entrypoint
|
2.安全上下文与安全标识符
SELinux给每个主体和客体定义了一个安全上下文(security context)。安全上下文是对主体或客体安全的描述,其格式为:user:role:type,如:root:sysadm_r:sysadm_t,其中root为用户ID(user),sysadm_r为角色ID(role),sysadm_t为类型(type)ID。安全上下文代表了SELinux的访问控制属性。安全标识符(security identifier,简称SID)是内核中激活的安全上下文的序号。
一般情况下,多个属性的组合形成类型,多个类型的组合形成角色,多个角色的组合形成用户。有的属性也可能覆盖多个类型的范围,在安全上下文中最重要的是类型。
在文件系统中的每个文件或目录、网络的端口等都指定了一个安全上下文,安全策略则给出了各个安全上下文之间作用的规则。
例如:在policy/file_contexts/program/chroot.fc中,文件chroot的安全上下文被定义如下:
/usr/sbin/chrootsystem_u:object_r:chroot_exec_t |
3.类型和类型属性
一个进程的类型(type)又称为域dormain,客体的角色常称为object_r。类型在策略管理中是用得最多的部分,特别是在类型增强(TE)中。用户、角色、域类型和客体类型的关系图如图3-3所示,每个用户有相配的角色,角色有与用户组相关的域类型,而域类型又指定了对客体类型的访问控制权限。
| 图3-3 用户、角色、域类型和客体类型的关系图 |
类型的属性(Type Attributes)是与一组类型相关的概念。它在TE规则里可代替类型,类型、别名、类型的属性共享同一个名字空间。类型属性定义的语法如下:
type type_name[aliasalias_name(s)] [,attrib1, …, attribn]; |
例如:type passwd_exec_t, file_type, sysadmfile, exec_type;
其含义是:将属性file_type、sysadmfile和exec_type定义给类型passwd_exec_t。
4.TE模型和RBAC模型
TE模型给进程和客体提供了良好的颗粒控制。RBAC提供了高层次的简化用户管理。SELinux安全模型是TE模型和RBAC模型的联合体。
TE模型是支持程序运行和域转移的强大类型控制,主体为运行的进程,进程为域类型。TE访问矩阵定义了域可以访问什么类型的客体,还定义了域类型转移。SELinux类型转移或访问控制基于一对安全上下文和类型的class。
RBAC是基于角色的访问控制(Role-based Access Control)模型,传统的RBAC模型是对角色进行授权,然后将一个或多个角色分配给一个授权用户。SELinux的RBAC模型是:给一个域类型指定授权,然后将域类型指定给角色,将一个或多个角色指定给一个授权用户。
例如:root:sysadm_r:sysadm_t中的sysadm_r就是角色。在每个安全上下文中有一个角色ID,对主体来说,它代表了主体当前的角色,对客体来说,角色典型值为object_r,角色对客体来说没意义。
| 回书目 上一节 下一节 |