Selinux的由来和安全上下文

SELinux是什么

SELinux(Security-Enhanced Linux),称为安全增强型Linux,是有美国安全局(NSA)开发的,Linux内核从2.6版本就进行了集成,使的整个系统变的更安全。

为什么是安全增强型

在没有SELinux的操作系统中,一个资源是否能被访问和操作是由操作者是否有该资源的访问和操作权限所决定的,且系统管理员拥有所有权限,这种情况的权限管理机制的主体是用户,也被称为自主访问控制DAC(Discretionary access control)。

相对于自主访问控制DAC,后来又出现了强制访问机制MAC(Mandatory access control), 在这种机制下,一个资源是否被访问取决于以下两个因素:

  • 操作者是否具有该资源的访问和操作权限(DAC)
  • 当前进程是否拥有这一列资源的访问权限

以上,我们看到MAC相对于DAC在控制上有所增强,SELinux就是MAC机制的一种实现,所以称之为安全增强型。MAC权限管理机制主体是进程。

在使用了SELinux的操作系统中,即使用户是以管理员身份也并不一定能操作所有资源,SELinux仍会查看该进程的类型和访问资源的类型才能决定是否允许,这样进程的活动空间被压缩到最小。
我们在介绍Selinux的使用后,会有具体列子来演示这一块安全性的提高。

SELinux的常用概念

  • 主体: 进程

  • 对象:被主体访问的资源,可以是文件,目录,端口,设备等

  • 政策
    系统中有大量的文件和进程,我们只选择性的对某些进程进行管制。
    而哪些进程需要管制,要怎么管制就是由政策决定。政策总共又三种:

    • targeted: 对大部分网络服务进行管制。
    • minimun: 从targeted中的大部分网络服务中选择一部分进行管制。
    • mls: 多级安全保护,对所有进程进行管制,这是最严格的政策。

    政策可以在/etc/selinux/config中设定

  • 规则
    一套政策里面有多条规则,部分规则可以按照需求启动或者禁用。规则是模块化的、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则,用户也可以通过手动增减规则。

  • 安全上下文
    安全上下文是访问控制中的一个简单的,一致的访问控制属性。在系统中,每个资源都有安全上下文。通常我们提到的是:

    • 进程安全上下文
      查看进程上下文,我们以httpd服务为例,我们使用以下指令:

      $ ps auxZ | grep httpd
        system_u:system_r:httpd_t:s0    root     28651  2.3  0.0 221920  5004 ?        Ss   13:55   0:00 /usr/sbin/httpd -DFOREGROUND
        system_u:system_r:httpd_t:s0    apache   28655  0.0  0.0 224004  3096 ?        S    13:55   0:00 /usr/sbin/httpd -DFOREGROUND
        system_u:system_r:httpd_t:s0    apache   28656  0.0  0.0 224004  3096 ?        S    13:55   0:00 /usr/sbin/httpd -DFOREGROUND
        system_u:system_r:httpd_t:s0    apache   28657  0.0  0.0 224004  3096 ?        S    13:55   0:00 /usr/sbin/httpd -DFOREGROUND
        system_u:system_r:httpd_t:s0    apache   28658  0.0  0.0 224004  3096 ?        S    13:55   0:00 /usr/sbin/httpd -DFOREGROUND
        system_u:system_r:httpd_t:s0    apache   28659  0.0  0.0 224004  3096 ?        S    13:55   0:00 /usr/sbin/httpd -DFOREGROUND
      

      第一列就是该进程的安全上下文,三个:间隔4个字段。
      拿该进程上下文举例,来看字段的意义:

      system_u:system_r:httpd_t:s0
      #身份#角色#类别#灵敏度
      

      则不同字段不同的值代表不同的含义:
      身份字段用来标示该数据或者进程被哪个身份所拥有,相当于权限中的用户身份,根据不同的值有多种身份,常用的有三种情况:

      • root: 安全上下文的身份是root
      • system_u:安全上下文的身份是系统用户
      • user_u: 安全上下文的身份是一般用户账户相关的身份

      角色字段用来表示当前是进程还是文件还是其他,则常用有两种情况:

      • system_r: 进程
      • object_r: 文件

      类别字段中进程的类别字段我们称之为域,即主体的域。如在本例中,httpd进程的域为httpd_t。

      灵敏度:一般使用s0, s1, S2来命名的。数字代表灵敏度的分级。数值越大,代表明敏度越高。

    • 文件安全上下文
      文件安全上下文可通过以下方式进行查看:

      $ ls -alZ /var/www/html/index.html 
      -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html
      

      我们看到我们的上下文的字段为:

      unconfined_u:object_r:httpd_sys_content_t:s0
      

      文件上下文的字段和进程上下文的字段是一样的,只是在类型字段,这里不称为域,而称为文件类型。通常我们从文件的安全上下文的文件类型上可以看到其所属的进程域,如“httpd_sys_content_t”我们可以看到其进程域为httpd_t, 则目标进程域可以访问该文件。

你可能感兴趣的:(linux,usages)