1、SELinux的安全上下文
安全上下文是一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),"域"和"域类型"意思都一样,即都是安全上下文中的“TYPE”。
SELinux对系统中的许多命令做了修改,通过添加一个-Z选项显示客体和主体的安全上下文。
1) 系统根据PAM子系统中的pam_selinux.so模块设定登录者运行程序的安全上下文;
2) 文件的Security Contex规则如下:
• rpm包安装的:会根据rpm包内记录来生成安全上下文;
• 手动创建的文件:会根据policy中规定的来设置安全上下文;
• cp:会重新生成安全上下文;
• mv:安全上下文则不变。
3)id -Z
显示了你的shell的安全上下文;
4)ps -Z
检查进程的安全上下文;
5)ls -Z
检查文件、目录的安全上下文;
2、安全上下文格式解释
所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。常常用下面的格式指定或显示安全上下文:
USER:ROLE: TYPE[LEVEL[:CATEGORY]]
① USER
1) useridentity:类似Linux系统中的UID,提供身份识别,用来记录身份;安全上下文的一部分;
2) 三种常见的 user:
• user_u :普通用户登录系统后的预设;
• system_u :开机过程中系统进程的预设;
• root :root 登录后的预设;
3) 在 targeted policy 中 users 不是很重要;
4) 在strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。
② ROLE
1) 文件、目录和设备的role:通常是 object_r;
2) 程序的role:通常是 system_r;
3) 用户的role:targeted policy为system_r; strict policy为sysadm_r、staff_r、user_r;用户的role,类似系统中的GID,不同角色具备不同的的权限;用户可以具备多个role;但是同一时间内只能使用一个role;
4) 使用基于RBAC(Roles Based AccessControl) 的strict和mls策略中,用来存储角色信息
③ TYPE
1) type:用来将主体(subject)和客体(object)划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;
2) 当一个类型与执行中的进程相关联时,其type也称为domain;
3) type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心脏,预设值以_t结尾;
④ 对比SELinux和标准Linux的访问控制属性
在标准Linux中,主体的访问控制属性是与进程通过在内核中的进程结构关联的真实有效的用户和组ID,这些属性通过内核利用大量工具进行保护,包括登陆进程和setuid程序,对于客体(如文件),文件的inode包括一套访问模式位、文件用户和组ID。以前的访问控制基于读/写/执行这三个控制位,文件所有者、文件所有者所属组、其他人各一套。
在SELinux中,访问控制属性总是安全上下文三人组(用户:角色:类型)形式,所有客体和主体都有一个关联的安全上下文。需要特别指出的是,因为SELinux的主要访问控制特性是类型强制,安全上下文中的类型标识符决定了访问权。
SELinux是在标准Linux基础上增加了类型强制(TE:Type Enforcement),这就意味着标准Linux和SELinux访问控制都必须满足先要能访问一个客体,例如:如果我们对某个文件有SELinux写入权限,但我们没有该文件的w许可,那么我们也不能写该文件。下表总结了标准Linux和SELinux之间访问控制属性的对比:
标准Linux SELInux
进程安全属性 真实有效的用户和组ID 安全上下文
客体安全属性 访问模式、文件用户和组ID 安全上下文
访问控制基础 进程用户/组ID和文件的访问模式,
此访问模式基于文件的用户/组ID 在进程类型和文件类型
之间允许的许可