1.什么是SELinxu?
SELinux(Security-Enhanced Linux),安全增强型Linux,最初是由犹他大学Flux团队和美国国防部开发的Flux高级安全内核(FLASK)开发的是由NSA开发的一种访问控制体系。NSA对该开发进行了改进,并作为开源软件发布,目前SELinux已集成到Linux2.6内核系列和几个Linux发行版中,作为Linux内核中主要的强制访问控制(MAC)机制。
2.设计目的
要说到设计目的,就需要了解DAC和MAC.
1.自主访问控制(Discretionary Access Control)
自主访问控制简称DAC,是访问控制的一种类型,它根据主体的身份和他所属的组限制对客体的访问。所谓的自主,是因为拥有访问权限的主体,可以直接(或间接)地将访问权限赋予其他主体。DAC的主体一般是用户。
说的更直白一点,就是根据用户是否具有rwx权限来决定对客体的操作。
因此,DAC的缺点是显而易见的:
- 1.所有权限都是对于root用户来说都是无效的
一旦root用户密码泄露,则系统所有文件、数据都处于危险之中。
- 2.使用者可以变更文件权限
比如用户将某一文件权限通过chmod -R 777
或者chmod -R uoa=rwx
修改权限后,所有用户都具有rxw权限,该文件就会被任何用户操作。
2.强制访问控制(Mandatory Access Controll)
强制访问控制,简称MAC,所谓强制访问控制是指由系统对用户所创建的对象进行统一的强制性控制,按照确定的规则决定哪些用户可以对哪些对象进行哪些操作类型的访问,即使是创建者用户,创建一个对象后也可能无权访问该对象。
在MAC中,不存在"root用户"的概念,即使是root用户,对于不同的文件、程序,可能会有不同的权限,因此,在MAC中,主体由“用户”变成了“进程”。MAC一般与DAC配合使用,图示如下:
正是由于DAC对root用户的限制太宽松,因此SELinux采用了MAC进行程序的控制。
SELinux支持三种类型的MAC:
Type Enforcement
:类型强制模式,进程运行在实体中,且主体对客体的动作由policy控制。Multi-Level Secure(MLS)
:多级安全模式,用于访问不同级别的组织,以便将受限制的信息与机密信息分开以保持机密性。它允许允许通过扩展安全上下文以包括安全级别来在策略中实现如“no write down”和“no read up”的强制规则。Multi-Category Security(MCS)
:多类型安全模式。
3.SELinux基本概念
主体(Subject)
在SELinux中,主体是一个进程,有安全上下文和它关联。
目标(Object)
在SELinux中,Object是通过进程访问的文件,套接字,管道或网络接口等资源。 这些目标根据它们提供的资源和与其目的相关的访问权限(例如,读取,接收和写入)进行分类,并分配安全上下文。
SELinux用户(Users)
SELinux用户不等于Linux用户,最大的区别就是SELinux用户在登录期间不会改变,而Linux用户则可以通过su、sudo变为root用户。通常多个Linux用户会使用一个SELinux用户,但可以对他们进行1:1的映射,例如Linux的root用户和SELinux root用户(SELinux root并不像Linux root一样对所有权限都无效),一般而言,SELinux用户一般以_u
结尾。
角色(Roles)
一个SELinux用户可以接受多个角色,角色的含义由策略定义。目标一般具有object_r
角色,一般而言,角色以_r
结尾。
类型/域(Types)
Types是决定是否可以访问的主