首页 > 代码库 > SElinux详解

SElinux详解

SELinux :全称:Security Enhanceed Linux,字面上的意思是强化安全的Linux系统。

实际上SELinux设计的目标是为了避免资源的误用,SELinux是在进行程序,文件权限设置的过程中依据的一个内核模块,同时也是能够控制网络服务能付访问资源的一个关卡。


传统的文件权限与账号的关系是自主访问控制的,即DAC,是根据对于文件的rwx控制文件被访问的权限。这个模式会产生的危险是,一旦root用户的密码被盗,会对系统产生不可想象的影响


因此,基于这些,开发了以策略规则指定特定的程序来读取文件,即委托访问控制,MAC

可以针对特定的进程与特定的文件资源来进行权限的控制,也就是说,即使是root用户,在使用不同的进程的时候,能够得到的权限也不一定都是777,而是要根据当时进程的设置而决定的。


SELinux的实现就是基于MAC访问控制,控制的主体是进程,而目标是该进程使用的文件的权限


  1. 主体

    主进程能否访问的“目标资源”一般就是文件系统,所以主体可以认为是文件系统

  2. 策略

    进程与文件数量庞大,因此SELinux会根据某些服务来定制基本的访问安全性策略,这些策略之内还存在详细的规则来指定不同的服务并开放某些资源的访问与否。

    其中targeted是针对网络服务限制较多,针对本机限制较少,是默认的策略

    strict是完整的SELinux限制,限制方面比较严格

  3. 安全上下文

    主体能不能访问目标除了制定策略之外,主体与目标的安全上下文必须一致才能顺利访问,如果某些设置错误,就会出现权限不符的错误信息

        存在于主体进与目标文件资源中,放置在inode内,因此注意进程想要读取文件资源是,同样需要读取inode。


那么安全上下文到底是什么呢:

格式如下所示:

identify:role:type


身份标识:indentify

相当于账号中的身份标识,主要的身份有下面三种:

    root:表示root的身份,安全上下文中显示的是root用户根目录下的文件

    system_u:表示系统程序方面的知识,通常就是进程

    user_u:代表一般用户账号相关的身份

其中"-u"在于让我们了解数据为何种身份,而系统上的发部分数据都会是system_u。


角色 Role

通过这个字段可以判断这个数据时属于程序,文件资源,还是代表用户,一般的角色有一下几种:

Object_r:代表是问及那或目录等文件资源

system_r:代表进程

”-r“表示role,标识字段


类型 Type

在默认的targeted策略中,Identity与Role字段基本上是不重要的,类型字段在文件中与进程的定义不大相同,分别有:

Type:在文件资源(object)上称为类型。

domain:在主体程序中称为域。   

    在进程中,type和domain搭配,程序才能顺利读取文件资源。



SELinux的启动,关闭,与查看

目前SELinux支持三种模式:

    1.enforcing:强制模式,代表SELinux正在 运行中,并且已经正确开始限制domain/type了.

    2.permissive:宽容模式,代表SELinux正在运行之中,不过仅会有警告信息,而不会限制domain/type的访问。

    3.disabled:关闭,SELinux没有实际运行。


查看SELInux相关信息的命令:

getenforce:当前SELinux的状态。

sestatus:查看SELinux的策略:(显示的信息包括:SELinux的状态,相关文件的挂载点,目前的模式,配置文件指定的格式,当前的策略)

技术分享












SElinux的启动与关闭:要注意的是,一旦改变了策略,就需要重新启动,因为SELinux是整合到内核中的,所以,如果要启动SELInux,将SELINUX=enforcing设置妥当,并且制定SELINUXTYPE=targeted的这一个设置,并且到/boot/grub/menu这个文件中,看内核有没有关闭SELinux



setenforce[0|1]     SELinux模式在enforcing 和perrmissing之间的切换

   0.转换成permissing,宽容模式

  1. 转换成enforcing,强制模式

    需要注意的是setenforce无法在disable 的模式下面进行模式的切换


       技术分享

chcon修改安全上下文

    -R:连同该目录下的字幕里也同时修改

    -t:后面接安全上下文的类型字段 如http_sys_content_t

    -u:后面接身份识别 如system_u

    -r:后面接角色,比如system_r

    --reference=范例文件:拿某个文件当成范例来修改后续接的文件的类型


并且,主体程序必须经过SELinux策略内的规则放行之后,就可以与目标资源进行安全上下文的比较,若比较失败则无法访问目标



SELInux所需的服务:

SELinux是整合到内核的一个内核功能,因此几乎不要要启动什么额外的服务来打开SELinux的。开机完成之后,SELInux就自己启动了,不过,当我们复制或者移动某些特定的目录的时候,可能偶遇没有注意到修改SELinux的安全上下文内容,结果导致网络服务无法顺利运行的问题。因此需要一个解决办法来记录SELinux的信息,并提供解决方案。需要下面几个服务的辅助

1.setroubleshoot:将错误信息写入/var/log/messages

2.auditd:将详细数据写入/var/log/audit/audit.log

audit是稽核的意思,这个audit会将SELinux发生的错误信息写入/vatr/log/audit.log中,与上个服务相同的,最好在开机的时候就设置这个服务启动模式




SELinux的策略与规则管理

一个进程能否读取到目标文件资源的重点在SELinux的策略以及策略内的额各项规则,然后在通过该规则定义的去处理各自目标文件的安全上下文,尤其是类型的部分

  1. 策略查询

    1.seinfo 

    1. -A 列出SELinux的状态,规则布尔值,身份识别,角色,类型等所有信息

    2. -t列出SELinux的所有类型(type)种类

    3. -r,所有身份标识种类

    4. -b,所有规则种类

      2.sesearch

         a.列出该类型或布尔值的所有相关信息

         b.接类型

         c.接布尔值的规则

    2.查询到某个主体进程可以读取的目标文件资源

        通过这两个命令可以查询到实际的策略数据都是放置在/etc/selinux/targeted/polic/下面

            布尔值的查询与修改查看每个布尔值是启动还是关闭的:

                getsebool -a 

        设置每个布尔值

                setsebool -P 布尔值 =[0|1]        -P 参数将设置写入配置文件

     3.默认目录的安全上下文查询与修改

        semanege {login|user|port|interface|fcongtext|translation} -l

        fcontext:主要用在安全上下文方面的用途,-l是查询的意思


                                                                                                                                                                                  










本文出自 “牛顿也吃苹果” 博客,请务必保留此出处http://mi55u.blog.51cto.com/11619321/1941027

SElinux详解