SELinux通过在主体和客体(也被称为进程和资源)上应用RBAC(Role Based Access Controls基于角色的访问控制)为Linux系统提供了改进的安全性。传统的Linux安全使用了DAC(Discretionary Access Controls 自主访问控制) SEllinux 并没有完全取代DAC SELinux使用时,DAC规则仍然被使用。 DAC规则首先被检查,如果允许访问,在检查SElinux策略 如果DAC规则拒绝,不检查SElinux策略
1) 向主体出示身份证 2) 门卫审查身份证,并查看手册的访问规则 如果访问规则允许持有该特定身份证的人进入房间,则主体可以进入房间并访问客体。 如果访问规则不允许持有该特定身份的人进入房间,则主体被拒绝 SELinux 提供RBAC与TE(Type EnForcement类型强制访问控制)或MLS(Multi-Level Security 多级安全控制)的融合。在RBAC中,对某一客体的访问主要时基于主体被赋予的角色,而不是根据主体的用户名或进程ID。每一个角色都被赋予了访问权限。
通过以下方式保护系统 1) 将客体标识为某些安全类型 2) 将主体分配给特定的域和角色 3) 提供相关规则,允许某些域和角色访问某些客体类型 ls -Z 显示DAC控制,还会显示SELinux安全RBAC控制 列子 ls -Z -rw-r–r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html 1)unconfined_u 一个用户 2)object_r 一个角色 3)httpd_sys_content_t 一个类型 4)s0 一个级别 在SELinux访问控制中使用这四个RBAC项用户,角色,类型和级别来确定合适的访问级别,这些项被统称为SELinux安全上下文(security context),有时安全上下文又称“安全标签” 这些安全上下文被分配给主体(进程和用户)。每个安全上下文都有一个特定的名称 多层次安全 当使用SELinux时,默认策略类型被称为targeted,主要控制如何在Linux系统上访问网络服务(比如web服务和文件服务器)。Targeted策略对有效用户账号可以 在系统上完成的操作进行较少的限制。如果想要使用更多限制的策略,可以选择MLS(Multi-Level Security 多层次安全)。MLS使用了类型强制以及安全许可的附加功能。此外,它还提供了多类别安全(Multi-Category Security),为客体提供了分类级别。
基于角色的访问控制模型,类型强制、多级别安全以及Bell-LaPadula模型都是非常有趣的主题,SELinux通过四个主要的SELinux部分实现了这些模型 运行模式 安全上下文 策略类型 策略规则包
SELinux有Disabled、Permissive、Enforcing模式
此模式下,SELinux被关闭。默认的访问控制方法(DAC)被使用。适用于不需要增强安全性的环境。 关闭SELinux 编辑配置文件 /etc/selinux/config 将SELINUX=disabled即可
SELinux被启动,但安全策略规则并没有被强制执行。当安全策略规则应该拒绝访问时,访问仍然被允许,但会向日志文件系统发送一条消息,表示该访问应该被拒绝。 适用场景 审核当前的SELinux册罗规则应用到这些程序会有什么效果 测试新应用程序,看看将SELinux策略规则应用到这些程序时会有什么效果 测试新SELinux策略规则,看看将这些新规则应用到当前服务和程序上会有什么效果 解决某一特定服务或应用程序在SELinux下不再正常工作的故障
SELinuxbie 启用并强制执行所有的安全策略规则
SELinux安全上下文是一种用来分类客体(如文件)和主体(如用户)的方法。所定义的安全上下文允许SELinux 对访问客体的主体强制执行策略规则。安全上下文由四个属性组成:user、role、type、level。 User :是Linux用户名与SELinux名称的映射。它与用户的登陆名称并不相同,别用来特指SELinux用户。SELinux用户以一个字母u结尾,使其在输出中更容易被识别。在默认的targeted策略中,普通的无限制用户都有user属性unconfined_u。 Role :企业、组织中指定的角色名称与SELinux角色名称相映射。Role属性被分配给不同的主体和客体。系统会根据角色的安全许可以及客体的分类级别授予每个角色对其他主体和客体的访问。更具体地说,对于SELinux来说,用户被分配了相应的角色,而这些角色被授权对特定类型的域进行访问。通过使用角色,可以迫使账户拥有较少的特权。SELinux角色名称都以一个r结尾。在targeted的SELinux系统中,被root用户运行的进程拥有system_r角色,而普通用户运行的进程则拥有unconfined_r角色。 Type :该属性定义了进程的域类型、用户类型以及文件类型。因此该属性也被称为安全类型。大多数策略规则都会关注进程的安全类型以及进程所访问的文件、端口、设备记忆其他元素。SELinux类型名称以一个t结尾。 Level :level是MLS的属性,强制执行Bell-LaPadula模型。在TE中,该属性是可选的,但是如果使用MLS,则是必须的。MLS级别是灵敏度和类别值的组合,共同形成了安全级别。一个级别可以写为sensitivity:category。 Sensitivity 表示客体的安全或灵敏级别,比如机密或绝密 是带有s0(未分类)的层次结构,通常是最低级别的 如果级别不同,则作为一对灵敏级别(lowlevel_highlevel)列出 如果没有高或者低级别,则作为一个单一灵敏级别s0列出。然而,在某些情况下,即使灭有高或者低级别,也会显示一个范围s0-s0) Category 表示客体的分类,比如No Clearance、Top Clearance等 通常该值介于c0和c255之间 如果级别不同,则作为一对类级别(lowlevel-highlevel)列出 如果没有高和低级别,则作为一个单一类别级别列出。 用户拥有安全上下文 uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 user-linux用户root被映射到SELinux用户unconfined_u role-SELinux用户unconfined_u被映射到角色unconfined_r type-用户被赋予类型 unconfined_t level- sensitivity—用户仅仅拥有一个敏感级别,s0 categories—用户可以访问c0.c1023,即所有类别(c0-c1023) 文件拥有安全级别 使用 ls -Z -rw-r–r--. root root unconfined_u:object_r:admin_home_t:s0 x user-文件映射到SELinux用户unconfined_u role-文件映射到角色object_r type-用户被赋予类型 admin_home_t level- sensitivity—用户仅拥有一个敏感级别,s0 categories—MSC未设置此文件 进程拥有安全上下文 使用ps -eZ | grep bash unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3941 pts/0 00:00:00 bash user-进程被映射到SELinux用户unconfined_u role-进程被映射到角色unconfined_r type-进程被赋予类型 unconfined_t level- sensitivity—用户仅仅拥有一个敏感级别,s0 categories—用户可以访问c0.c1023,即所有类别(c0-c1023)
策略类型确定了使用那些策略规则组来指定主体可以访问的客体,还指定了需要那些特定的安全上下文属性。通过策略类型,可以更精细地了解SELinux所实现的访问控制。Targeted、MLS、Minimum。
Targeted策略的主要目的是限制“有针对性的”守护进程,然而,它还可以限制其他进程和用户。有针对性的守护进程都被嵌入沙盒,沙盒是一种环境,在该环境中,程序可以运行。但对其他客体的访问则被严格控制。 有针对性的守护进程被严格限制,以便通过该进程所引发的恶意攻击不会影响到其他服务或者Linux系统。通过使用有针对性的守护进程,可以更加安全地共享打印服务,文件服务,web服务等,同时降低因为访问这些服务而对系统中其他资产的风险。 所有没有针对性的主体和客体都运行在unconfined_t域中。unconfirned_t域没有SELinux策略限制,因此只能用传统的linux安全。
MLS(Multi-Level Security)策略的主要目的是强行执行Bell-LaPadula模型。它根据角色的安全许可和客体的分类级别授予对其他主体和客体的访问。
该策略最初是针对计算机或者设备(如智能机)而创建的。 他与targeted策略是相同的,但它仅使用基本的策略规则包,这种裸骨策略可以被用来在一个指定的守护进程中测试SElinux的影响。对于低内存设备来说,Minimum策略允许SELinux在不消耗过多资源的情况下运行。